HuaiYu 发表于 2006-6-25 19:25:00

<P>请看看这个,写得有点繁琐,不过还算是完成了...</P>
<P>(Defun C:test (/ ss)<BR>&nbsp; (VL-LOAD-COM)<BR>&nbsp; ;;&nbsp;get the selection set&nbsp;&nbsp;&nbsp;&nbsp;.<BR>&nbsp; (princ "\nPlease select object:")<BR>&nbsp; (setq ss (vl-catch-all-apply 'ssget))<BR>&nbsp; (if (or (vl-catch-all-error-p ss) (null ss))<BR>&nbsp;&nbsp;&nbsp; (vl-exit-with-value 0)<BR>&nbsp; )<BR>&nbsp; ;;&nbsp;get the Middle point from the selection set&nbsp;.<BR>&nbsp; (setq pt (GetMidPt ss))<BR>&nbsp; (if pt<BR>&nbsp;&nbsp;&nbsp; (foreach n (list "\nThe Middle Point X=" (car pt) "&nbsp; Y=" (cadr pt)) (princ n))<BR>&nbsp;&nbsp;&nbsp; (princ "\n There is error , can't get the middle point...")<BR>&nbsp; )<BR>&nbsp; (prin1)<BR>)<BR>;;&nbsp;the sub function to get the middle point from the selection set&nbsp;&nbsp;.<BR>(defun GetMidPt&nbsp;(ss / i lstX lstY vn pt X1 X2 Y1 Y2)</P>
<P>&nbsp; (setq&nbsp;i&nbsp;&nbsp;&nbsp; 0<BR>&nbsp;lstX '()<BR>&nbsp;lstY '()<BR>&nbsp; )<BR>&nbsp; (repeat (sslength ss)<BR>&nbsp;&nbsp;&nbsp; (setq vn (vlax-ename-&gt;vla-object (ssname ss i))<BR>&nbsp;&nbsp; i&nbsp; (1+ i)<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (setq pt (vl-catch-all-apply 'vla-getBoundingBox (list vn 'MinPt 'MaxPt)))<BR>&nbsp;&nbsp;&nbsp; (if&nbsp;(not (vl-catch-all-error-p pt))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<BR>&nbsp;(setq X1 (vlax-safeArray-get-element MinPt 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X2 (vlax-safeArray-get-element MaxPt 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Y1 (vlax-safeArray-get-element MinPt 1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Y2 (vlax-safeArray-get-element MaxPt 1)<BR>&nbsp;)<BR>&nbsp;(cond<BR>&nbsp;&nbsp; ;;&nbsp;if this is the first time run,then put the value it&nbsp;.<BR>&nbsp;&nbsp; ((null lstX)<BR>&nbsp;&nbsp;&nbsp; (setq lstX (list X1 X2)<BR>&nbsp;&nbsp; lstY (list Y1 Y2)<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp; )<BR>&nbsp;&nbsp; ;;&nbsp;NOTE here,&nbsp;&nbsp;.<BR>&nbsp;&nbsp; (T<BR>&nbsp;&nbsp;&nbsp; ;;&nbsp;X-Min&nbsp;.<BR>&nbsp;&nbsp;&nbsp; (if (&lt; X1 (car lstX))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lstX (list X1 (cadr lstX)))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; ;;&nbsp;X-Max<BR>&nbsp;&nbsp;&nbsp; (if (&gt; X2 (cadr lstX))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lstX (list (car lstX) X2))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; ;;&nbsp;Y-Min&nbsp;.<BR>&nbsp;&nbsp;&nbsp; (if (&lt; Y1 (car lstY))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lstY (list Y1 (cadr lstY)))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; ;;&nbsp;Y-Max<BR>&nbsp;&nbsp;&nbsp; (if (&gt; Y2 (cadr lstY))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lstY (list (car lstY) Y2))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp; )<BR>&nbsp;)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp; )<BR>&nbsp; ;;&nbsp;return the point&nbsp;&nbsp;.<BR>&nbsp; (if lstX<BR>&nbsp;&nbsp;&nbsp; (list (* (apply '+ lstX) 0.5) (* (apply '+ lstY) 0.5))<BR>&nbsp;&nbsp;&nbsp; nil<BR>&nbsp; )<BR>)</P>

caoyin 发表于 2006-6-27 10:59:00

<P>还是楼上的好!学习!</P>

jxphklibin 发表于 2009-2-3 15:27:00

来看看,好像不难得
页: 1 [2]
查看完整版本: [求助]怎样获得选择集的中心点