几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   ObjectARX(AutoLISP) (http://www.dimcax.com/hust/forumdisplay.php?f=178)
-   -   [求助]怎样获得选择集的中心点 (http://www.dimcax.com/hust/showthread.php?t=11182)

yang686526 2009-04-26 01:40 PM

[求助]怎样获得选择集的中心点
 
[求助]怎样获得选择集的中心点
www.dimcax.com

请看看这个,写得有点繁琐,不过还算是完成了...
(defun c:test (/ ss)
(vl-load-com)
;; get the selection set .
(princ "\nplease select object:")
(setq ss (vl-catch-all-apply 'ssget))
(if (or (vl-catch-all-error-p ss) (null ss))
(vl-exit-with-value 0)
)
;; get the middle point from the selection set .
(setq pt (getmidpt ss))
(if pt
(foreach n (list "\nthe middle point x=" (car pt) " y=" (cadr pt)) (princ n))
(princ "\n there is error , can't get the middle point...")
)
(prin1)
)
;; the sub function to get the middle point from the selection set .
(defun getmidpt (ss / i lstx lsty vn pt x1 x2 y1 y2)
(setq i 0
lstx '()
lsty '()
)
(repeat (sslength ss)
(setq vn (vlax-ename->vla-object (ssname ss i))
i (1+ i)
)
(setq pt (vl-catch-all-apply 'vla-getboundingbox (list vn 'minpt 'maxpt)))
(if (not (vl-catch-all-error-p pt))
(progn
(setq x1 (vlax-safearray-get-element minpt 0)
x2 (vlax-safearray-get-element maxpt 0)
y1 (vlax-safearray-get-element minpt 1)
y2 (vlax-safearray-get-element maxpt 1)
)
(cond
;; if this is the first time run,then put the value it .
((null lstx)
(setq lstx (list x1 x2)
lsty (list y1 y2)
)
)
;; note here, .
(t
;; x-min .
(if (< x1 (car lstx))
(setq lstx (list x1 (cadr lstx)))
)
;; x-max
(if (> x2 (cadr lstx))
(setq lstx (list (car lstx) x2))
)
;; y-min .
(if (< y1 (car lsty))
(setq lsty (list y1 (cadr lsty)))
)
;; y-max
(if (> y2 (cadr lsty))
(setq lsty (list (car lsty) y2))
)
)
)
)
)
)
;; return the point .
(if lstx
(list (* (apply '+ lstx) 0.5) (* (apply '+ lsty) 0.5))
nil
)
)
江苏昆山小城,欢迎交流
本职工作五金模具设计及加工
及cad软件开发
d
还是楼上的好!学习!
d
来看看,好像不难得
d


所有的时间均为北京时间。 现在的时间是 01:17 AM.