明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2343|回复: 14

[提问] 论坛有没有能提取CAD文件的所有图层信息的lisp?

[复制链接]
发表于 2023-9-12 12:01:08 | 显示全部楼层 |阅读模式
论坛里边有没有能够提取当前打开CAD文件中的所有图层信息(图层名称、图层颜色、线型、线宽)并输出到当前CAD中的lisp?我再论坛上没找到,可能是我搜索的关键字不对,或者搜索方法不对,哪个大神帮忙指个路。
发表于 2023-9-19 10:26:11 | 显示全部楼层
chq168168 发表于 2023-9-15 08:50
大神为什么生成的下边这段程序转成VLX运行不了呢?是不是代码有个#ID跟#DEBUG变量,这俩变量没定义的原因 ...
  1. (DEFUN C:TC1 (/ LST N1 N2 N3 N4 LST1 ERR)
  2.   (SETQ        LST (LIST
  3.               (LIST '(0 . "LAYER")
  4.                     '(100 . "AcDbSymbolTableRecord")
  5.                     '(100 . "AcDbLayerTableRecord")
  6.                     '(2 . "0")
  7.                     '(70 . 0)
  8.                     '(62 . 7)
  9.                     '(6 . "Continuous")
  10.                     '(290 . 1)
  11.                     '(370 . -3)
  12.                    )
  13.               (LIST '(0 . "LAYER")
  14.                     '(100 . "AcDbSymbolTableRecord")
  15.                     '(100 . "AcDbLayerTableRecord")
  16.                     '(2 . "BEND")
  17.                     '(70 . 0)
  18.                     '(62 . 6)
  19.                     '(6 . "DASHED")
  20.                     '(290 . 1)
  21.                     '(370 . -3)
  22.                    )
  23.               (LIST '(0 . "LAYER")
  24.                     '(100 . "AcDbSymbolTableRecord")
  25.                     '(100 . "AcDbLayerTableRecord")
  26.                     '(2 . "HATCH")
  27.                     '(70 . 0)
  28.                     '(62 . 2)
  29.                     '(6 . "Continuous")
  30.                     '(290 . 1)
  31.                     '(370 . -3)
  32.                    )
  33.               (LIST '(0 . "LAYER")
  34.                     '(100 . "AcDbSymbolTableRecord")
  35.                     '(100 . "AcDbLayerTableRecord")
  36.                     '(2 . "MARK")
  37.                     '(70 . 0)
  38.                     '(62 . 3)
  39.                     '(6 . "Continuous")
  40.                     '(290 . 1)
  41.                     '(370 . -3)
  42.                    )
  43.               (LIST '(0 . "LAYER")
  44.                     '(100 . "AcDbSymbolTableRecord")
  45.                     '(100 . "AcDbLayerTableRecord")
  46.                     '(2 . "LH辅助图层")
  47.                     '(70 . 0)
  48.                     '(62 . 6)
  49.                     '(6 . "Continuous")
  50.                     '(290 . 1)
  51.                     '(370 . -3)
  52.                    )
  53.               (LIST '(0 . "LAYER")
  54.                     '(100 . "AcDbSymbolTableRecord")
  55.                     '(100 . "AcDbLayerTableRecord")
  56.                     '(2 . "LH图层")
  57.                     '(70 . 0)
  58.                     '(62 . 1)
  59.                     '(6 . "Continuous")
  60.                     '(290 . 1)
  61.                     '(370 . -3)
  62.                    )
  63.               (LIST '(0 . "LAYER")
  64.                     '(100 . "AcDbSymbolTableRecord")
  65.                     '(100 . "AcDbLayerTableRecord")
  66.                     '(2 . "DRAW")
  67.                     '(70 . 0)
  68.                     '(62 . 7)
  69.                     '(6 . "Continuous")
  70.                     '(290 . 1)
  71.                     '(370 . -3)
  72.                    )
  73.               (LIST '(0 . "LAYER")
  74.                     '(100 . "AcDbSymbolTableRecord")
  75.                     '(100 . "AcDbLayerTableRecord")
  76.                     '(2 . "細實線")
  77.                     '(70 . 0)
  78.                     '(62 . 2)
  79.                     '(6 . "Continuous")
  80.                     '(290 . 1)
  81.                     '(370 . 15)
  82.                    )
  83.             )
  84.   )
  85.   (setq        n1 0
  86.         n2 0
  87.         N3 0
  88.         n4 0
  89.   )
  90.   (FOREACH LST1        LST
  91.     (OR        (TBLSEARCH "LTYPE" (CDR (ASSOC 6 LST1)))
  92.         (VL-CATCH-ALL-APPLY
  93.           (QUOTE vla-Load)
  94.           (LIST        (vla-get-Linetypes
  95.                   (vla-get-ActiveDocument (vlax-get-acad-object))
  96.                 )
  97.                 (CDR (ASSOC 6 LST1))
  98.                 (FINDFILE "acad.lin")
  99.           )
  100.         )
  101.     )
  102.     (IF        (NOT (TBLSEARCH "LAYER" (CDR (ASSOC 2 LST1))))
  103.       (PROGN (IF (NOT (ENTMAKE LST1))
  104.                (SETQ N1 (+ 1 N1))
  105.                (SETQ N2 (+ 1 N2))
  106.              )
  107.       )
  108.       (PROGN
  109.         (IF (= X T)
  110.           (PROGN (SETQ OLDLST (ENTGET (TBLOBJNAME "layer" (CDR (ASSOC 2 LST1))))
  111.                        NDXF   (LIST 6 62 70 290 370)
  112.                  )
  113.                  (IF (= XX nil)
  114.                    (SETQ N4 (+ 1 N4))
  115.                  )
  116.                  (FOREACH I NDXF
  117.                    (SETQ
  118.                      OLDLST (SUBST (ASSOC I LST1) (ASSOC I OLDLST) OLDLST)
  119.                    )
  120.                  )
  121.                  (ENTMOD OLDLST)
  122.           )
  123.         )
  124.       )
  125.     )
  126.   )
  127.   (ALERT (STRCAT "\n 未新建图层" (RTOS N1 2 0) "个"))
  128.   (ALERT (STRCAT "\n 新建图层" (RTOS N2 2 0) "个"))
  129.   (PRINC)
  130. )



