123456abc 发表于 2014-3-1 19:08:52

什么语句可以使LSP反复运行,直到按ESC或右键退出呢?

如题,请高手指点!

kwok 发表于 2014-3-1 19:51:37

(while
.....
)
这个也可以
(repeat.....
)

123456abc 发表于 2014-3-1 20:12:25

搞了半天没搞好,请问下面这个程序如何使它执行完一个操作以后继续重复这个命令,拜托了

(defun c:dt()
(princ"选择直线或多线")
(setq ss (ssget))
(setq n 0)
(setq fz1 (getpoint "请选择延伸的点"))
(repeat (sslength ss)

(setq xn (ssname ss n))
(setq xn_dat (entget xn))
(setq xn_type (cdr (assoc 0 xn_dat)))
(if (= xn_type "LINE")
(progn
(setq xn_qd (cdr (assoc 10 xn_dat)))
(setq xn_zd (cdr (assoc 11 xn_dat)))
(setq fz2 (polar fz1 (+ (angle xn_qd xn_zd) (/ pi 2)) 100))
(setq jd (inters xn_qd xn_zd fz1 fz2 nil))
(if (> (distance xn_qd jd) (distance xn_zd jd))
(progn
(setq oldr (assoc 11 xn_dat))
(setq newr (cons 11 jd))
(setq xn_dat (subst newr oldr xn_dat))
(entmod xn_dat)
);progn1完成
(progn
(setq oldr (assoc 10 xn_dat))
(setq newr (cons 10 jd))
(setq xn_dat (subst newr oldr xn_dat))
(entmod xn_dat)
);progn2完成
);if1完成
);progn0完成
);if0完成

(if (= xn_type "LWPOLYLINE")
(progn
(setq xn_qd (cdr (assoc 10 xn_dat)))
(setq xn_zd (cdr (assoc 10 (reverse xn_dat))))
(setq fz2 (polar fz1 (+ (angle xn_qd xn_zd) (/ pi 2)) 100))
(setq jd (inters xn_qd xn_zd fz1 fz2 nil))
(setq xn_zd (cdr (assoc 10 (reverse xn_dat))))

(if (> (distance xn_qd jd) (distance xn_zd jd))
(progn
(setq oldr (assoc 10 (reverse xn_dat)))
(setq newr (cons 10 jd))
(setq xn_dat (subst newr oldr xn_dat))
(entmod xn_dat)
);progn1完成
(progn
(setq oldr (assoc 10 xn_dat))
(setq newr (cons 10 jd))
(setq xn_dat (subst newr oldr xn_dat))
(entmod xn_dat)
);progn2完成
);if完成

);progn5完成
);if3完成
(setq n (+ 1 n)));repeat完成
(princ)
)

ZZXXQQ 发表于 2014-3-1 20:37:30

MULTIPLE DT

lostbalance 发表于 2014-3-2 06:27:45

while循环,或defun子程序
最简单的在最后的(princ)语句前加(c:dt),命令名改了也跟着改。。
页: [1]
查看完整版本: 什么语句可以使LSP反复运行,直到按ESC或右键退出呢?