明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3415|回复: 9

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

[复制链接]
发表于 2019-8-25 17:56:08 | 显示全部楼层 |阅读模式
本帖最后由 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动态函数库




本帖子中包含更多资源

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

x
"觉得好,就打赏"
    共1人打赏
发表于 2019-8-25 22:44:29 | 显示全部楼层
不错不错,最近想做动态复制,应该也差不多
发表于 2019-8-31 16:46:20 | 显示全部楼层
感谢无私分享
发表于 2020-4-4 15:55:42 | 显示全部楼层
发现少了一个函数ssdraw
发表于 2020-9-11 14:42:31 | 显示全部楼层
楼主,烦请补齐ssdraw函数
 楼主| 发表于 2020-9-11 17:50:39 | 显示全部楼层
遗漏的ssdraw函数已补充在顶楼
发表于 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 | 显示全部楼层
放大师分享
 楼主| 发表于 2020-9-12 14:54:54 | 显示全部楼层
本帖最后由 masterlong 于 2020-9-12 15:10 编辑

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

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

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

发表于 2022-8-31 18:47:29 | 显示全部楼层
感谢楼主。很棒的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-15 10:46 , Processed in 0.187398 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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