乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 93|回复: 16

[编程交流] 如果线型存在

[复制链接]

21

主题

155

帖子

135

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 18:34:19 | 显示全部楼层 |阅读模式
我正在编写一个lisp,它调用来自Acadiso的自定义线型。林
 
线型在大多数用户计算机上不存在,但在某些计算机上存在。
 
我想在代码中输入如下内容:
 
  1. (If (linetype "DASHED2.5" exists)
  2. (progn
  3. (command "._linetype" "_load" "DASHED2.5" "Acadiso.lin" ""); then
  4. (command "-layer" "M" "BOX" "L" "DASHED2.5" "" "LW" "0.5" "" "C" "6" "" "" )
  5. );end prong
  6. (progn
  7. ((command "._linetype" "_load" "hidden2" "Acadiso.lin" ""); else
  8. (command "-layer" "M" "BOX" "L" "hidden2" "" "LW" "0.5" "" "C" "6" "" "" )
  9. );end progn
  10. )
  11. );end if

 
线型“DASHED2.5”优于标准线型“hidden2”
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:41:39 | 显示全部楼层
请参阅我的Load Linetypes功能。
回复

使用道具 举报

21

主题

155

帖子

135

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 18:44:14 | 显示全部楼层
 
你好,李
 
这需要添加很多代码
 
我的Lisp程序已经超过260行了,我希望能再短一点
 
另外,我不完全理解你的代码,因为它没有注释
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:47:36 | 显示全部楼层
如果要测试激活图形中是否已定义线型,请使用:
  1. (if (tblsearch "ltype" "YourLinetypeHere")
  2.    ...
  3. )

“我的加载线型”功能包括两个选项,用于测试线型是否在*中定义。lin文件:LM:ltdefined-p函数将读取一个。具有给定文件名的lin文件,如果在文件中定义了具有提供名称的线型,则返回T。
 
或者,表达式:
  1. (vl-some
  2.   '(lambda ( lin )
  3.        (vl-catch-all-apply 'vla-load (list ltc typ lin))
  4.        (tblsearch "ltype" typ)
  5.    )
  6.    lst
  7. )

将在所有的集合上迭代。在所有支持文件搜索路径(已分配给变量“lst”)中找到lin文件,并将尝试从每个文件加载目标线型,如果成功,则停止。
回复

使用道具 举报

21

主题

155

帖子

135

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 18:49:28 | 显示全部楼层
Sooo,使用第一个选项如下:
 
  1. (defun c:test2 ()
  2. (setvar "Expert" 3)
  3. (if (tblsearch "ltype" "noddy")
  4. (progn
  5.         (command "._linetype" "_load" "Noddy" "Acadiso.lin" "")
  6.         (command "-layer" "M" "Big-Ears" "L" "Noddy" "" "LW" "0.5" "" "C" "6" "" "" )
  7. (princ "\n Linetype Noddy Loaded")         
  8. )
  9. (progn
  10.         (command "._linetype" "_load" "DASHED2.5" "Acadiso.lin" "")
  11.         (command "-layer" "M" "Big-Ears" "L" "DASHED2.5" "" "LW" "0.5" "" "C" "6" "" "" )
  12. (princ "\n Linetype DASHED2.5 Loaded")
  13. )
  14. )
  15. (setvar "Expert" 3)
  16. (princ)
  17. )

 
这似乎奏效了!
 
我希望我能更好地理解第二种选择
 
附言
 
实际上,我没有一个叫做Noddy的线型,这是一种将if语句转到“else”的好方法
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:53:13 | 显示全部楼层
请注意,表达式(tblsearch“ltype”“YourLinetypeHere”)将仅测试给定线型是否在活动图形中定义,而不会检查给定线型是否在中定义。lin文件(这似乎是您想要测试的,因为您随后将加载线型)。
回复

使用道具 举报

21

主题

155

帖子

135

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 18:57:19 | 显示全部楼层
真奇怪,李
 
因为我只是在一个没有加载线型的图形中运行它&lisp加载了它。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:03:49 | 显示全部楼层
 
您的代码当前设置为加载任何一种情况下的线型-简单来说,您的代码表示:
  1. IF Noddy linetype is already defined
  2. THEN:
  3.    Load Noddy linetype from acadiso.lin
  4.    Create Big-Ears layer and assign various properties
  5.    Print message
  6. ELSE:
  7.    Load DASHED2.5 linetype from acadiso.lin
  8.    Create Big-Ears layer and assign various properties
  9.    Print message
回复

使用道具 举报

21

主题

155

帖子

135

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 19:07:10 | 显示全部楼层
我懂了。。。
 
像这样的事情能解决吗?
 
  1. (vl-some
  2.   '(lambda ( lin )
  3.        (vl-catch-all-apply 'vla-load (list ltc typ lin))
  4.        (tblsearch "DASHED2.5" typ)
  5.    )
  6.    lst
  7. )
  8. (if (/= lst t)
  9. (progn
  10.     (vl-some
  11.    '(lambda ( lin )
  12.         (vl-catch-all-apply 'vla-load (list ltc typ lin))
  13.         (tblsearch "hidden2" typ)
  14.     )
  15.     lst
  16.    )
  17.       ;My create layer macro here for DASHED2.5
  18.    )
  19.     ;My create layer macro here for hidden2
  20. )
  21. (vl-load-com)
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:08:59 | 显示全部楼层
你需要回到IF工作原理的基础
 
如果事情是真的
做这行
如果不这样做
 
你对诺迪的寻找将返回False,因此运行IF的第二部分“else”
 
  1. (if (= (tblsearch "ltype" "noddy")T)
  2. (PRINC "LINE 1")
  3. (PRINC "LINE 2")
  4. )
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 13:16 , Processed in 0.385549 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表