- 积分
- 27134
- 明经币
- 个
- 注册时间
- 2003-8-26
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2011-12-11 17:14:11
|
显示全部楼层
给你一段源码,能解决矩形命令绘制的图框选择问题,至于四条线段围成的矩形,我就爱莫能助了,图块做的图框我也没办法
(setq ss (ssget "x" (list '(0 . "LWPOLYLINE") '(90 . 4) ))) ; 选取纸中所有矩形命令绘制的矩形
(setq ss (juxingguolv ss))
;;; 过滤掉矩形选择集内的矩形,返回最外一圈的矩形的选择集
(defun juxingguolv (ss / ent i j maxpoint minpoint name pmax2 pmax4 pmin1 pmin3 pt1x pt1y pt2x pt2y pt3x pt3y pt4x pt4y ss1
ss2)
(setvar "osmode" 0)
(setq ss1 (ssadd)
ss2 (ssadd)
)
(repeat (setq i (sslength ss))
(setq name (ssname ss (setq i (1- i))))
(setq ss1 (ssadd name ss1))
(setq ss2 (ssadd name ss2))
)
(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 pt1x (car pmin1)
pt1y (cadr pmin1)
pt2x (car pmax2)
pt2y (cadr pmax2)
)
(setq ss1 (ssdel name ss1))
(repeat (setq j (sslength ss1))
(setq ent (ssname ss1 (setq j (1- j))))
(vla-getboundingbox (vlax-ename->vla-object ent) 'minpoint 'maxpoint)
(setq pmax4 (vlax-safearray->list maxpoint)
pmin3 (vlax-safearray->list minpoint)
)
(setq pt3x (car pmin3)
pt3y (cadr pmin3)
pt4x (car pmax4)
pt4y (cadr pmax4)
)
(if (and
(> pt3x pt1x)
(> pt3y pt1y)
(< pt4x pt2x)
(< pt4y pt2y)
)
(if (ssmemb ent ss2)
(setq ss2 (ssdel ent ss2))
)
)
(if (and
(< pt3x pt1x)
(< pt3y pt1y)
(> pt4x pt2x)
(> pt4y pt2y)
)
(if (ssmemb name ss2)
(setq ss2 (ssdel name ss2))
)
)
)
)
ss2
)
|
|