suiran 发表于 2023-4-2 10:02:47

如何将循环后产生的图元加入选择集,请高手指点!

本帖最后由 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:27:59

本帖最后由 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))

suiran 发表于 2023-4-3 08:53:12

kucha007 发表于 2023-4-2 10:27
试试这个:

您好,按照上面的代码试了n次,最终并非想要的结果,由于本人水平有限,能否抽时间帮忙把代码添加进去,在下感激不尽。谢谢
页: [1]
查看完整版本: 如何将循环后产生的图元加入选择集,请高手指点!