这是我用代码生成的lsp文件,不知道  你把个#debug  从哪来的
 楼主| 发表于 2023-9-15 08:50:57 | 显示全部楼层
本帖最后由 chq168168 于 2023-9-18 14:28 编辑

大神为什么生成的下边这段程序转成VLX运行不了呢?是不是代码有个#ID跟#DEBUG变量,这俩变量没定义的原因。
  1. (DEFUN C:TC1( / LST N1 N2 N3 N4 LST1 ERR)
  2. (SETQ LST (LIST   
  3. (LIST '(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")'(2 . "0")'(70 . 0)'(62 . 7)'(6 . "Continuous")'(290 . 1)'(370 . -3))
  4. (LIST '(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")'(2 . "00-标注")'(70 . 0)'(62 . 7)'(6 . "Continuous")'(290 . 1)'(370 . -3))
  5. (LIST '(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")'(2 . "00-新增")'(70 . 0)'(62 . 1)'(6 . "Continuous")'(290 . 1)'(370 . -3))
  6. (LIST '(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")'(2 . "01-加工")'(70 . 0)'(62 . 7)'(6 . "Continuous")'(290 . 1)'(370 . -3))
  7. ) )(setq n1 0 n2 0 N3 0 n4 0)(FOREACH LST1 LST
  8. (#DEBUG (#ID 2 58 30) (OR (#DEBUG (#ID 2 58 34) (TBLSEARCH "LTYPE" (#DEBUG (#ID 2 58 53) (CDR (#DEBUG (#ID 2 58 57) (ASSOC 6 LST1)))))) (#DEBUG (#ID 2 59 5) (VL-CATCH-ALL-APPLY (QUOTE vla-Load) (#DEBUG (#ID 2 61 7) (LIST (#DEBUG (#ID 2 61 13) (vla-get-Linetypes (#DEBUG (#ID 2 62 15) (vla-get-ActiveDocument (#DEBUG (#ID 2 62 39) (vlax-get-acad-object)))))) (#DEBUG (#ID 2 64 13) (CDR (#DEBUG (#ID 2 64 17) (ASSOC 6 LST1)))) (#DEBUG (#ID 2 65 13) (FINDFILE "acad.lin"))))))))
  9. (#DEBUG (#ID 2 75 8) (IF (#DEBUG (#ID 2 75 12) (NOT (#DEBUG (#ID 2 75 17) (TBLSEARCH "LAYER" (#DEBUG (#ID 2 75 36) (CDR (#DEBUG (#ID 2 75 41) (ASSOC 2 LST1)))))))) (#DEBUG (#ID 2 76 10) (PROGN (#DEBUG (#ID 2 76 17) (IF (#DEBUG (#ID 2 76 20) (NOT (#DEBUG (#ID 2 76 24) (ENTMAKE LST1)))) (#DEBUG (#ID 2 78 12) (SETQ N1 (#DEBUG (#ID 2 78 21) (+ 1 N1)))) (#DEBUG (#ID 2 79 12) (SETQ N2 (#DEBUG (#ID 2 79 21) (+ 1 N2)))))))) (#DEBUG (#ID 2 80 10) (PROGN (#DEBUG (#ID 2 81 12) (IF (#DEBUG (#ID 2 81 16) (= X T)) (#DEBUG (#ID 2 82 14) (PROGN (#DEBUG (#ID 2 83 16) (SETQ OLDLST (#DEBUG (#ID 2 83 29) (ENTGET (#DEBUG (#ID 2 83 37) (TBLOBJNAME "layer" (#DEBUG (#ID 2 83 57) (CDR (#DEBUG (#ID 2 83 62) (ASSOC 2 LST1)))))))) NDXF (#DEBUG (#ID 2 84 29) (LIST 6 62 70 290 370)))) (#DEBUG (#ID 2 88 16) (IF (#DEBUG (#ID 2 88 20) (= XX nil)) (#DEBUG (#ID 2 88 30) (SETQ N4 (#DEBUG (#ID 2 88 39) (+ 1 N4)))))) (#DEBUG (#ID 2 89 16) (FOREACH I NDXF (#DEBUG (#ID 2 90 18) (SETQ OLDLST (#DEBUG (#ID 2 91 25) (SUBST (#DEBUG (#ID 2 91 32) (ASSOC I LST1)) (#DEBUG (#ID 2 91 47) (ASSOC I OLDLST)) OLDLST)))))) (#DEBUG (#ID 2 94 16) (ENTMOD OLDLST))))))))))
  10. )
  11. (#DEBUG (#ID 2 107 14) (ALERT (#DEBUG (#ID 2 107 21) (STRCAT "\n 未新建图层" (#DEBUG (#ID 2 107 38) (RTOS N1 2 0)) "个"))))
  12. (#DEBUG (#ID 2 110 13) (ALERT (#DEBUG (#ID 2 110 20) (STRCAT "\n 新建图层" (#DEBUG (#ID 2 110 37) (RTOS N2 2 0)) "个"))))
  13. (PRINC ) )
发表于 2023-9-12 12:25:31 | 显示全部楼层
本帖最后由 vitalgg 于 2023-9-12 12:28 编辑

  1. (mapcar '(lambda(x)
  2.           (list
  3.            (entity:getdxf  x 2)
  4.            (entity:getdxf  x 62)
  5.            (entity:getdxf  x 6)
  6.            (if (> (entity:getdxf  x 370) 0)
  7.                (* 0.01 (entity:getdxf  x 370))
  8.                0)))
  9.         (mapcar 'layer:ent (layer:list)))



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-9-12 12:41:51 | 显示全部楼层
发表于 2023-9-12 13:08:51 | 显示全部楼层
  1. (defun LayerList (/ lst d la)
  2.   "LayerList 图层名称、图层颜色、线型、打印、线宽表 (LayerList)"
  3.   (while (setq d (tblnext "layer" (null d)))
  4.     (setq lst (cons (entget (tblobjname "layer" (setq la (cdr (assoc 2 d))))) lst))
  5.   )
  6.   (mapcar '(lambda (x) (mapcar 'cdr (vl-remove-if-not '(lambda (a) (member (car a) '(2 62 6 290 370))) x))) (reverse lst))
  7. )
发表于 2023-9-12 13:37:04 | 显示全部楼层
 楼主| 发表于 2023-9-12 14:39:44 | 显示全部楼层
liuhe 发表于 2023-9-12 12:41
http://bbs.mjtd.com/thread-186295-1-1.html

部分有用

非常好,我提取了下图层,然后自动创建了个图层生成lisp。我把lisp文件用作创建图层的子程序。非常实用谢谢大神。
 楼主| 发表于 2023-9-12 14:41:41 | 显示全部楼层
aggdqty 发表于 2023-9-12 13:37
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=188260&highlight=%CD%BC%B2%E3

谢谢,我用楼上liuhe大神的那个代码能满足我的使用
 楼主| 发表于 2023-9-12 14:46:07 | 显示全部楼层
发表于 2023-9-12 20:23:11 | 显示全部楼层
liuhe 发表于 2023-9-12 12:41
http://bbs.mjtd.com/thread-186295-1-1.html

部分有用

非常好用。想法也挺好的,感谢分享
 楼主| 发表于 2023-9-13 16:30:59 | 显示全部楼层
liuhe 发表于 2023-9-12 12:41
http://bbs.mjtd.com/thread-186295-1-1.html

部分有用

标注样式是否可以提取出来更改成lisp文件?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-17 06:53 , Processed in 0.212960 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表