明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 909|回复: 12

[讨论] 如何得到一个命令完成后所绘制的所有图元

[复制链接]
发表于 2018-11-8 21:54 | 显示全部楼层 |阅读模式
比如,我用LINE命令画线段,我想将本次命令所画的所有line图元都收集到一个选择集里面,该如何实现?
我用(getlast)只能得到最后一段线段。:(
发表于 2018-11-10 08:56 | 显示全部楼层
本帖最后由 yshf 于 2018-11-10 09:39 编辑

(setq ent (entlast));取调用命令前的最后一个图元
(command ... );调用命令
(setq ssa (ssadd));建立一个空选择集
(while (setq ent (entnext ent));如果下一个图元不为nil
    (setq ssb (ssadd ent ssb));则将其加入选择集中
)
或者:
(setq ModelSpace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
(setq N0 (vla-get-Count ModelSpace));调用命令前模型空间中的图元总个数
(command ... );调用命令
(setq N1 (vla-get-Count ModelSpace));调用命令后模型空间中的图元总个数
(if (> N1 N0)
      (progn
          (setq ssa (ssadd));建立一个空选择集
          (setq i 0)
          (repeat (- N1 N0);将调用命令后所绘制的图元逐一加入选择集中
               (setq ssa (ssadd (vlax-vla-object->ename (vla-item ModelSpace (+ N0 i))) ssa))
               (setq i (1+ i))
          )
     )
)

;;;选择集ssa中的图元即调用命令后所绘制的所有图元

发表于 2018-11-9 08:55 | 显示全部楼层
可以用这个函数,画图前,先得到当前最后一个图元名,再进行绘图,画完再用这个函数就可以得到所有图元的选择集了

  1. ;;说明:xyp-SSelEntnext 返回某图元后的图元选择集 (xyp-SSelEntnext s0实体名)
  2. ;;参数:s0:实体名
  3. ;;返回:图元选择集
  4. (defun xyp-SselEntnext (s0 / ss)
  5.   (setq ss (ssadd))
  6.   (while (setq s0 (entnext s0))
  7.     (setq ss (ssadd s0 ss))
  8.   )
  9.   (if (/= (sslength ss) 0)
  10.     ss
  11.   )
  12. )


点评

活学活用,不错!  发表于 2018-11-9 20:36
 楼主| 发表于 2018-11-9 22:19 | 显示全部楼层
edata 发表于 2018-11-9 12:21
没有特殊需要,不建议用command,
你可以尝试 entmakex 创建直线

长老,我是想调用别的软件公司二次开发后的命令。
按上述兄弟们推荐的方法,在ACad内部命令是是可行的,但对于二次开发的命令却是不行 ,失败了
发表于 2018-11-9 08:27 | 显示全部楼层
新建一个空块,同时进入块的在位编辑状态,这时,下面你画的所有对象都位于这个空白块里了,后面如果不用想块了,可以将这个块炸开成组。这些对象就位于这个组里了。
发表于 2018-11-9 09:34 | 显示全部楼层
收集图形,用entlast、while函数
 楼主| 发表于 2018-11-9 09:51 | 显示全部楼层
ssyfeng 发表于 2018-11-9 08:55
可以用这个函数,画图前,先得到当前最后一个图元名,再进行绘图,画完再用这个函数就可以得到所有图元的选 ...

先确定起始点,再得到终点,再截取。
谢谢
 楼主| 发表于 2018-11-9 09:51 | 显示全部楼层
水吉空 发表于 2018-11-9 09:34
收集图形,用entlast、while函数

不是很清楚你的具体做法,能明示一下吗?
谢谢
发表于 2018-11-9 12:21 | 显示全部楼层
没有特殊需要,不建议用command,
你可以尝试 entmakex 创建直线
 楼主| 发表于 2018-11-10 10:41 来自手机 | 显示全部楼层
yshf 发表于 2018-11-10 08:56
(setq ent (entlast));取调用命令前的最后一个图元
(command ... );调用命令
(setq ssa (ssadd));建立一 ...

已解决,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 12:40 , Processed in 0.469955 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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