乐筑天下

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

[编程交流] 使用lisp修改图层

[复制链接]

3

主题

7

帖子

4

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 15:24:38 | 显示全部楼层 |阅读模式
对不起,如果这一切都已经准备好处理,但我找不到任何东西时,我做了搜索。
使用2008年和目前获得的所有图层(约60)具有相同的笔颜色、线型和厚度的图纸。
因此,所有线路都是相同的。
由于我从这个partiuclur源获得的所有图形都具有相同的图层和图层名称,我认为可能会有一个lisp例程,它将笔的颜色、线型和厚度更改为预先确定的值,这样我就可以用新的图层值保存图形。
你可以假设一个particluer层名称是“water\u tap”,这样我就可以看到例程中发生了什么,然后我可以通过复制所有其他层名称的相关代码,在例程中添加所有需要更改的其他层名称。
希望这有意义。
当做
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:34:30 | 显示全部楼层
这可能与:
http://www.cadtutor.net/forum/showthread.php?t=30508
 
看看这是否有点帮助。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:46:41 | 显示全部楼层
我确信还有比这更好的方法,但我正在试验mapcar。。
 
  1. ; w ~ layer name
  2. ; x ~ layer colour
  3. ; y ~ linetype
  4. ; z ~ lineweight (0 - 2.11)
  5. (defun laychng (w x y z)
  6.    (if    (not (tblsearch "Layer" w))
  7.    (progn
  8.        (setvar "cmdecho" 0)
  9.        (command "-layer" "m" w "c" x w "lt" y w "lw" z w "")
  10.        (setvar "cmdecho" 1)
  11.    ) ;_  end progn
  12.    (progn
  13.        (setvar "cmdecho" 0)
  14.        (command "-layer" "c" x w "lt" y w "lw" z w "")
  15.        (setvar "cmdecho" 1)
  16.    ) ;_  end progn
  17.    ) ;_  end if
  18.    (princ)
  19. ) ;_  end defun
  20. (defun c:layerchanger ()
  21.    (mapcar
  22.    'laychng
  23.    '("water_tap" "B-layer" "C-layer" "D-layer" "E-layer") ; w
  24.    '("1" "2" "3" "4" "5") ; x
  25.    '("HIDDEN" "HIDDEN" "HIDDEN" "HIDDEN" "HIDDEN") ; y
  26.    '("0.2" "0.3" "0.8" "1.5" "2.1") ; z
  27.       ) ;_  end mapcar
  28.    (princ)
  29. ) ;_  end defun
回复

使用道具 举报

3

主题

7

帖子

4

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 15:51:51 | 显示全部楼层
谢谢你这么快回复我。
有没有办法重写代码,使每一层都有自己的代码行来更改笔的颜色、线宽和线型,以便更容易修改某一层(例如第34层)
 
如果我没看错的话
“(“water_tap”“B-layer”“C-layer”“D-layer”“E-layer”);w
'("1" "2" "3" "4" "5") ; x
“(HIDDEN”“HIDDEN”“HIDDEN”“HIDDEN”“HIDDEN”);y
'("0.2" "0.3" "0.8" "1.5" "2.1") ; z
 
我必须沿着直线数到第34位才能更改单个参数。
这有意义吗?
 
当做
亨利
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:01:05 | 显示全部楼层
我知道你来自哪里,我意识到这不是最好的方式,但正如我所说,我想试试mapcar
 
