- 积分
- 1804
- 明经币
- 个
- 注册时间
- 2002-12-28
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
楼主 |
发表于 2004-1-15 17:34:00
|
显示全部楼层
我对我的程序做了不少尝试,偶然发现如果将原来的splie进行offset操作后再进行运算可得接近正确答案的结果。如果去掉程序中的offset命令,程序出错的机会会高得多。
(defun AX:GETBOUNDINGBOX (ENT / LL UR)
(vla-getboundingbox (vlax-ename->vla-object ENT) 'LL 'UR)
(mapcar 'vlax-safearray->list (list LL UR))
)
;======================
(defun fangk(ss / js pt_list)
(setq js 0 PT_LIST nil)
(repeat (sslength ss)
(setq PT_LIST (append PT_LIST (AX:GETBOUNDINGBOX (ssname ss js))))
(setq js (1+ js))
)
(setq PT1 (TRANS (list (apply 'min (mapcar 'car PT_LIST))
(apply 'min (mapcar 'cadr PT_LIST))
) 0 1)
PT2 (TRANS (list (apply 'max (mapcar 'car PT_LIST))
(apply 'max (mapcar 'cadr PT_LIST))
) 0 1)
)
)
;======================
(defun c:test (/ ss pt1 pt2)
(setvar "osmode" 0)
(SETQ ss (SSGET '(( 0 . "line,circle,arc,LWPOLYLINE,SPLINE,ELLIPSE"))))
(vl-cmdf ".offset" 0.0001 ss "100000,100000" ""
".ERASE" ss "")
(setq ss (ssget "_L"))
(fangk ss)
(vl-cmdf ".rectang" pt1 pt2)
)
有时候将offset的值改大和改小也会影响程序计算的正确性。
很奇怪,为什么呢? |
|