TheNewGuy 发表于 2022-7-6 14:34:25

我有一个很大的要求!!

我有一个大的lisp程序的大要求。它需要在一个大圆内计算并绘制一系列或圆形阵列。然后为每个阵列中的每个圆绘制5个点,然后将这些点转移到表格中:oThis适用于我们的EDM机器,将为操作员节省大量时间。我本来希望学习lisp并自己做这件事,但我们需要它从现在起不到3年。所以有人想救我的尾巴吗?只要问问你是否需要更多信息。提前谢谢。

Lee Mac 发表于 2022-7-6 14:38:38

这些圆是如何排列的?
 
你能张贴一张图表/图纸(2004年格式)来说明需要实现的目标吗
 
谢谢
 

TheNewGuy 发表于 2022-7-6 14:42:35

对不起,我忘了发附件。干得好。。。
-编辑_这是2007格式
edm程序帮助。图纸

TheNewGuy 发表于 2022-7-6 14:46:06

这是一张2004年格式的图纸。。。。。再次感谢!
edm计划帮助-2004。图纸

Lee Mac 发表于 2022-7-6 14:50:10

试试这个。
 
几个音符-
 
[列表]
[*]圆之间的间距最小,因此圆的间距均匀,因此圆之间的间距可能大于规定的间距。
[/列表]
 

(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))

TheNewGuy 发表于 2022-7-6 14:52:02

首先,我真的很感谢你的辛勤工作,我希望有一天我能报答你的恩惠。
 
是的,你接近目标了。这就是他需要的。他想要得到从每个阵列圆的中心到每个点的相对x和y距离。正如您所指出的,每个圆的一些距离是相同的,因此如果方便的话,您可以将它们从表中删除。
 
 
理想情况下,这两点应该是。050(这是为了在他准备好之前从基圆切割时圆不会掉出来。然后,当他准备好时,是一个短的0.05切割以删除圆。)
其他点只应位于每个阵列圆的顶部,两侧各有两个点。
 
此外,我附上了一张图纸,显示他将如何进行他的削减。这可能有助于澄清问题。请不要犹豫,如果你需要更多的信息,或者我把你弄糊涂了。
(我知道他把我搞糊涂了!)
再次感谢
 
--编辑——我附上的图纸不是为了缩放或正确定位,只是为了说明他的机器的运动。。。。
edm计划帮助v3-2004。图纸

Lee Mac 发表于 2022-7-6 14:56:16

 
谢谢,当一个人对工作+时间充满感激的时候总是很好的
 
 
还是不太确定-你的意思是从网格中的每个圆到另一个圆吗?
 
 
 
我最初基于您发布的图纸,但我将更新LISP,使其每次为0.05(适用于所有半径)

TheNewGuy 发表于 2022-7-6 14:59:08

 
对不起,我的意思是从每个阵列圆的中心到该圆上的点。。。。这有帮助吗?

TheNewGuy 发表于 2022-7-6 15:00:39

 
是的,显然每个圆都是一样的,所以我将把它作为单独的一行放在文件的底部。
 
关于上面发布的LISP,还有什么需要提高的吗?(#12)

Lee Mac 发表于 2022-7-6 15:05:08

我确实注意到,在发布的lisp中,当半径不是时,底部的2个点不跟随圆。使用125。他们似乎停留在一个位置,他们将在一个圆圈与。125半径。我不是在抱怨,但我不想要求你重做任何艰苦的工作。再次感谢!
页: [1] 2
查看完整版本: 我有一个很大的要求!!