试试这个
 
  1. ; w ~ layer name
  2. ; x ~ colour
  3. ; y ~ linetype
  4. ; z ~ lineweight
  5. (defun c:test (/ *error* varlist oldvars)
  6.    (defun *error* (msg)
  7.    (mapcar 'setvar varlist oldvars)
  8.    (if (= msg "")
  9.        (princ "\nFunction Complete.")
  10.        (princ "\nError or Esc Pressed.")
  11.    ) ;_  end if
  12.    (princ)
  13.    ) ;_  end defun
  14.    (setq varlist (list "CMDECHO" "CLAYER")
  15.      oldvars (mapcar 'getvar varlist)
  16.    ) ;_  end setq
  17.    (setvar "cmdecho" 0)
  18.    (defun chnglay (w x y z)
  19.    (if (not (tblsearch "Layer" w))
  20.        (command "-layer" "m" w "c" x w "lt" y w "lw" z w "")
  21.        (command "-layer" "c" x w "lt" y w "lw" z w "")
  22.    ) ;_  end if
  23.    (princ)
  24.    ) ;_  end defun
  25.    [color=Red][b](chnglay "water_tap" "2" "Hidden" "1.5")[/b][/color]
  26.    (*error* "")
  27.    (princ)
  28. ) ;_  end defun

 
添加更多线,如高亮显示的示例,以更改更多层。
回复

使用道具 举报

3

主题

7

帖子

4

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 16:08:55 | 显示全部楼层
好极了,好极了,好极了。。。。。但我有一个问题。
因为我有大约20层,从单词water开始(例如water\u tap、water\u hose、water\u conn等)
lisp是否具有等价的通配符,例如wat*
因此,你可以用一行文字来改变20层,而不是用20行文字来改变20层
因为我对所有以水开始的层都有相同的属性,所以在本例中,1行文本可以更改为20。
希望这有意义
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:14:41 | 显示全部楼层
试试这个:
 
  1. ; w ~ layer name
  2. ; x ~ colour
  3. ; y ~ linetype
  4. ; z ~ lineweight
  5. (defun c:test (/ *error* varlist oldvars)
  6.    (defun *error* (msg)
  7.    (mapcar 'setvar varlist oldvars)
  8.    (if (= msg "")
  9.        (princ "\nFunction Complete.")
  10.        (princ "\nError or Esc Pressed.")
  11.    ) ;_  end if
  12.    (princ)
  13.    ) ;_  end defun
  14.    (setq varlist (list "CMDECHO" "CLAYER")
  15.      oldvars (mapcar 'getvar varlist)
  16.    ) ;_  end setq
  17.    (setvar "cmdecho" 0)
  18.    (defun chnglay (w x y z)
  19.    (if (not (tblsearch "Layer" w))
  20.        (command "-layer" "m" w "c" x w "lt" y w "lw" z w "")
  21.        (command "-layer" "c" x w "lt" y w "lw" z w "")
  22.    ) ;_  end if
  23.    (princ)
  24.    ) ;_  end defun
  25.    (defun GetLayerList    ()
  26.    (vl-load-com)
  27.    (vlax-for l
  28.            (vla-get-Layers
  29.            (vla-get-ActiveDocument
  30.                (vlax-get-acad-object)
  31.            ) ;_  end vla-get-ActiveDocument
  32.            ) ;_  end vla-get-Layers
  33.        (setq oLst
  34.             (cons (vla-get-Name l) oLst)
  35.        ) ; end setq
  36.    ) ; end vlax-for
  37.    (reverse oLst)
  38.    ) ; end of GetLayerList
  39.    (GetLayerList)
  40.    (if    (= oLst nil)
  41.    (alert "No Layers Retrieved.")
  42.    ) ;_  end if
  43.    [b][color=Red](foreach lay oLst
  44.    (if (wcmatch lay "wat*")
  45.        (chnglay lay "2" "Hidden" "1.5")
  46.    ) ;_  end if
  47.    ) ;_  end foreach[/color][/b]
  48.    (*error* "")
  49.    (princ)
  50. ) ;_  end defun

 
添加额外代码,如为不同的通配符匹配突出显示的代码。
回复

使用道具 举报

3

主题

7

帖子

4

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 16:21:26 | 显示全部楼层
谢谢李。。。。在你的上一篇文章和前一篇文章之间,我想出了一个宏,它完全符合我的要求。
我迫不及待地开始学习lisp,希望我能创建自己的基本例程。
祝你新年快乐。
 
我很快就会发布一篇关于插入区块的新帖子。希望你能再次帮助我。
 
 
当做
亨利·约翰
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:28:17 | 显示全部楼层
欢迎你,亨利,很高兴你能解决你的问题。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 19:25 , Processed in 1.151778 second(s), 70 queries .

© 2020-2025 乐筑天下

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