如何得到一个命令完成后所绘制的所有图元
比如,我用LINE命令画线段,我想将本次命令所画的所有line图元都收集到一个选择集里面,该如何实现?我用(getlast)只能得到最后一段线段。:(
本帖最后由 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中的图元即调用命令后所绘制的所有图元
可以用这个函数,画图前,先得到当前最后一个图元名,再进行绘图,画完再用这个函数就可以得到所有图元的选择集了
;;说明:xyp-SSelEntnext 返回某图元后的图元选择集 (xyp-SSelEntnext s0实体名)
;;参数:s0:实体名
;;返回:图元选择集
(defun xyp-SselEntnext (s0 / ss)
(setq ss (ssadd))
(while (setq s0 (entnext s0))
(setq ss (ssadd s0 ss))
)
(if (/= (sslength ss) 0)
ss
)
)
edata 发表于 2018-11-9 12:21
没有特殊需要,不建议用command,
你可以尝试 entmakex 创建直线
长老,我是想调用别的软件公司二次开发后的命令。
按上述兄弟们推荐的方法,在ACad内部命令是是可行的,但对于二次开发的命令却是不行 ,失败了 新建一个空块,同时进入块的在位编辑状态,这时,下面你画的所有对象都位于这个空白块里了,后面如果不用想块了,可以将这个块炸开成组。这些对象就位于这个组里了。 收集图形,用entlast、while函数 ssyfeng 发表于 2018-11-9 08:55
可以用这个函数,画图前,先得到当前最后一个图元名,再进行绘图,画完再用这个函数就可以得到所有图元的选 ...
先确定起始点,再得到终点,再截取。
谢谢 水吉空 发表于 2018-11-9 09:34
收集图形,用entlast、while函数
不是很清楚你的具体做法,能明示一下吗?
谢谢 没有特殊需要,不建议用command,
你可以尝试 entmakex 创建直线
yshf 发表于 2018-11-10 08:56
(setq ent (entlast));取调用命令前的最后一个图元
(command ... );调用命令
(setq ssa (ssadd));建立一 ...
已解决,谢谢!
页:
[1]
2