乐筑天下

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

[编程交流] 检查/创建图层问题

[复制链接]

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 14:28:45 | 显示全部楼层 |阅读模式
我想做一个惯例:
 
1.检查线型是否已加载,如果未加载,则应加载,如果是,则确定
 
2.检查层是否存在,如果没有创建(具有特定颜色和线型),如果是,则将其设置为当前。
 
这是我的代码:
 
  1. (defun c:test ( / ltname layname laycol cmdold) ; functie definitie
  2. (setq ltname "center"  ; defines linetypename
  3. layname "test"   ; defines layername
  4. laycol 8   ; defines layer color
  5. cmdold (getvar "cmdecho")
  6. )     ; end setq
  7. (setvar "cmdecho" 0   ; no following by F2
  8. )     ; end setvar
  9. (if (= (tblsearch "ltype" ltname) nil)
  10. (command "linetype" "l" ltname "acad.lin" "")
  11. )
  12. (if (= (tblsearch "layer" layname))
  13. (command "layer" "s" layname "")
  14. (command "layer" "m" layname "l" ltname "" "c" laycol "" "")
  15. )
  16. (setvar "cmdecho" cmdold); cmdecho back to what it was
  17. (princ); Exit cleanly
  18. ); end of defun

 
问题是当层存在时,它不会将其设置为当前。。。
 
