JPlanera 发表于 2022-7-6 10:14:28

口齿不清表演滑稽。。。不在a中

我是一个自学成才的novie LISP作家,让它立刻被人知道。。。
创建此例程是为了使用直径和增量长度绘制阶梯轴。。。问题是,有时计算不会生成直线。我注意到缩小后这种情况会更多。此外,我的“while”循环完全错误,我试图在其中添加一个选项,但效果不好。。。如有任何帮助/建议,将不胜感激。
 
编辑:我得到一个错误“在(X,Y,Z)处创建零长度线”
 

(DEFUN C:FPI ( / x pt1 Y1 Y1a Y1b X1 X1a Y2 Y2a Y2b X2 X2a)

(defun dtr (x)
(* pi (/ x 180.0))
)

(setq pt1 (getpoint "\nSelect Start Point:"))
(setq Y1 (getreal "\nEnter Diameter:"))
(setq Y1a (/ Y1 2))
(setq Y1b (polar pt1 (dtr 90) Y1a))
(command "LINE" pt1 Y1b "")

(setq X1 (getreal "\nEnter Length:"))
(setq X1a (polar Y1b (dtr 180) X1))
(command "LINE" Y1b X1a "")

(while

(setq Y2 (getreal "\nEnter Diameter:"))
(setq Y2a (/ (- Y2 Y1) 2))
(setq Y2b (polar X1a (dtr 90) Y2a))
(command "LINE" X1a Y2b "")

(setq X2 (getreal "\nEnter Length:"))
(setq X2a (polar Y2b (dtr 180) X2))
(command "LINE" Y2b X2a "")
(setq Y1 (getreal "\nEnter Diameter:"))
(setq Y1a (/ (- Y1 Y2) 2))
(setq Y1b (polar X2a (dtr 90) Y1a))
(command "LINE" X2a Y1b "")

(setq X1 (getreal "\nEnter Length:"))
(setq X1a (polar Y1b (dtr 180) X1))
(command "LINE" Y1b X1a ""))(PRINC))

alanjt 发表于 2022-7-6 10:22:42

首先,由于运行OSNAP,您遇到了问题。或者暂时将osmode设置为零,在每个点(在命令调用中)之前加上“_non”,或者使用entmod/VLA绘制线。

MarcoW 发表于 2022-7-6 10:27:02

你好,Jplanera,
 
阅读你的“问题”,首先想到的是“osnaps”。在画线之前,让舒尔关闭osnap。OSNAP总是把事情搞砸。
 
此外,您确实使用了很多“setq”,可以稍微减少一点,请看下面:
 

(DEFUN C:FPI (/ x pt1 Y1 Y1a Y1b X1 X1a Y2 Y2a Y2b X2 X2a OldOsmode)

; added
(setq OldOsmode (getvar "OSMODE"))
(setvar "OSMODE" 0) ; turn Osnaps off

(defun dtr (x)
   (* pi (/ x 180.0))
) ;_defun

(setq    pt1 (getpoint "\nSelect Start Point:")
    Y1(getreal "\nEnter Diameter:")
    Y1a (/ Y1 2)
    Y1b (polar pt1 (dtr 90) Y1a)
) ;_setq

(command "LINE" pt1 Y1b "")

(setq    X1(getreal "\nEnter Length:")
    X1a (polar Y1b (dtr 180) X1)
)

(command "LINE" Y1b X1a "")

(while
   (setq Y2 (getreal "\nEnter Diameter:"))
    (setq Y2a (/ (- Y2 Y1) 2)
       Y2b (polar X1a (dtr 90) Y2a)
    )

    (command "LINE" X1a Y2b "")

    (setq X2(getreal "\nEnter Length:")
       X2a (polar Y2b (dtr 180) X2)
    )
    (command "LINE" Y2b X2a "")

    (setq Y1(getreal "\nEnter Diameter:")
       Y1a (/ (- Y1 Y2) 2)
       Y1b (polar X2a (dtr 90) Y1a)
    )

    (command "LINE" X2a Y1b "")

    (setq X1(getreal "\nEnter Length:")
       X1a (polar Y1b (dtr 180) X1)
    )

    (command "LINE" Y1b X1a "")
)

; added
(setvar "OSMODE" OldOsmode) ; turn osmode back to what it was
(PRINC)
) ;_defun


 
它运行,但我不知道它的目的。
如果有帮助,请告诉我。
当做
马尔科

MarcoW 发表于 2022-7-6 10:29:24

AARGHH。。。。你打败了我AlanJT

JPlanera 发表于 2022-7-6 10:33:01

谢谢你们俩!!啊!OSNAPS!!很好的提示可以最小化“setq”的Marco。
 
我不熟悉“non”或entmod/VLA,alan。。虽然我可以使用osmode!
 
我有时不得不创建粗糙的机器外形,它们都是具有数十种不同直径的阶梯轴。为了更容易地绘制,我创建了这个lisp,在已知直径和步长的情况下绘制轴的一侧。
 
我现在有一个无限循环。用Esc或Enter结束循环的正确步骤是什么?

David Bethel 发表于 2022-7-6 10:36:45

我猜你正在绘制与图中类似的轴的立面图?
 
也许这会有所帮助:
 

(defun c:ssel (/ sp od l d p1 p2)
(initget 1)
(setq sp (getpoint "\nStart Point:   "))
(setq od 0)
(while
   (progn
   (initget 6)
   (setq d (getdist "\nNext Diameter <Enter> To Exit:   ")))
   (initget 7)
   (setq l (getdist "\nSegment Length:   "))
   (setq p1 (polar sp (* pi 0.5) (* (- d od) 0.5))
         p2 (polar p1 (* pi 1.0) l))
   (entmake (list (cons 0 "LINE")(cons 10 sp)(cons 11 p1)))
   (entmake (list (cons 0 "LINE")(cons 10 p1)(cons 11 p2)))
   (setq sp p2 od d))
(prin1))

 
-大卫

JPlanera 发表于 2022-7-6 10:42:30

是的,就是这样。虽然我更愿意让它单独绘制每个片段,但它工作得非常出色。我知道我知道。。。我我,我想要我想要!
 
有没有可能有一个“后退”选项?例如,我输入了错误的第四直径,我想备份并重做它。。。
我仍然在与条件和whiles以及所有这些做斗争。。。总有一天我会得到的!

alanjt 发表于 2022-7-6 10:45:51

??
 
(defun c:TEst (/ _line lst d s)
(defun _line (a b)
   (entmakex (list '(0 . "LINE") (cons 10 (trans a 1 0)) (cons 11 (trans b 1 0))))
)
(if (car (setq lst (list (getpoint "\nSpecify start point: "))))
   (while (and (progn (initget 6) (setq d (getdist (car lst) "\nSpecify diameter: ")))
               (_line (car lst) (car (setq lst (cons (polar (car lst) (/ pi 2.) d) lst))))
               (progn (initget 6) (setq s (getdist (car lst) "\nSpecify segment length: ")))
               (_line (car lst) (car (setq lst (cons (polar (car lst) pi s) lst))))
          )
   )
)
(princ)
)

JPlanera 发表于 2022-7-6 10:49:05

天啊,完成一项任务有这么多不同的方法。太棒了!
 
嗯,我真的不明白它是怎么工作的:但是艾伦,你的程序似乎画出了实际的直径,我需要输入直径,输出半径。。。
 
谢谢你们的帮助

alanjt 发表于 2022-7-6 10:57:22

哎呀,我没有意识到这部分代码。我要回家了,但我可能晚些时候复习。
页: [1] 2
查看完整版本: Lisp程序表演滑稽。。。不在a中