条件块插入
我想我已经接近这个代码了。在发布这部分lisp之前,代码设置了MFRMODEL和ORN变量。我想要做的是让LISP插入现有块(如果可用)。如果该块不可用,请根据之前输入的ORN变量选择要插入的块,然后按照命令操作。问题是,此代码仅在图形中当前存在块时有效。我的所有块都作为外部DWG文件定位,它们不会插入。任何帮助都将不胜感激。(if (tblsearch "BLOCK" MFRMODEL)
(command "layer" "s" "QF-EQPM" "" "insert" MFRMODEL pause "1" "1" pause "setvar" "clayer" CL)
(
(cond
((wcmatch ORN "PLAN")(command "layer" "s" "QF-EQPM" "" "insert" "GTC005P" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTC005P" MFRMODEL))
((wcmatch ORN "ELEV")(command "layer" "s" "QF-EQPM" "" "insert" "GTC005E" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTC005E" MFRMODEL))
((wcmatch ORN "SIDE")(command "layer" "s" "QF-EQPM" "" "insert" "GTJ011S" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTJ011S" MFRMODEL))
((wcmatch ORN "3D")(command "layer" "s" "QF-EQPM" "" "insert" "GTC0053" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTC0053" MFRMODEL))
)
)
) 我现在大部分时间都在工作。然而,一旦到达重命名部分,它就会崩溃。必须在区块名称周围加引号。 当目标块名称已存在于数据库中时,重命名阻止。
MFRMODEL也应该用引号括起来吗?
(tblsearch "BLOCK" MFRMODEL)
-大卫 如果我上面有这些就不行了。在发出命令的LISP部分之前设置MFRMODEL。
如果这些块已经存在,则不应重命名或插入它们。块将插入tblsearch的真实部分。 为什么使用附加语法?
(if (tblsearch "BLOCK" MFRMODEL)
(command "layer" "s" "QF-EQPM" "" "insert" MFRMODEL pause "1" "1" pause "setvar" "clayer" CL)
(
(cond
((wcmatch ORN "PLAN")(command "layer" "s" "QF-EQPM" "" "insert" "GTC005P" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTC005P" MFRMODEL))
((wcmatch ORN "ELEV")(command "layer" "s" "QF-EQPM" "" "insert" "GTC005E" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTC005E" MFRMODEL))
((wcmatch ORN "SIDE")(command "layer" "s" "QF-EQPM" "" "insert" "GTJ011S" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTJ011S" MFRMODEL))
((wcmatch ORN "3D")(command "layer" "s" "QF-EQPM" "" "insert" "GTC0053" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTC0053" MFRMODEL))
)
)
)
然而,尝试一下这样的[未经测试的](我记得出于某种原因,你不喜欢setq):
(
(lambda ( nbnm obnm nlyr olyr cmd )
(cond
( (not (tblsearch "LAYER" nlyr)) (princ (strcat "\nLayer \"" nlyr "\" does not exist.")) )
( (not olyr) (princ "\nInvalid \"CL\" symbol.") )
( (not (tblsearch "LAYER" olyr)) (princ (strcat "\nLayer \"" olyr "\" does not exist.")) )
(
(setvar 'cmdecho 0)(setvar 'clayer nlyr)
(cond
( (not nbnm) (princ "\nInvalid \"MFRMODEL\" symbol.") )
( (tblsearch "BLOCK" nbnm) (not (command "_.INSERT" nbnm "\\" "1" "1" "\\")) )
( (not obnm) (princ "\nInvalid \"ORN\" symbol.") )
( (not (tblsearch "BLOCK" obnm)) (princ (strcat "\nBlock \"" obnm "\" does not exist.")) )
(T (not (command "_.INSERT" obnm "\\" "1" "1" "\\")) (command "_.RENAME" "block" obnm nbnm) )
)
(setvar 'clayer olyr)(setvar 'cmdecho cmd)
)
)
(princ)
)
(if (and (eq 'STR (type MFRMODEL)) (snvalid MFRMODEL)) MFRMODEL)
(cdr (assoc ORN '(("PLAN" . "GTC005P") ("ELEV" . "GTC005E") ("SIDE" . "GTJ011S") ("3D" . "GTC0053"))))
"QF-EQPM"
(if (and (eq 'STR (type CL)) (snvalid CL)) CL)
(getvar 'cmdecho)
)
P、 别评判我,罗伊! 谢谢您的邮件Grrr。第二组引号是因为这是tblsearch的错误声明。对不起,我不知道你发布的第二个代码是什么。我决不是这方面的专家。我发布的代码花了我大约一整天的时间才达到这一点。
您应该会得到错误:错误函数:。。。如果if函数的测试表达式为false(我的意思是nil)。
应与您的行为相同,等待MFRMODEL或CL符号输入并运行“INSERT”命令,否则指出无效输入。 它似乎运行良好。谢谢Grrr
我有一些其他模型,但我想我知道在哪里修改代码。这就是我需要改变的那一行,对吗?列为以下内容的行:
cdr (assoc ORN '(("PLAN" . "GTC005P") ("ELEV" . "GTC005E") ("SIDE" . "GTJ011S") ("3D" . "GTC0053"))))
是的,这个协会列表可以替代你使用的cond。
顺便说一句,我在帖子中修改了代码(有很多拼写错误)。 我们必须对此进行一点调查。只是没有动力深入研究这个问题。谢谢你的帮助
页:
[1]
2