明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 836|回复: 2

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

[复制链接]
发表于 2023-4-2 10:02:47 | 显示全部楼层 |阅读模式
本帖最后由 suiran 于 2023-4-2 10:05 编辑

以下程序有几个问题:1、boundary产生的轮廓重复;2、程序运行后总有一块图形会再次移动,因为最后一次 boundary 并未产生图形,而却再次执行了
[size=10.402pt]"move" (entlast);为了解决以上问题,我想将所有图元一块移动,问题来了:1、如何将每次循环后产生的图元新建一个或者加入选择集? 目前我只会entlast。2、新建的选择集在执行move,overkill(因为重复需要处理图元)后还能继续使用吗?改怎样弄?  望有时间的高手指点迷津!谢谢![size=10.402pt]
  • ;;;;;;;;;批量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)
  •         )
  •       )
  •     )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-4-2 10:27:59 | 显示全部楼层
本帖最后由 kucha007 于 2023-4-2 10:29 编辑

试试这个:
  1. ;收集给定实体之后产生的所有实体
  2. (defun K:NewSS_After (elast / en SS)
  3.   (if elast
  4.     (progn
  5.       (setq SS (ssadd))
  6.       (setq en (entnext elast))
  7.       (while en
  8.         (if
  9.           (not (member (cdr (assoc 0 (entget en))) '("ATTRIB" "VERTEX" "SEQEND")))
  10.           (setq SS (ssadd en SS))
  11.         )
  12.         (setq en (entnext en))
  13.       )
  14.       SS
  15.     )
  16.   )
  17. )

  18. (setq e0 (entlast));记录实体起始点
  19. ;做你想做的事情
  20. (setq SS (K:NewSS_After e0))
 楼主| 发表于 2023-4-3 08:53:12 | 显示全部楼层

您好,按照上面的代码试了n次,最终并非想要的结果,由于本人水平有限,能否抽时间帮忙把代码添加进去,在下感激不尽。谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 09:49 , Processed in 0.157844 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表