清风明月名字 发表于 2013-7-23 19:04:17

请求框选给一组图元中的每一个加最小包围盒的代码

请求框选给一组图元中的每一个加最小包围盒的代码。
我就是想给选择集中每一个图元都套一个方框,仅此而已。

wowan1314 发表于 2013-7-23 19:40:23

本帖最后由 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))
      )
    )
)

669423907 发表于 2013-7-23 21:30:14

wowan1314 发表于 2013-7-23 19:40 static/image/common/back.gif
试试。

有时会出错

清风明月名字 发表于 2013-7-24 08:32:32

试试我写的(拼凑并自写)
(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))
)
)

清风明月名字 发表于 2013-7-24 08:41:41

试了“wowan1314”的代码,好用啊,还没有发现BUG

清风明月名字 发表于 2013-7-24 09:29:17

请问,怎么表达这个问题已解决

ucuc2003 发表于 2013-7-24 17:13:16

“wowan1314“回复真是及时,支持一下“wowan1314”

wowan1314 发表于 2013-7-24 19:54:51

本帖最后由 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))
            )
      )
    )
)

sicky111 发表于 2014-3-8 12:00:10

wowan1314 发表于 2013-7-24 19:54 static/image/common/back.gif
简化下!

请教大侠,如果图元里面还有图元,能不能只计算每个图元的最大外形的最小包围盒,里面的不用计算,可能我这样描述的不是很清楚,我上个图说明一下。大侠的程式是上图的效果,我想要下图的效果。附图档,请大侠们有空帮忙看看,谢谢!


xyp1964 发表于 2014-3-10 09:15:34


页: [1] 2
查看完整版本: 请求框选给一组图元中的每一个加最小包围盒的代码