masterlong 发表于 2019-8-25 17:56:08

动态矩形阵列【需高大侠动态函数支持(CAD2000~2014)】

本帖最后由 masterlong 于 2020-9-12 15:09 编辑

本程序用于替代传统array命令的矩形阵列模式。欢迎任意修改,仅修改作者名称除外
同学们若修改了程序,并且自认比较满意的,欢迎上传源码,大家共同学习,共同提高
需要说明的是,某些看似很简单的修改要求,实际可能需要对代码进行大量修改
由于本人工作比较忙,所以基本上不会对“程序修改请求”进行响应,请理解

==============================================================================

---程序编写原因---

自从电脑升级开始使用CAD2012以后
对2012的array命令的新版操作模式极不适应
虽然CAD保留了旧版的命令行模式
但个人对这个命令的操作模式本身就不是很喜欢
于是花了点时间做了这个替代程序
以符合自己的操作习惯

出于程序运行速度的考虑
动态显示时仅动态显示阵列区间
而不是实时显示图元
另外最后的实体阵列操作
也是调用的array命令

本程序代码编写
参考了高大侠改写的QJChen的双向动态阵列程序
在此向以上两位表示感谢

==============================================================================

简要说明:
1.本程序需高飞鸟大侠的动态函数支持(CAD2000~2014)。下面有下载地址
2.lisp程序包括arx函数库,需放置在CAD支持路径(否则请手动修改程序中的路径)
3.命令:AR

操作说明
1.选择阵列对象
2.指定阵列间距:::指定两点,两点x或y坐标不能相同
3.动态显示阵列区间与行列数,图元总数超限时提示
4.确定阵列范围后执行阵列

程序源码下载


程序更新,支持先选择后执行,遗漏函数已补充


补充遗漏的ssdraw、ssbox函数

;;按指定的模式重画一个选择集的全部物体<改模式时,需要先反绘。1-2 3-4.(1->4=1->2->4)>    【支持模型多视口,支持布局中视口】
;;1:显示2:消隐3:高亮4:低亮
(defun ssdraw( ss mode / i ent )
(if (= (strcase (getvar "ctab")) "MODEL")
(if (member mode '(1 2 3 4))
   (foreach vp (reverse (vports))
    (setvar "cvport" (car vp))
    (cond
   ((= (type ss) 'PICKSET)
      (foreach ent (ss2list ss)
       (redraw ent mode)
      )
   )
   ((= (type ss) 'list)
      (foreach ent ss
       (redraw ent mode)
      )
   )
   ((= (type ss) 'ename)
      (redraw ss mode)
   )
    )
   )
)
(cond
   ((= (type ss) 'PICKSET)
    (foreach ent (ss2list ss)
   (redraw ent mode)
    )
   )
   ((= (type ss) 'list)
    (foreach ent ss
   (redraw ent mode)
    )
   )
   ((= (type ss) 'ename)
    (redraw ss mode)
   )
)
)
(princ)
)

;;选择集的最小(正交)包围框
(defun ssbox( ss / ll ur aa bb )
(if (= (type ss) 'PICKSET)
(setq ss (ss2list ss))
)
(foreach x ss
(vla-getboundingbox (vlax-Ename->Vla-Object x) 'll 'ur)
(setq aa (cons (vlax-safearray->list ll) aa)
    bb (cons (vlax-safearray->list ur) bb)
)
)
(mapcar '(lambda(a b) (apply 'mapcar (cons a b)))
'(min max)
(list aa bb)
)
)






-------------------------------------------------------------------------------

高大侠动态函数运行库下载地址
http://bbs.mjtd.com/thread-90447-1-1.html

另外说一句
见识过很多的动态程序
包括模拟捕捉输入的grread类函数
其稳定性、实用性等等
真的不如高大侠的DynamicLisp动态函数库




灰石Jeremy 发表于 2019-8-25 22:44:29

不错不错,最近想做动态复制,应该也差不多

13916020908 发表于 2019-8-31 16:46:20

感谢无私分享

lllllja 发表于 2020-4-4 15:55:42

发现少了一个函数ssdraw

baoyizhu 发表于 2020-9-11 14:42:31

楼主,烦请补齐ssdraw函数

masterlong 发表于 2020-9-11 17:50:39

遗漏的ssdraw函数已补充在顶楼

baoyizhu 发表于 2020-9-12 09:30:37

本帖最后由 baoyizhu 于 2020-9-12 09:34 编辑

masterlong 发表于 2020-9-11 17:50
遗漏的ssdraw函数已补充在顶楼
谢谢你的分享,我试用了一下,还缺少ssbox函数,导致程序不能运行,
检查代码发现这里有一个声明变量arssbox的语句引用了ssbox函数,
但是后面没有地方再引用变量名arssbox,不知楼主是何意
于是我将这句代码注释掉,可以成功运行了。
;(setq arssbox (ssbox arss)) 注释此行代码
但此处还有一个问题,程序不能先选择后执行。
我的系统环境是cad2008,其它命令都可以先选择后执行,希望能够完善

再次感谢分享这个不错的程序

世井 发表于 2020-9-12 10:10:07

放大师分享

masterlong 发表于 2020-9-12 14:54:54

本帖最后由 masterlong 于 2020-9-12 15:10 编辑

ssbox函数已补充顶楼
arssbox这个参数在上传版里
确实没有用处
屏蔽即可
自用版里有特殊需求会用到

上传程序就是这点麻烦
平时公共函数都集中在一个lsp里
上传时要把这些自定义函数
一个个找出来放到上传版里
难免就有遗漏

顶楼源码更新
支持先选择后执行

zhangkui9070 发表于 2022-8-31 18:47:29

感谢楼主。很棒的:victory:
页: [1]
查看完整版本: 动态矩形阵列【需高大侠动态函数支持(CAD2000~2014)】