如果线型存在
我正在编写一个lisp,它调用来自Acadiso的自定义线型。林线型在大多数用户计算机上不存在,但在某些计算机上存在。
我想在代码中输入如下内容:
(If (linetype "DASHED2.5" exists)
(progn
(command "._linetype" "_load" "DASHED2.5" "Acadiso.lin" ""); then
(command "-layer" "M" "BOX" "L" "DASHED2.5" "" "LW" "0.5" "" "C" "6" "" "" )
);end prong
(progn
((command "._linetype" "_load" "hidden2" "Acadiso.lin" ""); else
(command "-layer" "M" "BOX" "L" "hidden2" "" "LW" "0.5" "" "C" "6" "" "" )
);end progn
)
);end if
线型“DASHED2.5”优于标准线型“hidden2” 请参阅我的Load Linetypes功能。
你好,李
这需要添加很多代码
我的Lisp程序已经超过260行了,我希望能再短一点
另外,我不完全理解你的代码,因为它没有注释 如果要测试激活图形中是否已定义线型,请使用:
(if (tblsearch "ltype" "YourLinetypeHere")
...
)
“我的加载线型”功能包括两个选项,用于测试线型是否在*中定义。lin文件:LM:ltdefined-p函数将读取一个。具有给定文件名的lin文件,如果在文件中定义了具有提供名称的线型,则返回T。
或者,表达式:
(vl-some
'(lambda ( lin )
(vl-catch-all-apply 'vla-load (list ltc typ lin))
(tblsearch "ltype" typ)
)
lst
)
将在所有的集合上迭代。在所有支持文件搜索路径(已分配给变量“lst”)中找到lin文件,并将尝试从每个文件加载目标线型,如果成功,则停止。 Sooo,使用第一个选项如下:
(defun c:test2 ()
(setvar "Expert" 3)
(if (tblsearch "ltype" "noddy")
(progn
(command "._linetype" "_load" "Noddy" "Acadiso.lin" "")
(command "-layer" "M" "Big-Ears" "L" "Noddy" "" "LW" "0.5" "" "C" "6" "" "" )
(princ "\n Linetype Noddy Loaded")
)
(progn
(command "._linetype" "_load" "DASHED2.5" "Acadiso.lin" "")
(command "-layer" "M" "Big-Ears" "L" "DASHED2.5" "" "LW" "0.5" "" "C" "6" "" "" )
(princ "\n Linetype DASHED2.5 Loaded")
)
)
(setvar "Expert" 3)
(princ)
)
这似乎奏效了!
我希望我能更好地理解第二种选择
附言
实际上,我没有一个叫做Noddy的线型,这是一种将if语句转到“else”的好方法 请注意,表达式(tblsearch“ltype”“YourLinetypeHere”)将仅测试给定线型是否在活动图形中定义,而不会检查给定线型是否在中定义。lin文件(这似乎是您想要测试的,因为您随后将加载线型)。 真奇怪,李
因为我只是在一个没有加载线型的图形中运行它&lisp加载了它。
您的代码当前设置为加载任何一种情况下的线型-简单来说,您的代码表示:
IF Noddy linetype is already defined
THEN:
Load Noddy linetype from acadiso.lin
Create Big-Ears layer and assign various properties
Print message
ELSE:
Load DASHED2.5 linetype from acadiso.lin
Create Big-Ears layer and assign various properties
Print message
我懂了。。。
像这样的事情能解决吗?
(vl-some
'(lambda ( lin )
(vl-catch-all-apply 'vla-load (list ltc typ lin))
(tblsearch "DASHED2.5" typ)
)
lst
)
(if (/= lst t)
(progn
(vl-some
'(lambda ( lin )
(vl-catch-all-apply 'vla-load (list ltc typ lin))
(tblsearch "hidden2" typ)
)
lst
)
;My create layer macro here for DASHED2.5
)
;My create layer macro here for hidden2
)
(vl-load-com)
你需要回到IF工作原理的基础
如果事情是真的
做这行
如果不这样做
你对诺迪的寻找将返回False,因此运行IF的第二部分“else”
(if (= (tblsearch "ltype" "noddy")T)
(PRINC "LINE 1")
(PRINC "LINE 2")
)
页:
[1]
2