- 积分
- 27279
- 明经币
- 个
- 注册时间
- 2003-8-26
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2011-12-11 20:35:55
|
显示全部楼层
本帖最后由 langjs 于 2011-12-11 21:32 编辑
shalei021647 发表于 2011-12-11 18:59 
确实能选择最外层矩形框,但是选择之后,如何再把这些矩形框之内的图形加进去啊。我要是直接把最后得到的 ...
得到最大矩形,求出最小点和最大点(我的这个函数里边本身就有计算矩形最小点和最大点的代码,稍微改一下就行了),然后再用ssget窗选,不就得到矩形内部的图元选择集了么?然后再反选,删除,就剩下最大矩形内部的东西了
(在图纸中试了一下,可惜运行效果不理想)
(defun c:zz (/ i j maxpoint minpoint name pmax2 pmin1 ss ss1 ss2 ss3)
(setq ss (ssget "x" (list '(0 . "LWPOLYLINE") '(90 . 4)))) ; 选取纸中所有矩形命令绘制的矩形
(setq ss (juxingguolv ss))
(setq ss1 (ssadd))
(repeat (setq i (sslength ss))
(setq name (ssname ss (setq i (1- i))))
(vla-getboundingbox (vlax-ename->vla-object name) 'minpoint 'maxpoint)
(setq pmax2 (vlax-safearray->list maxpoint)
pmin1 (vlax-safearray->list minpoint)
)
(setq ss2 (ssget "W" pmin1 pmax2))
(repeat (setq j (sslength ss2))
(setq name (ssname ss2 (setq j (1- j))))
(setq ss1 (ssadd name ss1))
)
)
(setq ss3 (ssget "X"))
(command "erase" ss3 "r" ss1 "")
(princ)
)
|
|