(defun c:t1 (/ en Radius ss tmp Xlst Ylst old_cmdecho old_osmode) (vl-load-com) (setq *AcadDocument* (vla-get-ActiveDocument (vlax-get-Acad-Object))) (setq en (entsel "\nPlease select a circle: ")) (if en (progn (vla-startUndoMark *AcadDocument*) (setq Radius (vlax-get (vlax-ename->vla-object (car en)) 'Radius)) (setq ss (ssget "x" (list '(0 . "circle") (cons 40 Radius)))) (setq tmp (GetXY ss) Xlst (car tmp);得到X列表; Ylst (cadr tmp);得到Y列表; ) (setq old_cmdecho (getvar "cmdecho") old_osmode (getvar "osmode") ) (setvar "cmdecho" 0) (setvar "osmode" 0)
(DimX Xlst) ;标 X 座标; (DimY Ylst) ;标 Y 座标;
(setvar "cmdecho" old_cmdecho) (setvar "osmode" old_osmode) (vla-endUndoMark *AcadDocument*) ) ) (prin1) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun DimX (Xlst / i x pt1 pt2) (setq i 0) (repeat (length XLst) (setq x (car (nth i Xlst)) pt1 (list x (apply 'min (cdr (nth i Xlst)))) pt2 (polar (list x (apply 'max (cdr (nth i Xlst)))) (* pi 0.5) (* Radius 2)) ) (command ".DIMORDINATE" pt1 pt2) (setq i (1+ i)) ) ) (defun DimY (Ylst / i y pt1 pt2) (setq i 0) (repeat (length Ylst) (setq y (car (nth i Ylst)) pt1 (list (apply 'max (cdr (nth i Ylst))) y) pt2 (polar (list (apply 'min (cdr (nth i Ylst))) y) pi (* Radius 2)) ) (command ".DIMORDINATE" pt1 pt2) (setq i (1+ i)) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun GetXY (ss / i Xlst Ylst en i vn x y) (setq i 0 Xlst '() Ylst '() ) (repeat (sslength ss) (setq en (ssname ss i) i (1+ i) vn (vlax-ename->vla-object en) ) (setq x (atof (rtos (vlax-safearray-get-element (vlax-variant-value (vla-get-center vn)) 0) 2 5)) ;x y (atof (rtos (vlax-safearray-get-element (vlax-variant-value (vla-get-center vn)) 1) 2 5)) ;y ) (if (assoc x Xlst) ; X相同﹐Y 不相同; (setq Xlst (subst (append (assoc x Xlst) (list y)) (assoc x Xlst) Xlst)) (setq Xlst (append Xlst (list (list x y)))) ) (if (assoc y Ylst) ; Y相同﹐X 不相同; (setq Ylst (subst (append (assoc y Ylst) (list x)) (assoc y Ylst) Ylst)) (setq Ylst (append Ylst (list (list y x)))) ) ) (list Xlst Ylst) ;返回两个表; ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|