明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1541|回复: 3

[基础] 新人报道,发几个源码,欢迎指正

[复制链接]
发表于 2011-7-25 23:31:05 | 显示全部楼层 |阅读模式
;;;定义总图中标准间距排列的俯视图,主视图,左视图中的基准点信息
(defun C:df (/ pt-t pt-f pt-l)
  (setq pt-t (getpoint "\n指定第一张俯视图下侧基准线上的点(0,0)\n"))
  (if (= pt-t nil)
    (setq pt-t '(0 0))
  )
  (setq        yt (cadr pt-t)
        dt (getdist pt-t
                    "\n指定第二张俯视图下侧基准线上的点(0,100000)\n"
           )
  )
  (if (= dt nil)
    (setq dt 100000)
  )
  (setq
    pt-f (getpoint "\n指定第一张主视图下侧基准线上的点(0,100000)\n")
  )
  (if (= pt-f nil)
    (setq pt-f '(0 100000))
  )
  (setq        yf (cadr pt-f)
        df (getdist pt-f
                    "\n指定第二张主视图下侧基准线上的点(0,200000)\n"
           )
  )
  (if (= df nil)
    (setq df 100000)
  )
  (setq
    pt-l (getpoint
           "\n指定右侧第一张左视图的右侧基准线上的点(100000,100000)\n"
         )
  )
  (if (= pt-l nil)
    (setq pt-l '(100000 100000))
  )
  (setq        xl (car pt-l)
        dl (getdist pt-l
                    "\n指定右侧第二张左视图的右侧基准线上的点(0,100000)\n"
           )
  )
  (if (= dl nil)
    (setq dl 100000)
  )
)

;;;移动对象到x轴方向上的对齐位置
(defun C:mx (/ ed pt-2 x2 pt-1 x1 y1 l)
  (princ "\n指定要对齐的移动对象\n")
  (setq        ed   (ssget)
        pt-2 (getpoint "\n指定对齐目标的x基准点\n")
        x2   (car pt-2)
        pt-1 (getpoint "\n指定移动对象的x基准点\n")
        x1   (car pt-1)
        y1   (cadr pt-1)
        l    (getreal "\n指定相对移动水平距离")
  )
  (if (= l nil)
    (setq l 0)
  )
  (setq l (- (+ x2 l) x1))
  (command "move"
           ed
           ""
           (list l 0)
           ""
  )
  (command "zoom" "c" (list (+ x2 l) y1) "")
)

;;;移动对象到y轴方向上的对齐位置
(defun C:my (/ ed pt-2 y2 pt-1 y1 x1 h)
  (princ "指定要对齐的移动对象\n")
  (setq        ed   (ssget)
        pt-2 (getpoint "\n指定同一视图上对齐目标的y基准点")
        y2   (cadr pt-2)
        pt-1 (getpoint "\n指定同一视图上移动对象的y基准点")
        y1   (cadr pt-1)
        x1   (car pt-1)
        h    (getreal "\n指定相对移动高度")
  )
  (if (= h nil)
    (setq h 0)
  )
  (setq h (- (+ y2 h) y1))
  (command "move"
           ed
           ""
           (list 0 h)
           ""
  )
  (command "zoom" "c" (list x1 (+ y2 h)) "")
)

;;;根据df函数对全局变量dl的定义,移动对象到左视图x轴方向上的对齐位置
(defun C:lx (/ ed pt-2 x2 pt-1 x1 y1)
  (princ "\n指定左视图上要对齐的移动对象\n")
  (setq        ed   (ssget)
        pt-2 (getpoint "\n指定左视图上对齐目标的x基准点\n")
        x2   (car pt-2)
        pt-1 (getpoint "\n指定左视图上移动对象的x基准点\n")
        x1   (car pt-1)
        y1   (cadr pt-1)
  )
  (command "move"
           ed
           ""
           (list (- (rem (- xl x1) dl) (rem (- xl x2) dl))
                 0
           )
           ""
  )
  (command "zoom"
           "c"
           (list (+ x1 (- (rem (- xl x2) dl) (rem (- xl x1) dl))) y1)
           ""
  )
)

;;;根据df函数对全局变量df,yf的定义,移动对象到主视图、左视图高度方向上的对齐位置
(defun C:fy (/ ed pt-2 y2 pt-1 x1 y1)
  (princ "\n指定主视图或左视图上要对齐的移动对象\n")
  (setq        ed   (ssget)
        pt-2 (getpoint "\n指定主视图或左视图上对齐目标的y基准点")
        y2   (cadr pt-2)
        pt-1 (getpoint "\n指定主视图或左视图上移动对象的y基准点")
        x1   (car pt-1)
        y1   (cadr pt-1)
  )
  (command "move"
           ed
           ""
           (list 0
                 (- (rem (- y2 yf) df) (rem (- y1 yf) df))
           )
           ""
  )
  (command
    "zoom"
    "c"
    (list x1 (+ (- (rem (- y2 yf) df) (rem (- y1 yf) df)) y1))
    ""
  )
)

;;;根据df函数对全局变量dt,yt的定义,移动对象到俯视图高度方向上的对齐位置
(defun C:ty (/ ed pt-2 y2 pt-1 x1 y1)
  (princ "\n指定俯视图上要对齐的移动对象\n")
  (setq        ed   (ssget)
        pt-2 (getpoint "\n指定俯视图上对齐目标的y基准点")
        y2   (cadr pt-2)
        pt-1 (getpoint "\n指定俯视图上移动对象的y基准点")
        x1   (car pt-1)
        y1   (cadr pt-1)
  )
  (command "move"
           ed
           ""
           (list 0
                 (- (rem (- y2 yt) dt) (rem (- y1 yt) dt))
           )
           ""
  )
  (command
    "zoom"
    "c"
    (list x1 (+ (- (rem (- y2 yt) dt) (rem (- y1 yt) dt)) y1))
    ""
  )
)

;;;根据df函数对全局变量dl,dt,yt的定义,移动对象到左视图x轴方向上的对齐位置
(defun C:tl (/ ed pt-2 y2 pt-1 x1 y1)
  (princ "\n指定左视图上要对齐的移动对象\n")
  (setq        ed   (ssget)
        pt-2 (getpoint "\n指定俯视图上对齐目标的y基准点")
        y2   (cadr pt-2)
        pt-1 (getpoint "\n指定左视图上移动对象的x基准点")
        x1   (car pt-1)
        y1   (cadr pt-1)
  )
  (command "move"
           ed
           ""
           (list (- (rem (- xl x1) dl) (rem (- y2 yt) dt))
                 0
           )
           ""
  )
  (command
    "zoom"
    "c"
    (list (+ x1 (- (rem (- xl x1) dl) (rem (- y2 yt) dt))) y1)
    ""
  )
)

;;;根据df函数对全局变量dl,dt,yt的定义,移动对象到俯视图y轴方向上的对齐位置
(defun C:lt (/ ed pt-2 x2 pt-1 x1 y1)
  (princ "\n指定俯视图上要对齐的移动对象\n")
  (setq        ed   (ssget)
        pt-2 (getpoint "\n指定左视图上对齐目标的x基准点")
        x2   (car pt-2)
        pt-1 (getpoint "\n指定俯视图上移动对象的y基准点")
        x1   (car pt-1)
        y1   (cadr pt-1)
  )
  (command "move"
           ed
           ""
           (list 0 (- (rem (- xl x2) dl) (rem (- y1 yt) dt)))
           ""
  )
  (command
    "zoom"
    "c"
    (list x1
          (+ (- (rem (- xl x2) dl) (rem (- y1 yt) dt)) y1)
    )
    ""
  )
)

;;;绘制三维溜管在主视图或侧视图上的投影, 并给出三维溜管的实际长度
(defun C:ld (/           pt1         an    x1    y1           key         pta   ptb   xa
             ya           xb         yb    delta-x           delta-y     l     ac-l
             x2           y2
            )
  (command "_layer" "make" "spout-axis" "")
  (setq        pt1 (getpoint "\nspecify insertion point")
        an  (getangle "\nenter spout angle:")
  )
  (setq        x1 (car pt1)
        y1 (cadr pt1)
  )
  (while (and (< an 0) (> an (* (/ pi 180) 90)))
    (progn
      (alert "please enter a degree between 0 to 60")
      (setq an (getangle "\nenter spout angle:"))
    )
  )
  (initget "Front-view Left-view")
  (setq key (getkword "[Front view/Left view]"))
  (princ
    "\nplease specify start point and end point of projection line in the top view"
  )
  (setq        pta        (getpoint)
        ptb        (getpoint)
        xa        (car pta)
        ya        (cadr pta)
        xb        (car ptb)
        yb        (cadr ptb)
        delta-x        (- xb xa)
        delta-y        (- ya yb)
        l        (sqrt (+ (* delta-x delta-x) (* delta-y delta-y)))
        ac-l        (/ l (cos an))
  )
  (if (= key "Front-view")
    (progn
      (setq x2 (+ x1 delta-x)
            y2 (- y1 (* l (/ (sin an) (cos an))))
      )
      (command "line" pt1 (list x2 y2) "")
    )
    (progn
      (setq x2 (+ x1 delta-y)
            y2 (- y1 (* l (/ (sin an) (cos an))))
      )
      (command "line" pt1 (list x2 y2) "")
    )
  )
  (princ (strcat "actual length=" (rtos ac-l) "\n"))
)

评分

参与人数 1金钱 +10 收起 理由
hhh454 + 10 原创内容

查看全部评分

发表于 2011-7-26 06:46:25 | 显示全部楼层
谢谢楼主的分享
先下载来看看
发表于 2011-7-26 08:54:51 | 显示全部楼层
同顶,支持!
发表于 2011-7-26 13:05:38 | 显示全部楼层
支持分享,谢谢了,先下载看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-7-25 10:14 , Processed in 0.192116 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表