crazymiss 发表于 2013-9-5 19:24:57

求大神编写此功能的LISP!

要求,黄色部分图形围绕图中圆做圆周阵列 阵列个数可以自定,同时自身以相应的角度旋转,假如圆周阵列10个那么每两个之间的角度就是36度,自身就以2倍的36度旋转。

革天明 发表于 2013-9-5 19:42:08

C2的旋转中心如何确定?另外你要的是同类型的功能还是单指这个图形?

crazymiss 发表于 2013-9-5 20:07:42

c2的中心就是选取c2上的那个点。我要同类型的。补充一下 那个角度是递增关系 第一个阵列的是36度第二个就应该是72度了。角度到720时程序就停止了

crazymiss 发表于 2013-9-5 20:09:44

革天明 发表于 2013-9-5 19:42 static/image/common/back.gif
C2的旋转中心如何确定?另外你要的是同类型的功能还是单指这个图形?

c2的中心就是选取c2上的那个点。我要同类型的。就是说假如圆周阵列每1度一个图元。那么阵列的第一个旋转角度是2度 第二个就是4度第三个就是6度以此类推。到720度程序停止

lsjj 发表于 2013-9-5 20:21:36

繪個成果圖會不會比較容易解釋

crazymiss 发表于 2013-9-5 21:02:15

这个图就是结果图,假如每30度一个图元,那么B相对A旋转60度,C相对B旋转60度,D相对C旋转60度。以此类推,当这个角度到720度也就是阵列360度时程序停止

crazymiss 发表于 2013-9-5 21:02:57

lsjj 发表于 2013-9-5 20:21 static/image/common/back.gif
繪個成果圖會不會比較容易解釋

结果图贴上来了,大神给帮帮忙呀····

fl202 发表于 2013-9-27 10:51:43

我能想到的是:所选图形ss1,先旋转复制,再计算阵列角度,再移动。

ZZXXQQ 发表于 2013-9-27 21:21:00

早就写过了。
;卫星式阵列 明经 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]
查看完整版本: 求大神编写此功能的LISP!