马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
;;;返回多边形最大外接矩形
;;;基于的一些特殊需要,编写了一个求多边形最大外接矩形的函数,与vla-GetBoundingBox
;;;函数有所不同,效果见图
f:\Snap2.bmp

- [FONT=courier new]
- (defun hj:getBounding(ename-b / #BOUND1 #BOUND2 #BOUND3 #BOUND4 X)
- ;;获取多段线点
- (setq #Bound1 (getpllist ename-b))
- (command "ucs" "Object" ename-b)
- ;;将所有的点转换到当前UCS
- (setq #Bound2(GETBOUND (mapcar '(lambda(x)(trans x 0 1)) #Bound1)))
- ;;由此得到最小最大坐标,构建矩形的四个角点
- (setq #Bound3 (list (car #Bound2)(list (caar #Bound2) (cadadr #Bound2))(cadr #Bound2)(list (caadr #Bound2) (cadar #Bound2))) )
- ;;转换为WCS
- (setq #Bound4 (mapcar '(lambda(x)(trans x 1 0)) #Bound3))
- (command "ucs" "p" )
- #Bound4
- )
- ;;;--------------------------------------------------------
- ;;;函数: GetBound
- ;;;--------------------------------------------------------
- ;;;说明:从点列表(point list)得到坐标范围(coordinate extents).
- ;;;备注:来自XDSOFT.NET
- ;;;--------------------------------------------------------
- (DEFUN GetBound (plist /)
- (LIST
- (APPLY 'MAPCAR (CONS 'MIN plist))
- (APPLY 'MAPCAR (CONS 'MAX plist))
- ) ;_ 结束LIST
- ) ;_ 结束DEFUN
- ;;;--------------------------------------------------------
- ;;;函数: getPlList
- ;;;--------------------------------------------------------
- ;;;说明:本函数提取多段线的各端点坐标值构成一张表并返回
- ;;;
- ;;;
- ;;;编制者:高老师(gyc)
- ;;;--------------------------------------------------------
- (DEFUN getPlList (#entity)
- (SETQ obj (ENTGET #entity))
- (SETQ lw_t8 (CDR (ASSOC 8 obj)))
- (SETQ obj_1 nil)
- (WHILE (/= (ASSOC 10 obj) nil)
- (IF (AND (= (CAAR obj) 10)
- (NOT (EQUAL (CDAR obj) (LAST obj_1) 0.001))
- ) ;_ 结束AND
- (SETQ obj_1 (APPEND obj_1 (LIST (CDAR obj))))
- ) ; 生成坐标表同时去掉相邻重点,不带10
- (SETQ obj (CDR obj))
- ) ;_ 结束WHILE
- (SETQ obj obj_1)
- (IF (EQUAL (CAR obj) (LAST obj) 0.0001)
- (SETQ obj (REVERSE (CDR (REVERSE obj))))
- ) ;_ 结束IF
- ;;判断首闭
- (SETQ #temp obj)
- ) ;_ 结束DEFUN
- ;;end defun
- [/FONT]
|