明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: luyu9635

简易矩形阵列

  [复制链接]
发表于 2012-9-24 23:13:32 | 显示全部楼层
我用的是2006。多行多列阵列还是只能变成2行2列

点评

你截个图看下是什么情况  发表于 2012-9-25 10:31
发表于 2012-9-25 12:20:07 | 显示全部楼层
zhengchuan 发表于 2012-9-24 23:13
我用的是2006。多行多列阵列还是只能变成2行2列


物体随便选的左上角那个矩形。距离是框选的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2012-10-10 12:55:27 | 显示全部楼层
比自带的渐变不了多少
发表于 2012-10-27 20:15:43 | 显示全部楼层

;;简易矩形阵列
(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"  hs  ls 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))
)

发表于 2013-5-16 22:54:49 | 显示全部楼层
2010 2013也只能两行X两行阵列。。。。。。。
发表于 2013-5-16 23:13:50 | 显示全部楼层
下了还用了个币。没有用,,,,,,但可 以借用。。。。。。。
发表于 2013-6-2 19:27:09 | 显示全部楼层
人穷没钱,就不看了
发表于 2014-6-17 19:33:03 | 显示全部楼层
(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"  hs  ls 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))
)

为什么这 个会在有些图纸里可以用,有些图纸里,不能用。在新建的图里不会出错,在有些别人画好的图中就会出现设置了列距还是只阵列一列,行数没问题。
发表于 2014-6-17 19:35:48 | 显示全部楼层
你这个阵列在我电脑里很慢慢,不知道是什么原因
发表于 2016-5-22 16:20:06 | 显示全部楼层
11111111111111111111111
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-2 12:19 , Processed in 0.193290 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表