动态矩形阵列【需高大侠动态函数支持(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动态函数库
不错不错,最近想做动态复制,应该也差不多 感谢无私分享 发现少了一个函数ssdraw 楼主,烦请补齐ssdraw函数 遗漏的ssdraw函数已补充在顶楼 本帖最后由 baoyizhu 于 2020-9-12 09:34 编辑
masterlong 发表于 2020-9-11 17:50
遗漏的ssdraw函数已补充在顶楼
谢谢你的分享,我试用了一下,还缺少ssbox函数,导致程序不能运行,
检查代码发现这里有一个声明变量arssbox的语句引用了ssbox函数,
但是后面没有地方再引用变量名arssbox,不知楼主是何意
于是我将这句代码注释掉,可以成功运行了。
;(setq arssbox (ssbox arss)) 注释此行代码
但此处还有一个问题,程序不能先选择后执行。
我的系统环境是cad2008,其它命令都可以先选择后执行,希望能够完善
再次感谢分享这个不错的程序
放大师分享
本帖最后由 masterlong 于 2020-9-12 15:10 编辑
ssbox函数已补充顶楼
arssbox这个参数在上传版里
确实没有用处
屏蔽即可
自用版里有特殊需求会用到
上传程序就是这点麻烦
平时公共函数都集中在一个lsp里
上传时要把这些自定义函数
一个个找出来放到上传版里
难免就有遗漏
顶楼源码更新
支持先选择后执行
感谢楼主。很棒的:victory:
页:
[1]