(defun c:UO nil(command "_.Ucs" "_Object" pause))
(defun c:UU nil (command "_.Ucs" "_world"))
谢谢大家
在你的支持下,我成功地创建了这个项目。但现在我面临一个奇怪的问题。我在Autocad 2008中运行了lisp,前三次它完全按照我希望的那样运行。我第四次运行它时,它会给我一条错误消息。
致命错误:命令嵌套深度不能超过4。
当我在Autocad 2010中运行相同的程序时,它运行得非常好,没有任何错误。谁能告诉我哪里出了问题。我知道这个Lisp程序还有很大的改进空间,但我只想知道这个Lisp程序出了什么问题。
我不太擅长lisps,但凭借我所知道的&这个网站的一点帮助,我完成了我的工作。
我在此附上代码,但如果您使用的是Autocad 2008或更低版本,请确保不要第四次使用它。
0SALD。LSP 我无法立即看到错误发生的地方,但我想提出几点建议:
[列表]
[*]使用“command”调用时,在命令前面加上“_”允许使用所有语言,并在重新定义命令时恢复到原始命令定义。看见
http://www.cadforum.cz/cadforum_en/qaID.asp?tip=2425for更多信息。
[/列表]
[列表]
[*]尽可能避免使用“命令”调用-看看使用entmake函数-它更快、更可靠,给你更多的控制权(但不要太担心,因为你才刚刚开始,只是未来的一个提示)。
[/列表]
李 你能在(命令)调用中使用ALIGN吗?
这是2000年的EXRXSUB-David 啊,真的-错过了!
2010年的EXRXSUBR:wink:
Viv,
我今天早上查看了代码,发现当我注释这行时
故障不会发生。
我猜想它在代码的这一部分的某个地方,如果它有帮助的话。
(while (or (not ss)
(> (sslength ss) 1))
(princ "\nSelect 1 Line To Work With: ")
(setq ss (ssget (list (cons 0 "LINE")))))
(setq en (ssname ss 0) ; Entity Name
ed (entget en) ; Entity Definition
p10 (cdr (assoc 10 ed)) ; 1st End Point
p11 (cdr (assoc 11 ed)) ; 2nd End Point
lan (angle p10 p11) ; Angle In Radians
lth (- (distance p10 p11) 50)
nos (getint "\nENTER THE NUMBER OF SLOTS (2,3,4) : ")
plen (getint "\nENTER THE LENGTH OF PLENUM : ")
p1 (cdr (assoc 10 (entget en)))
也许你应该仔细检查一下这个区域。我认为变量en是问题所在或与之相关的东西。
无论如何,这是一个开始。 谢谢David、Lee和Buzzard
我同意你们所有人的意见。但是,同一个lisp如何在Autocad 2010中顺利工作??
嗨Buzzard
很高兴在很长时间后看到你的帖子。你怎么样?
谢谢和问候
维维安
嘿Viv,
正如我提到的,我不太确定那里发生了什么。李在那方面会是一个更好的老师。同样,所有指标似乎都指向选择集的方向。
为什么在旧版本上发生这种情况让我不知所措。
就我自己而言,我染上了典型的季节性疾病,但并不严重。
小心,祝你好运。 您可以在设置模式等后尝试添加此项。它可以帮助调试:
(defun debughelp ()
(setq *error* nil)
(setvar "CMDECHO" 1)
(trace c:lsd)
(vl-load-com)
(vl-bt))
(debughelp)
-大卫 维维安,
很难从你的代码中看出你想要创建什么,但我会尽我所能帮助你。
我会避免使用对齐和擦除,只在正确的位置创建必要的内容。
我已经写了一个快速的“shell”,你可以围绕它来构建你的程序-这应该给你一个良好的基础,是没有错误的。
我已经为您提供了一些子函数,这些子函数可以简化poyline的创建:
(defun c:lsd (/ *error* Make_Layer Make_Polyline
vl ov ss nos plen)
(defun *error* (msg)
(and ov (mapcar 'setvar vl ov))
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **")))
(princ))
(defun Make_Layer (lay col)
(or (tblsearch "LAYER" lay)
(command "_.-layer" "_M" lay "_C" col lay "")))
(defun Make_Polyline (pts cls)
(entmakex (append (list (cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 (length pts))
(cons 70 cls))
(mapcar (function (lambda (x) (cons 10 x))) pts))))
(setq vl '("CLAYER" "CMDECHO" "OSMODE")
ov(mapcar 'getvar vl))
(if (and (setq ss (ssget "_:S" '((0 . "LINE"))))
(setq nos(getint "\nEnter Number of Slots: "))
(setq plen (getdist "\nEnter Length of Plenum: ")))
(progn
(mapcar 'Make_Layer '("GRILLE" "DUCTING") '(30 6))
(mapcar 'setvar (cdr vl) '(0 0 0))
;< Draw Stuff Here>
) ; End Progn
) ; End IF
(mapcar 'setvar vl ov)
(princ))
请注意蓝色和红色显示的两个子函数。
使用Make_layer sub,您可以为其提供层名称和颜色,它将为您创建层,如上图所示。
使用Make_Polyline sub,可以为其提供点列表和位代码,以确定是要闭合多边形还是开放多边形(1或0)。
例如:
10
将返回通过1,2,0 3,10,0和5,6,0创建的闭合多段线的实体名称。
我希望这有帮助,
李
页:
1
[2]