我用的是2006。多行多列阵列还是只能变成2行2列
物体随便选的左上角那个矩形。距离是框选的。
比自带的渐变不了多少
;;简易矩形阵列
(defun C:arr()
(vl-load-com)
(setvar "cmdecho" 0)
(command "ucs" "w")
(princ "\n请选择要阵列的物体:")
(while(null(setq en (ssget))))
(setq minx0 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
(setq i 0)
(repeat (sslength en)
(setq end (ssname en i))
(setq end_data (entget end))
(Min_Max)
(setq i(1+ i))
)
(setq pmin (list minx0 miny0)
pmax (list maxx0 maxy0))
(setq yc (- maxx0 minx0) xc (- maxy0 miny0))
(if (not hs)(setq hhs 2)(setq hhs (fix hs)))
(if (not ls)(setq lls 2)(setq lls (fix ls)))
(initget 6)(setq hs (getint(strcat "\n请输入行数:<" (itoa hhs) ">")))
(if (not hs)(setq hs hhs))
(initget 6)(setq ls(getint (strcat "\n请输入列数:<" (itoa lls) ">")))
(if (not ls)(setq ls lls))
(if (not jjj)(setq jjj 2))
(initget 128)
(setq jj(getpoint (strcat "\n请输入间距:<默认为" (rtos jjj) ">或鼠标框选:")))
(cond ((= (type jj) nil)(setq jj jjj jjj jj hj(+ xc jj) lj(+ yc jj)))
((= (type jj) 'STR)(setq jj(read jj) jjj jj hj(+ xc jj) lj(+ yc jj)))
((= (type jj) 'list)(setq p1 jj)
(initget 1) (setq p2(getcorner p1 "指定对角点:"))
(setq lj(abs(- (car p2) (car p1)))
hj(abs(- (cadr p2) (cadr p1))))
)
)
(command "undo" "be")
(command "array" en "" "r"hsls hj lj)
(command "undo" "e")
(princ)
)
;;;子程序,求选集是大外形坐标
(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))
)
2010 2013也只能两行X两行阵列。。。。。。。 下了还用了个币。没有用,,,,,,但可 以借用。。。。。。。 人穷没钱,就不看了 (defun C:MX-are()
(vl-load-com)
(setvar "cmdecho" 0)
(command "ucs" "w")
(princ "\n请选择要阵列的物体:")
(while(null(setq en (ssget))))
(setq minx0 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
(setq i 0)
(repeat (sslength en)
(setq end (ssname en i))
(setq end_data (entget end))
(Min_Max)
(setq i(1+ i))
)
(setq pmin (list minx0 miny0)
pmax (list maxx0 maxy0))
(setq yc (- maxx0 minx0) xc (- maxy0 miny0))
(if (not hs)(setq hhs 20)(setq hhs (fix hs)))
(if (not ls)(setq lls 1)(setq lls (fix ls)))
(initget 6)(setq hs (getint(strcat "\n请输入行数:<" (itoa hhs) ">")))
(if (not hs)(setq hs hhs))
(initget 6)(setq ls(getint (strcat "\n请输入列数:<" (itoa lls) ">")))
(if (not ls)(setq ls lls))
(if (not jjj)(setq jjj 4))
(initget 128)
(setq jj(getpoint (strcat "\n请输入间距:<默认为" (rtos jjj) ">或鼠标框选:")))
(cond ((= (type jj) nil)(setq jj jjj jjj jj hj(+ xc jj) lj(+ yc jj)))
((= (type jj) 'STR)(setq jj(read jj) jjj jj hj(+ xc jj) lj(+ yc jj)))
((= (type jj) 'list)(setq p1 jj)
(initget 1) (setq p2(getcorner p1 "指定对角点:"))
(setq lj(abs(- (car p2) (car p1)))
hj(abs(- (cadr p2) (cadr p1))))
)
)
(command "undo" "be")
(command "array" en "" "r"hsls hj lj)
(command "undo" "e" )
(princ)
)
;;;子程序,求选集是大外形坐标
(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))
)
为什么这 个会在有些图纸里可以用,有些图纸里,不能用。在新建的图里不会出错,在有些别人画好的图中就会出现设置了列距还是只阵列一列,行数没问题。 你这个阵列在我电脑里很慢慢,不知道是什么原因 11111111111111111111111
页:
1
[2]