求大神编写此功能的LISP!
要求,黄色部分图形围绕图中圆做圆周阵列 阵列个数可以自定,同时自身以相应的角度旋转,假如圆周阵列10个那么每两个之间的角度就是36度,自身就以2倍的36度旋转。 C2的旋转中心如何确定?另外你要的是同类型的功能还是单指这个图形? c2的中心就是选取c2上的那个点。我要同类型的。补充一下 那个角度是递增关系 第一个阵列的是36度第二个就应该是72度了。角度到720时程序就停止了 革天明 发表于 2013-9-5 19:42 static/image/common/back.gifC2的旋转中心如何确定?另外你要的是同类型的功能还是单指这个图形?
c2的中心就是选取c2上的那个点。我要同类型的。就是说假如圆周阵列每1度一个图元。那么阵列的第一个旋转角度是2度 第二个就是4度第三个就是6度以此类推。到720度程序停止 繪個成果圖會不會比較容易解釋 这个图就是结果图,假如每30度一个图元,那么B相对A旋转60度,C相对B旋转60度,D相对C旋转60度。以此类推,当这个角度到720度也就是阵列360度时程序停止 lsjj 发表于 2013-9-5 20:21 static/image/common/back.gif
繪個成果圖會不會比較容易解釋
结果图贴上来了,大神给帮帮忙呀···· 我能想到的是:所选图形ss1,先旋转复制,再计算阵列角度,再移动。 早就写过了。
;卫星式阵列 明经 ZZXXQQ 2013.9.6
(defun c:tt ()
(setvar "CMDECHO" 0)
(if (and (princ "\n选择卫星图元: ")
(setq ss (ssget))
(setq pc (getpoint "\n选择自转中心点: "))
(setq pc1 (getpoint "\n选择公转中心点: "))
(setq r (getdist "\n输入公转半径: "))
(setq ang (getangle "\n输入起始角度: "))
(setq n (getint "\n输入阵列数量: "))
(setq dlta (getreal "\n输入旋转步长(角度): "))) (progn
(setq start ang)
(setq dlta (/ (* dlta pi) 180))
(setq i 0)
(repeat n
(setq an1 (+ start (* dlta i)))
(setq pt1 (polar pc1 an1 r))
(setq an2 (/ (* dlta i 2 180) pi))
(setq ss1 (ssadd) s1 (entlast))
(command ".COPY" ss "" pc pt1)
(while (setq s1 (entnext s1)) (ssadd s1 ss1))
(command ".ROTATE" ss1 "" pt1 an2)
(setq i (1+ i))
)
))
(setvar "CMDECHO" 1)
(princ)
)
页:
[1]