![]() |
[求助]怎样获得选择集的中心点
[求助]怎样获得选择集的中心点
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. |