Happy Hobbit 发表于 2022-7-5 19:14:25

我就是这么做的
 
if语句询问acadiso中是否存在线型“DASHED2.5”(第一选择)。林。
如果是,则加载它。
 
Else加载“hidden2”(第二选择)
 
至少我是这么想的

Lee Mac 发表于 2022-7-5 19:15:54

请尝试以下操作:
(defun ltload ( typ lin )
   (eval
       (list 'defun 'ltload '( typ lin )
         (list 'vl-catch-all-apply ''vla-load
               (list 'list
                   (vla-get-linetypes (vla-get-activedocument (vlax-get-acad-object)))
                   'typ
                   'lin
               )
         )
          '(tblsearch "ltype" typ)
       )
   )
   (ltload typ lin)
)
(cond
   (   (ltload "DASHED2.5" "acadiso.lin")
       (princ "\nLoaded DASHED2.5 linetype.")
   )
   (   (ltload "HIDDEN2" "acadiso.lin")
       (princ "\nLoaded HIDDEN2 linetype.")
   )
   (   (princ "\nUnable to load HIDDEN2 linetype."))
)

Happy Hobbit 发表于 2022-7-5 19:20:05

来吧,非常感谢李。
 
为了测试,我在一个新的绘图中运行了它&它加载了dashed2.5
 
然后,我从acadiso中删除dashed2.5,保存它,清除图形并重新运行lisp
 
宾果,它加载了hidden2
 
我猜:
 
    (   (princ "\nUnable to load HIDDEN2 linetype."))是条件T吗?

Lee Mac 发表于 2022-7-5 19:25:04

 
欢迎你,哈比人-该方法基本上与我的Load Linetypes函数使用的方法相同,尽管正如你已经知道的那样,该方法非常简洁。线型所在的lin文件。
 
 
您是正确的-如果程序未能加载任何一种线型,则将计算此表达式,因此前面的测试表达式返回了nil。
 
注意,对于这个最终条件,不需要显式的“t”作为测试表达式,因为第一个表达式(测试表达式)将始终被计算。

Happy Hobbit 发表于 2022-7-5 19:29:14

在post#9中,我试图使用IF语句来确定代码是否返回T。显然,这是错误的做法。
 
现在我已经将您的defun ltload(作为一个子函数)插入到主lisp中,作为主列表中的一个writing和cond函数,它工作得非常好
 
非常非常感谢李
 
给伦敦那个永远乐于助人的家伙打上最高分

Lee Mac 发表于 2022-7-5 19:31:36

 
无论如何,您仍然可以使用一系列IF语句编写代码(通常,任何COND表达式都可以作为一系列嵌套的IF表达式编写),例如:
(if (ltload "DASHED2.5" "acadiso.lin")
   (princ "\nLoaded DASHED2.5 linetype.")
   (if (ltload "HIDDEN2" "acadiso.lin")
       (princ "\nLoaded HIDDEN2 linetype.")
       (princ "\nUnable to load HIDDEN2 linetype.")
   )
)
我只是觉得康德在这种情况下更清楚。
 
 
很高兴听到,谢谢你的好话和感激之情。
 

Happy Hobbit 发表于 2022-7-5 19:36:44

不用了,李,我宁愿每次都用康德。即使使用vlide,它也比嵌套的“if-then-else”语句清晰得多。我甚至考虑更新我早期在lisp上的一些尝试(大约12个月前),用cond替换ifs。
如果我能找到时间的话。
页: 1 [2]
查看完整版本: 如果线型存在