(defun pt ()
(setq p1 nil
p2 nil)
(while (or (null p1) (null p2))
(if (null p1)
(progn
(setq p1 (getpoint (strcat"\n<空格>重新开始OR<Esc>退出OR请点击第一个点:当前管外径是:"(rtos (* offset_distance 2)2 2 ))))
(if (null p1)
(progn
(princ "\n重新输入管外径。")
(C:djg)
)
)
)
)
(if (null p2)
(setq p2 (getpoint p1"\n请点击第二个点:"))
)
)
(line p1 p2)
)
(defun line (p1 p2)
(setq original_line (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2))))
; 计算直线的方向向量
(setq dx (- (car p2) (car p1)))
(setq dy (- (cadr p2) (cadr p1)))
; 计算垂直方向向量(通过交换坐标并改变其中一个的符号)
(setq perp_dx (- dy))
(setq perp_dy dx)
; 计算垂直方向的单位向量
(setq xiangliang (sqrt (+ (* perp_dx perp_dx) (* perp_dy perp_dy))))
(setq unit_perp_dx (/ perp_dx xiangliang))
(setq unit_perp_dy (/ perp_dy xiangliang))
; 计算偏移后的端点坐标
(setq new_p1 (list (+ (car p1) (* offset_distance unit_perp_dx))
(+ (cadr p1) (* offset_distance unit_perp_dy))))
(setq new_p2 (list (+ (car p2) (* offset_distance unit_perp_dx))
(+ (cadr p2) (* offset_distance unit_perp_dy))))
(setq new_line1 (entmakex (list (cons 0 "LINE") (cons 10 new_p1) (cons 11 new_p2))))
(setq new_p3 (list (- (car p1) (* offset_distance unit_perp_dx))
(- (cadr p1) (* offset_distance unit_perp_dy))))
(setq new_p4 (list (- (car p2) (* offset_distance unit_perp_dx))
(- (cadr p2) (* offset_distance unit_perp_dy))))
(setq new_line2 (entmakex (list (cons 0 "LINE") (cons 10 new_p3) (cons 11 new_p4))))
; 删除初始直线
(command "erase" original_line "")
(pt)
)
(defun C:djg()
(setq offset_distance (getreal "\n请输入管外经: "))
(setq offset_distance (/ offset_distance 2 ))
(pt)
)
很抱歉,为了大家更简单的绘图,说个有点打击的话,无需插件,使用系统自带命令可以实现上图命令:
首先,使用菜单-格式-多线样式,设置共三根线,中心线为红色中心线距离为0, 上部距离为-0.5,下部为0.5.
其次,使用多线命令mline,可以点点随意画图了。所谓宽度就是特性里更改比例的数值,可以随时更改,自动变宽。
特点:用起来更简单,且另外使用自带的可以多线编辑命令,实现接口的自动处理,遗憾的是特性里没有长度属性,
页:
1
[2]