使用LISP生成自动阵列指定间距并居中的程序
本帖最后由 airuyi 于 2018-1-15 21:31 编辑想编写一个程序,实现以下功能:
1.输入一个间距数字(默认300)
2.图上任意选两个点的位置。
3.程序使用这两个点的距离(假设这两点的距离是1500吧),除于300,得到阵列的数量5个。
4.选择一个需要阵列的图形。
5.沿着刚刚选择的两个点的直线方向,阵列这个图形并且最后把阵列出来的图形居中摆放在这两个点之间。
因为阵列5个然后居中摆放,所以应该从(1500-300*(5-1))/2的位置,也就是选择的两个点建立的坐标系里面,从(150,0)开始摆放第一个要阵列的图形。这个位置要怎么得出来呢?
以下是我编的一个简单程序,存在很大问题,大家别见笑。我不知道怎么求第一个图形摆放位置的坐标,请高手帮忙解决。
因为不知道怎样可以点选一个图形作为我们要阵列的对象,所以我只好先复制一个图形,然后开始运行程序。
(defun c:ddd (/ ZLJJ ZLSL ptl_DIS)
(setq ZLJJ (getreal "\阵列间距: "))
(setq PP1 (getpoint "\n第一点") PP2 (getpoint "\n第二点"))
(setq DIS (distance pP1 pP2));求两点距离
(setq ZLSL (RTOS (/ DIS (ATOF ZLJJ)) 2 0));距离除于间距得到数量ZLSL
(command "ucs" "3" pp1 pp2 "");建立基于直线的坐标系
(command "pasteclip" "0,0" "");;;;;;;;;;;;;;;;;因为不知道怎样求居中摆放的第一个图形位置,只好先粘贴图形到点0,0。
(setq ptl(ENTLAST));设置最后一个图形
(command "array" ptl "" "R" "1" ZLSL ZLJJ);(command "array阵列" pt "" "R" "1行" "ZLSL列" "间距ZLJJ0")
(command "ucs" "p" "");回到原UCS
(princ)
)
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=112019&highlight=%B6%AF%CC%AC%B8%B4%D6%C6 稍微修改一下就可以实现 wudechao 发表于 2018-1-15 21:45
稍微修改一下就可以实现
首先是很感谢你的无私帮助,谢谢。
可是你的程序跟我的构思有点差距太大了,而且我其实也不是很懂程序,所以没有办法修改你的程序实现我的功能啊。 希望有高人帮忙 (defun c:ddd ()
(setq d1 (getreal "\n阵列间距: ")
p1 (getpoint "\n第一点: ")
p2 (getpoint p1 "\n第二点: ")
nn (fix (/ (distance p1 p2) d1 1.))
rr (angle p1 p2)
pt '(0 0)
i1
)
(if (setq s1 (car (entsel "\n选择: ")))
(repeat nn
(command "copy" s1 "" pt (polar pt rr (* d1 i)))
(setq i (1+ i))
)
)
(princ)
) xyp1964 发表于 2018-1-16 13:20
版主的程序比我的明了得多。非常感谢。
同时我还是需要继续研究怎样使需要的图块按照指定的两点路径阵列之后然后居中摆放在这两点之间。 还是没有写出需要的程序,请问有人可以解决我的问题吗? 我已经自己写出来了,感谢各位帮助 airuyi 发表于 2018-1-24 11:53
我已经自己写出来了,感谢各位帮助
我也在研究这种,:'(
页:
[1]