感谢Z版,向你学习思路 在AUTOCAD 2008下,做些局部调整,测试O.K. 但如执行图面范围超过荧幕画面时,无法画出正确的图形, 不知如何解决呢? 程序调整如下: ;方框阵列 明经 ZZXXQQ 2010.2.6 (defun c:tt () (defun Min_Max() (vla-getboundingbox(vlax-ename->vla-object end) 'minp 'maxp) (setq minp (vlax-safearray->list minp) maxp (vlax-safearray->list maxp)) (setq minx (car minp) maxx (car maxp) miny (cadr minp) maxy (cadr maxp)) (if (> minx0 minx) (setq minx0 minx)) (if (> miny0 miny) (setq miny0 miny)) (if (< maxx0 maxx) (setq maxx0 maxx)) (if (< maxy0 maxy) (setq maxy0 maxy)) ) (setvar "CMDECHO" 0) (vl-load-com) (command "undo" "be") (command "ucs" "w") (if (and (princ "\n选择阵列目标 :") (setq ss (ssget))) (progn (setq minx0 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6) (setq i 0) (repeat (sslength ss) (setq end (ssname ss i)) (setq end_data (entget end)) (Min_Max) (setq i(1+ i)) ) (if (and (setq n (getint "\n列数 --- :")) (setq m (getint "\n行数 ||| :")) (> n 2) (> m 2)) (progn (setq h (getdist (strcat "\n行距 <" (rtos (- maxx0 minx0) 2 3) "> --- :"))) (setq h (if h h (- maxx0 minx0))) (setq w (getdist (strcat "\n列距 <" (rtos (- maxy0 miny0) 2 3) "> ||| :"))) (setq w (if w w (- maxy0 miny0))) (setq pmin (list maxx0 maxy0)) ; (setq pmax (list (+ (* (- n 2) (- maxx0 minx0)) maxx0) (+ (* (- m 2) (- maxy0 miny0)) maxy0))) (setq pmax (list (+ (* (- m 2) (- maxx0 minx0)) maxx0) (+ (* (- n 2) (- maxy0 miny0)) maxy0))) ; (command ".array" ss "" "r" n m h w ".erase" "W" pmin pmax "") ; (command ".array" ss "" "r" n m w h ".erase" "W" pmin pmax "") (command ".array" ss "" "r" n m w h ".erase" "W" pmin pmax "") ; (command ".rectang" pmin pmax) )) )) (command "undo" "e") (princ) )
|