请求框选给一组图元中的每一个加最小包围盒的代码
请求框选给一组图元中的每一个加最小包围盒的代码。我就是想给选择集中每一个图元都套一个方框,仅此而已。 本帖最后由 wowan1314 于 2013-7-23 19:45 编辑
试试。(defun c:t11 (/ enbox ss a en p12)
(defun enbox (ename / ll ur)
(vla-getboundingbox (vlax-ename->vla-object ename) 'll 'ur)
(mapcar 'vlax-safearray->list (list ll ur))
)
(setq ss (ssget) a -1)
(if ss
(while
(setq en
(ssname ss
(setq a
(1+ a)
)
)
)
(setq p12 (enbox en))
(command "rectang" (car p12)(cadr p12))
)
)
) wowan1314 发表于 2013-7-23 19:40 static/image/common/back.gif
试试。
有时会出错 试试我写的(拼凑并自写)
(defun C:bwzb (sel/ minPt maxPt obj minPt1 maxPt1)
; ; 来源:1楼第二套 求大侠帮我看看这个包围框的程序~-AutoLISP/Visual LISP 编程技术-CAD论坛-明经CAD社区 - Powered by Discuz!
; ; http://bbs.mjtd.com/forum.php?mod=viewthread&tid=100044
; 这东西在按顺序检查图元时大有作用,一个一个检查,不漏一个,也不重复一个。还可以从中间 任意位置开始检查
(setq oce (getvar "cmdecho"))
(setvar "cmdecho" 0)
(vl-load-com)
(setq minPt (vlax-make-safearray vlax-vbdouble '(0 . 2)))
(setq maxPt (vlax-make-safearray vlax-vbdouble '(0 . 2)))
(setq obj (vlax-ename->vla-object sel))
(vla-GetBoundingBox obj 'minpt 'maxpt)
(setq minPt1 (vlax-safearray->list minPt))
(setq maxPt1 (vlax-safearray->list maxPt))
(command ".rectang" minPt1 maxPt1 "")
(setvar "cmdecho" oce)
)
(defun C:TT (/ q a)
(setq Q (ssget))
(setq i 0)
(repeat (sslength Q);循环选择集长度
(setq a (ssname q I))
(c:bwzb a)
(setq i (1+ i))
)
) 试了“wowan1314”的代码,好用啊,还没有发现BUG 请问,怎么表达这个问题已解决 “wowan1314“回复真是及时,支持一下“wowan1314” 本帖最后由 wowan1314 于 2013-7-24 19:57 编辑
简化下!(mapcar
'(lambda(x)
(vla-getboundingbox (vlax-ename->vla-object x) 'a1 'a2)
(command "rectang" (vlax-safearray->list a1)(vlax-safearray->list a2))
)
(cdr(reverse(mapcar 'cadr (ssnamex (ssget))
)
)
)
) wowan1314 发表于 2013-7-24 19:54 static/image/common/back.gif
简化下!
请教大侠,如果图元里面还有图元,能不能只计算每个图元的最大外形的最小包围盒,里面的不用计算,可能我这样描述的不是很清楚,我上个图说明一下。大侠的程式是上图的效果,我想要下图的效果。附图档,请大侠们有空帮忙看看,谢谢!
页:
[1]
2