碰到一个问题: 我想判明一个点在一个选择集的位置,如是在左上方还是右下方,用getboundingbox函数去得到选择集的范围,然后选择一个点来判断,但在程序的运行中,getboundingbox函数得到的点和getpoint得到的点不是一回事,用(trans 'point 0 1)也没有效果,哪位高手能帮我解决一下
程序如下,是个标注程序defun c:dx() (setq oldos(getvar "osmode")) ;(setvar "osmode" 2080) ;(command "ucs" "w" "") (COMMAND "layer" "m" "dim" "") ;(COMMAND "ucs" "o" (getpoint) ) (setvar "osmode" 53) (setq ss (ssget)) (setq nn (sslength ss)) (setq n 0) (setq vobject (ssname ss n)) (setq vobject (vlax-ename->vla-object vobject)) ;;(setq xobject (vlax-make-variant vobject vlax-vbobject)) (vla-getboundingbox vobject 'minpoint 'maxpoint) (setq xmin(car (vlax-safearray->list minpoint)) ymin(cadr (vlax-safearray->list minpoint)) xmax (car (vlax-safearray->list maxpoint)) ymax(cadr (vlax-safearray->list maxpoint))) (setq n (1+ n)) ;;; 取出每个图元,得到坐标最小值和最大值,再分别计算得到 ;;;X坐标Y坐标最大最小值 (while (< n nn) (setq vobject (ssname ss n)) (setq vobject (vlax-ename->vla-object vobject)) ;;;(setq xobject (vlax-make-variant vobject vlax-vbobject)) ;;;将图元改为ACTIVEX类型
(vla-getboundingbox vobject 'minpoint 'maxpoint) ;;;得到最大最小坐标值 (setq xmin1 (car (vlax-safearray->list minpoint)) ymin1 (cadr (vlax-safearray->list minpoint)) xmax1 (car (vlax-safearray->list maxpoint)) ymax1 (cadr (vlax-safearray->list maxpoint)) ) ;;;end of setq (if (< xmin1 xmin) (setq xmin xmin1) );_end of if (if (< ymin1 ymin) (setq ymin ymin1) );_end of if (if (> xmax1 xmax) (setq xmax xmax1) );_end of if (if (> ymax1 ymax) (setq ymax ymax1) );_end of if (setq n (1+ n)) );_end of whil (setq xmid (/ (+ xmin xmax) 2.0) ymid (/ (+ ymin ymax) 2.0) ) ;_end of setq (setq mid (list xmid ymid)) (setq mid (trans 'mid 0 1 )) ;(setq maxpoint (list xmax ymax) ; maxpoint (trans maxpoint 0 1) ; minpoint (list xmin ymin) ; minpoint (trans minpoint 0 1) ; xmid (x-coordinate mid) ; ymid (y-coordinate mid) ; xmin(x-coordinate minpoint) ; ymin(y-coordinate minpoint) ; xmax(x-coordinate maxpoint) ; ymax(y-coordinate maxpoint) ; ) (while (setq pt (getpoint "\nselect a point:")) (if (<= (y-coordinate pt) ymid) (progn (setq pt2 (list (x-coordinate pt)(- ymin 15.0))) ;(setq pt (trans pt 0 1) ; pt2(trans pt2 0 1)) (command "dimdec" "1" "dimordinate" pt pt2 )) (progn (setq pt2 (list (x-coordinate pt)(+ ymax 15.0))) (command "dimdec" "1" "dimordinate" pt pt2)) );end of if );end of while ) |