如何将循环后产生的图元加入选择集,请高手指点!
本帖最后由 suiran 于 2023-4-2 10:05 编辑以下程序有几个问题:1、boundary产生的轮廓重复;2、程序运行后总有一块图形会再次移动,因为最后一次 boundary 并未产生图形,而却再次执行了
"move" (entlast);为了解决以上问题,我想将所有图元一块移动,问题来了:1、如何将每次循环后产生的图元新建一个或者加入选择集? 目前我只会entlast。2、新建的选择集在执行move,overkill(因为重复需要处理图元)后还能继续使用吗?改怎样弄?望有时间的高手指点迷津!谢谢!
[*];;;;;;;;;批量boundary;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[*](defun C:tt(/ col mn mode pt1 pt2)
[*] (setq mn (wbk (ssget)))
[*] (setq pt1 (car mn))
[*] (setq pt2 (cadr mn))
[*] (setq pt1x (+ (car pt1) 50))
[*] (setq i 0)
[*] (setq pt4 (getpoint "请输入新位置:"))
[*] (repeat 10
[*] (setq pt1y (+ (+ (cadr pt1) 50) (* 635 i)))
[*] (setq pt3 (list pt1x pt1y ))
[*] (command "boundary" "A" "O" "P""B""N" ss "" "" pt3 "")
[*] (command "move" (entlast)"""non" pt1 "non" pt4)
[*] (setq i (1+ i))
[*])
[*](princ)
[*])
[*](defun wbk(ss / m n o)
[*] (setq k (sslength ss))
[*] (princ "一共选择了")
[*] (princ k)
[*] (princ "个图元。\n")
[*] (repeat (setq i (sslength ss))
[*] ;(princ i)
[*] ;(princ "\n")
[*] (if
[*] (and
[*] (setq o (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
[*] (vlax-method-applicable-p o 'getboundingbox)
[*] (not
[*] (vl-catch-all-error-p
[*] (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b))
[*] )
[*] )
[*] )
[*] (setq m (cons (vlax-safearray->list a) m)
[*] n (cons (vlax-safearray->list b) n)
[*] )
[*] )
[*] )
[*] (if (and m n)
[*] (mapcar '(lambda (a b) (apply 'mapcar (cons a b)))
[*] '(min max)
[*]
[*] (list m n)
[*] )
[*] )
[*] )
本帖最后由 kucha007 于 2023-4-2 10:29 编辑
试试这个:
;收集给定实体之后产生的所有实体
(defun K:NewSS_After (elast / en SS)
(if elast
(progn
(setq SS (ssadd))
(setq en (entnext elast))
(while en
(if
(not (member (cdr (assoc 0 (entget en))) '("ATTRIB" "VERTEX" "SEQEND")))
(setq SS (ssadd en SS))
)
(setq en (entnext en))
)
SS
)
)
)
(setq e0 (entlast));记录实体起始点
;做你想做的事情
(setq SS (K:NewSS_After e0))
kucha007 发表于 2023-4-2 10:27
试试这个:
您好,按照上面的代码试了n次,最终并非想要的结果,由于本人水平有限,能否抽时间帮忙把代码添加进去,在下感激不尽。谢谢
页:
[1]