找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1459|回复: 7

[LISP函数]:获取多段线最大外接矩形

[复制链接]
发表于 2008-5-10 21:34:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
;;;返回多边形最大外接矩形
;;;基于的一些特殊需要,编写了一个求多边形最大外接矩形的函数,与vla-GetBoundingBox
;;;函数有所不同,效果见图

f:\Snap2.bmp

  1.   [FONT=courier new]
  2. (defun hj:getBounding(ename-b / #BOUND1 #BOUND2 #BOUND3 #BOUND4 X)
  3. ;;获取多段线点
  4. (setq #Bound1 (getpllist ename-b))
  5. (command "ucs" "Object" ename-b)
  6. ;;将所有的点转换到当前UCS
  7. (setq #Bound2(GETBOUND (mapcar '(lambda(x)(trans x 0 1)) #Bound1)))
  8. ;;由此得到最小最大坐标,构建矩形的四个角点
  9. (setq #Bound3 (list (car #Bound2)(list (caar #Bound2) (cadadr #Bound2))(cadr #Bound2)(list (caadr #Bound2) (cadar #Bound2))) )
  10. ;;转换为WCS
  11. (setq #Bound4 (mapcar '(lambda(x)(trans x 1 0)) #Bound3))
  12. (command "ucs" "p" )
  13. #Bound4
  14. )

  15. ;;;--------------------------------------------------------
  16. ;;;函数: GetBound                               
  17. ;;;--------------------------------------------------------
  18. ;;;说明:从点列表(point list)得到坐标范围(coordinate extents).
  19. ;;;备注:来自XDSOFT.NET               
  20. ;;;--------------------------------------------------------

  21. (DEFUN GetBound         (plist /)
  22.   (LIST
  23.     (APPLY 'MAPCAR (CONS 'MIN plist))
  24.     (APPLY 'MAPCAR (CONS 'MAX plist))
  25.     ) ;_ 结束LIST
  26.   ) ;_ 结束DEFUN
  27. ;;;--------------------------------------------------------
  28. ;;;函数: getPlList                               
  29. ;;;--------------------------------------------------------
  30. ;;;说明:本函数提取多段线的各端点坐标值构成一张表并返回
  31. ;;;               
  32. ;;;               
  33. ;;;编制者:高老师(gyc)               
  34. ;;;--------------------------------------------------------

  35. (DEFUN getPlList  (#entity)
  36.   (SETQ obj (ENTGET #entity))
  37.   (SETQ lw_t8 (CDR (ASSOC 8 obj)))
  38.   (SETQ obj_1 nil)
  39.   (WHILE (/= (ASSOC 10 obj) nil)
  40.     (IF        (AND (= (CAAR obj) 10)
  41.              (NOT (EQUAL (CDAR obj) (LAST obj_1) 0.001))
  42.              ) ;_ 结束AND
  43.       (SETQ obj_1 (APPEND obj_1 (LIST (CDAR obj))))
  44.       )                                        ; 生成坐标表同时去掉相邻重点,不带10
  45.     (SETQ obj (CDR obj))
  46.     ) ;_ 结束WHILE
  47.   (SETQ obj obj_1)
  48.   (IF (EQUAL (CAR obj) (LAST obj) 0.0001)
  49.     (SETQ obj (REVERSE (CDR (REVERSE obj))))
  50.     ) ;_ 结束IF
  51.   ;;判断首闭
  52.   (SETQ #temp obj)
  53.   ) ;_ 结束DEFUN
  54. ;;end defun


  55.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2008-5-11 09:19:28 | 显示全部楼层
支持UCS么
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-5-14 16:54:15 | 显示全部楼层
似乎只能用于正交pline的情况,而且不能带弧段
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-5-15 13:43:09 | 显示全部楼层
最近完善了一个求实体外框的程序,支持spline,迟一点发上来
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-5-20 08:54:03 | 显示全部楼层
希望早日看到楼上的求实体外框的程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-5-20 09:07:25 | 显示全部楼层
希望早日看到楼上的求实体外框的程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-5-20 13:24:13 | 显示全部楼层
1
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-5-20 15:55:18 | 显示全部楼层
spline外框
  1. [FONT=courier new](defun c:test ()
  2.   (CMDLA0)
  3.   (setvar "osmode" 0)
  4.   (xyp-MkLaCo "TEST" 1)
  5.   (setq        ss (ssget '((0 . "SPLINE")))
  6.         i  -1
  7.   )
  8.   (while (setq s1 (ssname ss (setq i (1+ i))))
  9.     (setq p1 (xyp-get-MinMaxPoint s1 1)
  10.           p9 (xyp-get-MinMaxPoint s1 9)
  11.     )
  12.     (command "rectang" p1 p9)
  13.   )
  14.   (CMDLA1)
  15. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-9 08:41 , Processed in 0.353427 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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