我有一个很大的要求!!
我有一个大的lisp程序的大要求。它需要在一个大圆内计算并绘制一系列或圆形阵列。然后为每个阵列中的每个圆绘制5个点,然后将这些点转移到表格中:oThis适用于我们的EDM机器,将为操作员节省大量时间。我本来希望学习lisp并自己做这件事,但我们需要它从现在起不到3年。所以有人想救我的尾巴吗?只要问问你是否需要更多信息。提前谢谢。 这些圆是如何排列的?你能张贴一张图表/图纸(2004年格式)来说明需要实现的目标吗
谢谢
李 对不起,我忘了发附件。干得好。。。
-编辑_这是2007格式
edm程序帮助。图纸 这是一张2004年格式的图纸。。。。。再次感谢!
edm计划帮助-2004。图纸 试试这个。
几个音符-
[列表]
[*]圆之间的间距最小,因此圆的间距均匀,因此圆之间的间距可能大于规定的间距。
[/列表]
(defun c:cCut(/ doc spc cEnt tNum tmp1 tmp2
tmp3 tmp4 bsRad cCen cNum cAng i)
(vl-load-com)
(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
spc (if (zerop (vla-get-activespace doc))
(if (= (vla-get-mspace doc) :vlax-true)
(vla-get-modelspace doc)
(vla-get-paperspace doc))
(vla-get-modelspace doc)))
(or cut:out (setq cut:out 0.05))
(or cut:spc (setq cut:spc 0.007))
(or cut:row (setq cut:row 0.02))
(or cut:cir (setq cut:cir 0.125))
(if (and (setq cEnt (car (entsel "\nSelect Base Circle: ")))
(eq "CIRCLE" (cdr (assoc 0 (entget cEnt)))))
(progn
(setq tNum 0. col 1)
(initget 4)
(setq tmp1 (getreal (strcat "\nSpecify Spacing from Edge <" (rtos cut:out) "> : ")))
(or (not tmp1) (setq cut:out tmp1))
(initget 4)
(setq tmp2 (getreal (strcat "\nSpecify Circle Spacing <" (rtos cut:spc) "> : ")))
(or (not tmp2) (setq cut:spc tmp2))
(initget 4)
(setq tmp3 (getreal (strcat "\nSpecify Row Spacing <" (rtos cut:row) "> : ")))
(or (not tmp3) (setq cut:row tmp3))
(initget 6)
(setq tmp4 (getreal (strcat "\nSpecify Inner Circle Radius <" (rtos cut:cir) "> : ")))
(or (not tmp4) (setq cut:cir tmp4))
(setq bsRad (- (cdr (assoc 40 (entget cEnt))) cut:out cut:cir)
cCen(cdr (assoc 10 (entget cEnt))))
(while (and (not (minusp bsRad))
(< cut:cir bsRad))
(setq cNum (fix (/ (* 2 pi bsRad) (+ (* 2 cut:cir) cut:spc)))
cAng (/ (* 2 pi) cNum)
i 0)
(while (< i cNum)
(vla-put-color
(vla-addCircle spc
(vlax-3D-point
(polar cCen (* i cAng) bsRad)) cut:cir) col)
(setq i (1+ i) tNum (1+ tNum)))
(setq bsRad (- bsRad (* 2 cut:cir) cut:row) col (abs (- col 3))))
(princ (strcat "\n<< Number of Circles: " (rtos tNum 2 0) " >>")))
(princ "\n<!> Incorrect Selection <!>"))
(princ))
首先,我真的很感谢你的辛勤工作,我希望有一天我能报答你的恩惠。
是的,你接近目标了。这就是他需要的。他想要得到从每个阵列圆的中心到每个点的相对x和y距离。正如您所指出的,每个圆的一些距离是相同的,因此如果方便的话,您可以将它们从表中删除。
理想情况下,这两点应该是。050(这是为了在他准备好之前从基圆切割时圆不会掉出来。然后,当他准备好时,是一个短的0.05切割以删除圆。)
其他点只应位于每个阵列圆的顶部,两侧各有两个点。
此外,我附上了一张图纸,显示他将如何进行他的削减。这可能有助于澄清问题。请不要犹豫,如果你需要更多的信息,或者我把你弄糊涂了。
(我知道他把我搞糊涂了!)
再次感谢
--编辑——我附上的图纸不是为了缩放或正确定位,只是为了说明他的机器的运动。。。。
edm计划帮助v3-2004。图纸
谢谢,当一个人对工作+时间充满感激的时候总是很好的
还是不太确定-你的意思是从网格中的每个圆到另一个圆吗?
我最初基于您发布的图纸,但我将更新LISP,使其每次为0.05(适用于所有半径)
对不起,我的意思是从每个阵列圆的中心到该圆上的点。。。。这有帮助吗?
是的,显然每个圆都是一样的,所以我将把它作为单独的一行放在文件的底部。
关于上面发布的LISP,还有什么需要提高的吗?(#12) 我确实注意到,在发布的lisp中,当半径不是时,底部的2个点不跟随圆。使用125。他们似乎停留在一个位置,他们将在一个圆圈与。125半径。我不是在抱怨,但我不想要求你重做任何艰苦的工作。再次感谢!
页:
[1]
2