我离我相信的解决方案只有一英寸远。。。。但我做不到。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:33:36 | 显示全部楼层
如果您还想走这条路线,我提供了一个VL选项:
 
  1. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:test [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] ltname layname laycol cmdold lay[b][color=RED])[/color][/b]
  2. [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
  3. [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ltname [b][color=#ff00ff]"center"[/color][/b]
  4.        layname [b][color=#ff00ff]"test"[/color][/b]
  5.        laycol [b][color=#009900]8[/color][/b]
  6.        cmdold [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=#ff00ff]"CMDECHO"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  7. [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=#ff00ff]"CMDECHO"[/color][/b] [b][color=#009900]0[/color][/b][b][color=RED])[/color][/b]
  8. [i][color=#990099];; Loading Linetype  ~ Another option to consider:[/color][/i]
  9. [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]tblsearch[/color][/b] [b][color=#ff00ff]"LTYPE"[/color][/b] ltname[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  10.    [b][color=RED]([/color][/b][b][color=BLUE]vla-load[/color][/b]
  11.      [b][color=RED]([/color][/b][b][color=BLUE]vla-get-Linetypes[/color][/b]
  12.        [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveDocument[/color][/b]
  13.          [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] ltname [b][color=#ff00ff]"acad.lin"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  14. [i][color=#990099];; Layer Checking & Creation[/color][/i]
  15. [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]tblsearch[/color][/b] [b][color=#ff00ff]"LAYER"[/color][/b] layname[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  16.    [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b] [b][color=#ff00ff]"_.-layer"[/color][/b] [b][color=#ff00ff]"_M"[/color][/b] layname [b][color=#ff00ff]"_L"[/color][/b] ltname layname [b][color=#ff00ff]"_C"[/color][/b] laycol layname [b][color=#ff00ff]""[/color][/b][b][color=RED])[/color][/b]
  17.    [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=#ff00ff]"CLAYER"[/color][/b] layname[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  18. [i][color=#990099];; Another Option for Layer Creation to Consider:[/color][/i]
  19. [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]tblsearch[/color][/b] [b][color=#ff00ff]"LAYER"[/color][/b] layname[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  20.    [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
  21.      [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] lay [b][color=RED]([/color][/b][b][color=BLUE]vla-add[/color][/b]
  22.                  [b][color=RED]([/color][/b][b][color=BLUE]vla-get-layers[/color][/b]
  23.                    [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveDocument[/color][/b]
  24.                      [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] layname[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  25.      [b][color=RED]([/color][/b][b][color=BLUE]vla-put-color[/color][/b] lay laycol[b][color=RED])[/color][/b]
  26.      [b][color=RED]([/color][/b][b][color=BLUE]vla-put-linetype[/color][/b] lay ltname[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  27. [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=#ff00ff]"CLAYER"[/color][/b] layname[b][color=RED])[/color][/b]
  28. [i][color=#990099];; Reset CMDECHO[/color][/i]
  29. [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=#ff00ff]"CMDECHO"[/color][/b] cmdold[b][color=RED])[/color][/b]
  30. [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  31.             
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 14:37:17 | 显示全部楼层
李,
 
虽然我没有得到代码,但它工作正常。这太过分了,所以让我们把这部分留给它是什么。
 
此示例(测试lsp)适用于1层、1线型和1种颜色。
我想知道它是否可以制作成多层。不是以我现在的方式,那是错误的,很明显!
 
我复制代码10次,并将c:test更改为c:test1 c:test2等。然后根据函数修改名称。
对于特定层的test1调用,我不知道如何执行其他操作。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:39:37 | 显示全部楼层
代码没有那么复杂的解释-我可以尝试回答任何问题,你可能有关于它。
 
对于多层、颜色等-将层函数变成子函数,并用多个参数调用它:
 
  1. (defun mklay (layname laycol ltname / lay)
  2. (vl-load-com)
  3. ;; Loading Linetype  ~ Another option to consider:
  4. (if (not (tblsearch "LTYPE" ltname))
  5.    (vla-load
  6.      (vla-get-Linetypes
  7.        (vla-get-ActiveDocument
  8.          (vlax-get-acad-object))) ltname "acad.lin"))
  9. ;; Another Option for Layer Creation to Consider:
  10. (if (not (tblsearch "LAYER" layname))
  11.    (progn
  12.      (setq lay (vla-add
  13.                  (vla-get-layers
  14.                    (vla-get-ActiveDocument
  15.                      (vlax-get-acad-object))) layname))
  16.      (vla-put-color lay laycol)
  17.      (vla-put-linetype lay ltname)))
  18. (setvar "CLAYER" layname))
  19. (defun c:test ()
  20. (mapcar 'mklay
  21.          '("test1" "test2" "test3")
  22.          '(8 3 4)
  23.          '("CENTER" "HIDDEN" "CONTINUOUS"))
  24. (princ))

 
这将形成三层:
 
测试1——颜色8——中心
测试2——颜色3——隐藏
测试3——颜色4——连续
 
希望这有帮助,
 
回复

使用道具 举报

15

主题

209

帖子

121

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
163
发表于 2022-7-6 14:42:29 | 显示全部楼层
这是我一直使用的线型加载子对象,以及辅助子对象。
 
只要给它一个线型名称,它就会搜索每一个。林文件在您的搜索路径,如果它找到它,它会被加载。
 
我想对其执行的唯一操作是,如果提供了路径,则直接加载线型。
STDLIB_LOAD_线型。lsp
STDLIB_函数。lsp
回复

使用道具 举报

12

主题

57

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 14:46:35 | 显示全部楼层
这里有一个我使用它清除所有未使用的层,然后创建我使用的10层。您可以根据自己的喜好修改图层名称,并且可以在dolayers命令的末尾进行修改以将图层设置为当前图层。
 
(setvar“clayer”“在此插入层名称”)
 
我知道它的rokkie编程,但它对我来说很管用。我用它来确保我们所有的图纸都有相同的图层,因为我是这里的第四个绘图员,我们有很多不同的图纸。
 
哦,谢谢李,我在他的一个命令中看到了类似的东西,所以我只是做了一些修改。
 
  1. (defun createlayer (NAME)
  2. (if
  3. (not (tblsearch "LAYER" NAME))
  4. (command "-layer" "m" "CEN" "C" "6" "CEN" "L" "CENTER" "CEN" "LW" "0.18" "CEN" "")
  5. )
  6. (if
  7. (not (tblsearch "LAYER" NAME))
  8. (command "-layer" "m" "DIMS" "C" "1" "DIMS" "LW" "0.18" "DIMS" "")
  9. )
  10. (if
  11. (not (tblsearch "LAYER" NAME))
  12. (command "-layer" "m" "HAT" "C" "3" "HAT" "LW" "0.18" "HAT" "")
  13. )
  14. (if
  15. (not (tblsearch "LAYER" NAME))
  16. (command "-layer" "m" "HID" "C" "4" "HID" "L" "HIDDEN" "HID" "LW" "0.15" "HID" "")
  17. )
  18. (if
  19. (not (tblsearch "LAYER" NAME))
  20. (command "-layer" "m" "LOGO" "C" "176" "LOGO" "LW" "0.09" "" "")
  21. )
  22. (if
  23. (not (tblsearch "LAYER" NAME))
  24. (command "-layer" "m" "OBJ" "C" "2" "OBJ" "LW" "0.40" "OBJ" "")
  25. )
  26. (if
  27. (not (tblsearch "LAYER" NAME))
  28. (command "-layer" "m" "PAPER" "C" "5" "PAPER" "L" "PHANTOM" "PAPER" "P" "N" "PAPER" "")
  29. )
  30. (if
  31. (not (tblsearch "LAYER" NAME))
  32. (command "-layer" "m" "PHAN" "C" "6" "PHAN" "L" "PHANTOM" "PHAN" "LW" "0.18" "PHAN" "")
  33. )
  34. (if
  35. (not (tblsearch "LAYER" NAME))
  36. (command "-layer" "m" "TITLE" "C" "176" "TITLE" "")
  37. )
  38. (if
  39. (not (tblsearch "LAYER" NAME))
  40. (command "-layer" "m" "TXT" "C" "7" "" "")
  41. )
  42. )
  43. (defun c:dolayers ()
  44. (setvar "cmdecho" 0)
  45. (purgelayers)
  46. (mapcar 'createlayer '("CEN" "DIMS" "HAT" "HID" "LOGO" "OBJ" "PAPER" "PHAN" "TITLE" "TXT"))
  47. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:49:10 | 显示全部楼层
 
Bradb,
 
按照调用子函数的方式,每个语句都独立于提供的参数。一、 e.对于每个不存在的层,每个IF语句都将返回T。
回复

使用道具 举报

12

主题

57

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 14:51:41 | 显示全部楼层
 
啊,这是因为我在创建层之前清除了所有层。我最初希望它搜索层,然后重命名它们。例如,搜索对象和对象。对象重命名为OBJ。如果OBJ,那么什么也不会发生,但如果两者都不存在,那么就创建OBJ。
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 14:56:21 | 显示全部楼层
您应该只对一个参数进行一次表搜索,并使用条件生成层。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:59:48 | 显示全部楼层
不,这是因为您为每个IF语句提供了相同的参数。
 
这更好(更快):
 
  1. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] MkLay [b][color=RED]([/color][/b]Nme Col lTyp lWgt Plt [b][color=BLUE]/[/color][/b] lay[b][color=RED])[/color][/b]
  2. [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
  3. [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] lay
  4.    [b][color=RED]([/color][/b][b][color=BLUE]vla-add[/color][/b]
  5.      [b][color=RED]([/color][/b][b][color=BLUE]vla-get-layers[/color][/b]
  6.        [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveDocument[/color][/b]
  7.          [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] Nme[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  8. [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] Col [b][color=RED]([/color][/b][b][color=BLUE]vla-put-Color[/color][/b] lay Col[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  9. [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] lTyp [b][color=RED]([/color][/b][b][color=BLUE]vla-put-Linetype[/color][/b] lay lTyp[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  10. [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] lWgt [b][color=RED]([/color][/b][b][color=BLUE]vla-put-LineWeight[/color][/b] lay lWgt[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  11. [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] Plt[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-put-Plottable[/color][/b] lay [b][color=Blue]:vlax-false[/color][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  12. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:DoLayers [b][color=RED]([/color][/b][b][color=RED])[/color][/b]
  13. [b][color=RED]([/color][/b]purgelayers[b][color=RED])[/color][/b]
  14. [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b]MkLay
  15.          [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b] [b][color=#ff00ff]"CEN"[/color][/b]   [b][color=#ff00ff]"DIMS"[/color][/b] [b][color=#ff00ff]"HAT"[/color][/b]  [b][color=#ff00ff]"HID"[/color][/b]   [b][color=#ff00ff]"LOGO"[/color][/b] [b][color=#ff00ff]"OBJ"[/color][/b]  [b][color=#ff00ff]"PAPER"[/color][/b]   [b][color=#ff00ff]"PHAN"[/color][/b]   [b][color=#ff00ff]"TITLE"[/color][/b] [b][color=#ff00ff]"TXT"[/color][/b][b][color=RED])[/color][/b]  [i][color=#990099]; Name[/color][/i]
  16.          [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b]   [b][color=#009900]6[/color][/b]       [b][color=#009900]1[/color][/b]      [b][color=#009900]3[/color][/b]      [b][color=#009900]4[/color][/b]       [b][color=#009900]176[/color][/b]    [b][color=#009900]2[/color][/b]       [b][color=#009900]5[/color][/b]         [b][color=#009900]6[/color][/b]       [b][color=#009900]176[/color][/b]     [b][color=#009900]7[/color][/b]  [b][color=RED])[/color][/b]  [i][color=#990099]; Colours[/color][/i]
  17.          [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#ff00ff]"CENTER"[/color][/b]  [b][color=BLUE]nil[/color][/b]    [b][color=BLUE]nil[/color][/b]  [b][color=#ff00ff]"HIDDEN"[/color][/b]   [b][color=BLUE]nil[/color][/b]   [b][color=BLUE]nil[/color][/b]  [b][color=#ff00ff]"PHANTOM"[/color][/b] [b][color=#ff00ff]"PHANTOM"[/color][/b]   [b][color=BLUE]nil[/color][/b]    [b][color=BLUE]nil[/color][/b] [b][color=RED])[/color][/b]  [i][color=#990099]; LineType[/color][/i]
  18.          [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b]  [b][color=#009999]0.18[/color][/b]   [b][color=#009999]0.18[/color][/b]   [b][color=#009999]0.18[/color][/b]    [b][color=#009999]0.15[/color][/b]    [b][color=#009999]0.09[/color][/b]  [b][color=#009999]0.40[/color][/b]     [b][color=BLUE]nil[/color][/b]      [b][color=#009999]0.18[/color][/b]      [b][color=BLUE]nil[/color][/b]    [b][color=BLUE]nil[/color][/b] [b][color=RED])[/color][/b]  [i][color=#990099]; LineWeight[/color][/i]
  19.          [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b]   [b][color=BLUE]T[/color][/b]       [b][color=BLUE]T[/color][/b]      [b][color=BLUE]T[/color][/b]      [b][color=BLUE]T[/color][/b]        [b][color=BLUE]T[/color][/b]     [b][color=BLUE]T[/color][/b]      [b][color=BLUE]nil[/color][/b]        [b][color=BLUE]T[/color][/b]        [b][color=BLUE]T[/color][/b]      [b][color=BLUE]T[/color][/b]  [b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Plottable (T or nil)[/color][/i]
  20. [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  21.          

我不确定你的“purgelayers”函数做什么,但也许我也可以改进一下
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 00:00 , Processed in 0.429320 second(s), 72 queries .

© 2020-2025 乐筑天下

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