明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: nono

自编快速阵列对象程序,与大家分享

  [复制链接]
发表于 2007-11-27 22:31:00 | 显示全部楼层
能否将对象根据某条曲线进行阵列?
发表于 2008-5-1 11:28:00 | 显示全部楼层
能否根据一条曲线在不规则的范围内列阵呢,就像填充一样
发表于 2008-5-4 20:53:00 | 显示全部楼层
建议改成中文的
发表于 2008-5-22 09:50:00 | 显示全部楼层
非常有用,谢谢楼主,比cad自带的快捷有效
发表于 2011-4-18 23:20:19 | 显示全部楼层
谢谢楼主!
发表于 2011-5-31 15:28:12 | 显示全部楼层
谢谢楼主共享,常用LSP
发表于 2011-6-1 07:53:10 | 显示全部楼层
本帖最后由 raimo 于 2011-6-1 07:58 编辑

试了一下,直线的陈列不错,但是在指定起点的时候有问题,
比如双向陈列中指定起点之后,实际陈列出来的还是在对象本身的原点开始,并非指定的起点

另外,似乎无法完成环形陈列,等分陈列(就是不指定间距,指定陈列数量和总距离)啊,如果楼主能完善一下那这个程序就牛了

发表于 2011-6-5 19:48:01 | 显示全部楼层
为什么程序木有注释
发表于 2011-7-2 15:03:40 | 显示全部楼层
你好,我的这个阵列想修改为:执行命令-选择对象-输入步距-输入列数-空格OK,如果阵列后图元变为8号色更好,现在的这个LISP输入的是图元间距,而不是步距,谢谢大哥帮忙看看
;;简易矩形阵列
(defun C:PAR()
  (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)))
  
  (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))
)

发表于 2011-7-2 16:58:53 | 显示全部楼层
能不能把阵列的功能扩展到沿着某一条线阵列,也就是所谓的路径阵列或者曲线阵列,保证相对位置不变!我想了一段时间了,一直没有一个很好 的解决办法!不知道有没有人有好的方法解决这个问题!
请楼主编写一个沿曲线阵列的程序,很想用上
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-26 12:28 , Processed in 0.180388 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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