qazxswk
发表于 2024-9-3 12:11:00
不明白你的用意,我都是这样写的
(while (not (setq ss (ssget))))
就是没有选中对象的情况下,一直选,选中为止,按空格与回车不能退出,只能按ESC退出。
zolly
发表于 2024-9-3 12:21:49
飞雪神光 发表于 2024-9-3 10:55
你在while跳出后又使用ss了?发代码看看
(defun C:tt()
(setvar "cmdecho" 0)
(princ "\n选择第一个选择集")
(setq ss (ssget (list '(0 . "LINE"))))
(while ;;;(and ss (> (sslength ss) 0))
(findxmin)
(setq x1 xmin)
(setq y1 y)
(princ "\n选择第二个选择集")
(setq ss (ssget (list '(0 . "LINE"))))
(findxmin)
(setq x2 xmin)
(setq p1 (list xmin y1))
(command "move" ss "" (cdr(assoc 10 ent)) p1)
)
(princ)
)
(defun findxmin()
(setq n 1 )
(setq ent (ssname ss 0))
(setq xmin (cadr (assoc 10 (entget ent))))
(repeat (- (sslength ss) 1)
(setq ent (entget (ssname ss n)))
(setq a (cadr (assoc 10 ent)))
(setq y (caddr (assoc 10 ent)))
(if(< a xmin) (setq xmin a))
(setq n (1+ n))
)
(princ)
)
随便弄了个,大概就这个意思,有N个选择集,当先到中间不想选了,如何让选择退出并让程序运行完不出错,按空格或回车就出错
zolly
发表于 2024-9-3 12:24:51
qazxswk 发表于 2024-9-3 12:11
不明白你的用意,我都是这样写的
(while (not (setq ss (ssget))))
就是没有选中对象的情况下,一直选, ...
按空格与回车会出错,也相当于ESC终止程序继续运行
start4444
发表于 2024-9-3 12:30:20
出错应该是后面的东西,加个(if ss (progn 。。。。)应该就可以顺利退出while了
飞雪神光
发表于 2024-9-3 12:32:38
zolly 发表于 2024-9-3 12:21
(defun C:tt()
(setvar "cmdecho" 0)
你这while后面也没有东西了啊(defun c:tt (/ findxmin p1 ss x1 x2 y1)
(defun findxmin(/ a ent n xmin y)
(setq n 0)
(setq ent (ssname ss 0))
(setq xmin (cadr (assoc 10 (entget ent))))
(repeat(sslength ss)
(setq ent (entget (ssname ss n)))
(setq a (cadr (assoc 10 ent)))
(setq y (caddr (assoc 10 ent)))
(if (< a xmin) (setq xmin a))
(setq n (1+ n))
)
(princ)
)
(setvar "cmdecho" 0)
(princ "\n选择第一个选择集")
(setq ss (ssget (list '(0 . "LINE"))))
(while (and ss (> (sslength ss) 0))
(findxmin)
(setq x1 xmin)
(setq y1 y)
(princ "\n选择第二个选择集")
(setq ss (ssget (list '(0 . "LINE"))))
(if (and ss (> (sslength ss) 0))
(progn
(findxmin)
(setq x2 xmin)
(setq p1 (list xmin y1))
(command "move" ss "" (cdr (assoc 10 ent)) p1)
)
)
(princ "\n选择第一个选择集")
(setq ss (ssget (list '(0 . "LINE"))))
)
(princ)
)
zolly
发表于 2024-9-3 12:51:00
飞雪神光 发表于 2024-9-3 12:32
你这while后面也没有东西了啊
假设写了哈:lol
zolly
发表于 2024-9-3 13:03:01
飞雪神光 发表于 2024-9-3 12:32
你这while后面也没有东西了啊
原来while里面再加个IF就可以了,非常感谢
zolly
发表于 2024-9-3 13:07:14
start4444 发表于 2024-9-3 12:30
出错应该是后面的东西,加个(if ss (progn 。。。。)应该就可以顺利退出while了
确实是这样,谢谢解答
xyp1964
发表于 2024-9-3 22:09:11
(while (and (setq ss1 (ssget '((0 . "LINE"))))(setq ss2 (ssget '((0 . "LINE"))))) ...)
CAD智能@未来
发表于 2024-9-4 09:34:17
解决报错,可以添加一个error函数