本帖最后由 尘缘一生 于 2018-2-4 18:33 编辑
自己写的“动态折断线”,
很遗憾,在扯动中不能使用“正交”,如何完善修改呢?
 - (defun c:ZDX(/ pt1 pt2 pt3 pt4 pt5 pt6 pt7 ang dis gr n %k i)
- (setq pt1 (getpoint "\ngive the left point:"))
- (setq %k t) ;循环条件
- (setq i nil);初始设置)
- (while %k
- (setq gr (grread t 4 0);;取得鼠标操作及坐标
- n (car gr) ;;鼠标操作
- pt2 (cadr gr) ;;鼠标坐标
- )
- (if (= n 5) ;;没有操作
- (progn
- (if (/= i nil)
- (entdel i)
- );;如果有过度实体就删除
- (setq ang (angle pt1 pt2))
- (setq dis (distance pt1 pt2))
- (setq pt3 (polar pt1 ang (/ dis 2)))
- (setq pt4 (polar pt1 ang (- (/ dis 2) 1.3)))
- (setq pt5 (polar pt3 (+ ang (/ pi 2)) 3.5))
- (setq pt6 (polar pt3 (- ang (/ pi 2)) 3.5))
- (setq pt7 (polar pt1 ang (+ (/ dis 2) 1.3)))
- (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '
- (90 . 5) (cons 10 pt1) (cons 10 pt4) (cons 10 pt5) (cons 10 pt6)
- (cons 10 pt7) (cons 10 pt2)
- )
- )
- (setq i (entlast));;得到过度实体名
- )
- )
- (if (= n 3)
- (setq %k nil)
- );;3表示左键;结束循环
- (if (or
- (= n 2)
- (= n 25)
- );;2表示空格;25表示右键;结束循环
- (progn
- (setq %k nil)
- (entdel i)
- )
- )
- )
- (print)
- )
总之:需要有正交功能的grread函数,谁有提供吗?非源码请绕行。
|