明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5590|回复: 17

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

  [复制链接]
发表于 2011-11-16 00:02 | 显示全部楼层 |阅读模式
如题,实现以下功能:框选一大堆图元(比如:直线、多段线、圆、文字、标注等),找到该选择集的中心,在选择集的外围画一个矩形把它框起来,这个矩形的位置和尺寸怎么定。
请指教!
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-5-2 15:38 | 显示全部楼层
占个位,回头研究研究。
发表于 2011-11-16 04:29 | 显示全部楼层
vla-getboundingbox得到单个对象的范围,选择集的范围也就容易得到了
发表于 2011-11-16 12:19 | 显示全部楼层
接楼上,得到每个对象的框角点后,将其组成点表,然后查找X坐标值的最小值和最大值,Y坐标值的最小值和最大值。然后可以组成两个点表(x最小值,y值最小值)(x值最大值,y值最大值),以这两个点画矩形即可。
 楼主| 发表于 2011-11-16 16:04 | 显示全部楼层
问下(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)
)
发表于 2011-11-16 16:08 | 显示全部楼层
gdslqs 发表于 2011-11-16 16:04
问下(vla-getboundingbox aaa)中aaa是什么类型的参数;我尝试获取第一个对象的外框,调试发现下面的代码在运 ...

希望对您有用
  1. ;; ! ***************************************************************************
  2. ;; ! xd_GetObjectBoundingBox
  3. ;; ! ***************************************************************************
  4. ;; ! 功  能  : 返回实体包围盒的对角点.
  5. ;; ! 参  数  : 'ename' - Any Drawing Object
  6. ;; ! 返回值  : 'Lst' - is a list of LL and UR
  7. ;; ! 说  明  : 适用 AutoCAD 2000+
  8. ;; ! e-mail  : eachy@xdcad.net
  9. ;; ! Web     : www.xdcad.net
  10. ;; ! ****************************************************************************
  11. (defun xd_GetObjectBoundingBox (ename / ll ur)
  12.   (vla-GetBoundingBox (vlax-ename->vla-object ename) 'll 'ur)
  13.   (list
  14.     (vlax-safearray->list ll)
  15.     (vlax-safearray->list ur)
  16.   )
  17. )
  18. ;; ! ***************************************************************************
  19. ;; ! xd_GetSSBoundingBox
  20. ;; ! ***************************************************************************
  21. ;; ! 功  能  : 返回选择集实体包围盒的对角点.
  22. ;; ! 参  数  : 'ss' - Any Drawing Object Selection
  23. ;; ! 返回值  : 'Lst' - is a list of LL and UR
  24. ;; ! 说  明  : 适用 AutoCAD 2000+
  25. ;; ! e-mail  : eachy@xdcad.net
  26. ;; ! Web     : www.xdcad.net
  27. ;; ! ****************************************************************************
  28. (defun xd_getSSBoundingbox (ss / ssl i ptl)
  29.   (setq        ssl (sslength ss)
  30.         i   -1
  31.   )
  32.   (repeat ssl
  33.     (setq
  34.       ptl (cons        (xd_getObjectboundingbox (ssname ss (setq i (1+ i))))
  35.                 ptl
  36.           )
  37.     )
  38.   )
  39. ;;;  (xd-points_box (apply 'append ptl))
  40. )
 楼主| 发表于 2011-11-16 17:40 | 显示全部楼层
x_s_s_1 发表于 2011-11-16 16:08
希望对您有用

谢谢,看了你发的这个我就明白了
可不可以把你收集的这些常用函数分享一下啊,呵呵
发表于 2011-11-17 07:49 | 显示全部楼层
我都是临时用临时找的,散乱在林林总总的冗长代码中,没整理过,不好意思哈。不过您需要什么可以在本版内搜索,一定有您所需要的
发表于 2012-2-20 21:03 | 显示全部楼层
占个位置,以后要用就好找了
发表于 2012-7-25 16:29 | 显示全部楼层
学习一下,
发表于 2012-9-12 17:11 | 显示全部楼层
不错,不错,正需要这个,有时候写程序写得烦了,有现成的函数实在太幸福了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-8 12:33 , Processed in 4.654195 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表