gdslqs 发表于 2011-11-16 00:02:56

怎么用lisp画出选择集的外围线

如题,实现以下功能:框选一大堆图元(比如:直线、多段线、圆、文字、标注等),找到该选择集的中心,在选择集的外围画一个矩形把它框起来,这个矩形的位置和尺寸怎么定。
请指教!

diditoy 发表于 2018-5-2 15:38:28

占个位,回头研究研究。

caoyin 发表于 2011-11-16 04:29:20

vla-getboundingbox得到单个对象的范围,选择集的范围也就容易得到了

ljttjl 发表于 2011-11-16 12:19:11

接楼上,得到每个对象的框角点后,将其组成点表,然后查找X坐标值的最小值和最大值,Y坐标值的最小值和最大值。然后可以组成两个点表(x最小值,y值最小值)(x值最大值,y值最大值),以这两个点画矩形即可。

gdslqs 发表于 2011-11-16 16:04:53

问下(vla-getboundingbox aaa)中aaa是什么类型的参数;我尝试获取第一个对象的外框,调试发现下面的代码在运行到(vla-getboundingbox vlaob)时提示参数类型错误
(defun test()
(setq ss(ssget))
(setq en (ssname ss 0))
(setq valob (vlax-ename->vla-object en))
(setq e1(vla-getboundingbox vlaob))
(princ)
)

x_s_s_1 发表于 2011-11-16 16:08:56

gdslqs 发表于 2011-11-16 16:04 static/image/common/back.gif
问下(vla-getboundingbox aaa)中aaa是什么类型的参数;我尝试获取第一个对象的外框,调试发现下面的代码在运 ...

希望对您有用;; ! ***************************************************************************
;; ! xd_GetObjectBoundingBox
;; ! ***************************************************************************
;; ! 功能: 返回实体包围盒的对角点.
;; ! 参数: 'ename' - Any Drawing Object
;; ! 返回值: 'Lst' - is a list of LL and UR
;; ! 说明: 适用 AutoCAD 2000+
;; ! e-mail: eachy@xdcad.net
;; ! Web   : www.xdcad.net
;; ! ****************************************************************************
(defun xd_GetObjectBoundingBox (ename / ll ur)
(vla-GetBoundingBox (vlax-ename->vla-object ename) 'll 'ur)
(list
    (vlax-safearray->list ll)
    (vlax-safearray->list ur)
)
)
;; ! ***************************************************************************
;; ! xd_GetSSBoundingBox
;; ! ***************************************************************************
;; ! 功能: 返回选择集实体包围盒的对角点.
;; ! 参数: 'ss' - Any Drawing Object Selection
;; ! 返回值: 'Lst' - is a list of LL and UR
;; ! 说明: 适用 AutoCAD 2000+
;; ! e-mail: eachy@xdcad.net
;; ! Web   : www.xdcad.net
;; ! ****************************************************************************
(defun xd_getSSBoundingbox (ss / ssl i ptl)
(setq        ssl (sslength ss)
        i   -1
)
(repeat ssl
    (setq
      ptl (cons        (xd_getObjectboundingbox (ssname ss (setq i (1+ i))))
                ptl
          )
    )
)
;;;(xd-points_box (apply 'append ptl))
)

gdslqs 发表于 2011-11-16 17:40:14

x_s_s_1 发表于 2011-11-16 16:08 static/image/common/back.gif
希望对您有用

谢谢,看了你发的这个我就明白了
可不可以把你收集的这些常用函数分享一下啊,呵呵

x_s_s_1 发表于 2011-11-17 07:49:25

我都是临时用临时找的,散乱在林林总总的冗长代码中,没整理过,不好意思哈。不过您需要什么可以在本版内搜索,一定有您所需要的

AMTONNY 发表于 2012-2-20 21:03:47

占个位置,以后要用就好找了

xiaolong1487 发表于 2012-7-25 16:29:27

学习一下,

fansmax 发表于 2012-9-12 17:11:19

不错,不错,正需要这个,有时候写程序写得烦了,有现成的函数实在太幸福了。
页: [1] 2
查看完整版本: 怎么用lisp画出选择集的外围线