口齿不清表演滑稽。。。不在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))
首先,由于运行OSNAP,您遇到了问题。或者暂时将osmode设置为零,在每个点(在命令调用中)之前加上“_non”,或者使用entmod/VLA绘制线。 你好,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
它运行,但我不知道它的目的。
如果有帮助,请告诉我。
当做
马尔科 AARGHH。。。。你打败了我AlanJT 谢谢你们俩!!啊!OSNAPS!!很好的提示可以最小化“setq”的Marco。
我不熟悉“non”或entmod/VLA,alan。。虽然我可以使用osmode!
我有时不得不创建粗糙的机器外形,它们都是具有数十种不同直径的阶梯轴。为了更容易地绘制,我创建了这个lisp,在已知直径和步长的情况下绘制轴的一侧。
我现在有一个无限循环。用Esc或Enter结束循环的正确步骤是什么? 我猜你正在绘制与图中类似的轴的立面图?
也许这会有所帮助:
(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))
-大卫
是的,就是这样。虽然我更愿意让它单独绘制每个片段,但它工作得非常出色。我知道我知道。。。我我,我想要我想要!
有没有可能有一个“后退”选项?例如,我输入了错误的第四直径,我想备份并重做它。。。
我仍然在与条件和whiles以及所有这些做斗争。。。总有一天我会得到的! ??
(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)
) 天啊,完成一项任务有这么多不同的方法。太棒了!
嗯,我真的不明白它是怎么工作的:但是艾伦,你的程序似乎画出了实际的直径,我需要输入直径,输出半径。。。
谢谢你们的帮助 哎呀,我没有意识到这部分代码。我要回家了,但我可能晚些时候复习。
页:
[1]
2