乐筑天下

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

[编程交流] 在多个Dra中列出图层

[复制链接]

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 16:31:44 | 显示全部楼层 |阅读模式
我需要一个程序,可以给我一个在多个图形中存在的所有图层列表。
有人知道这样的节目吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:38:36 | 显示全部楼层
以下是获取层列表的三种不同方法:
 
  1. (defun GetLayers1 (/ lst)
  2. (vlax-map-collection
  3.    (vla-get-Layers
  4.      (vla-get-ActiveDocument
  5.        (vlax-get-acad-object)))
  6.    (function (lambda (x) (setq lst (cons (vla-get-name x) lst)))))
  7. lst)
  1. (defun GetLayers2 (/ tdef lst)
  2. (while (setq tdef (tblnext "LAYER" (not tdef)))
  3.    (setq lst (cons (cdr (assoc 2 tdef)) lst)))
  4. lst)
  1. (defun GetLayers3 (/ lst)
  2. (vlax-for lay (vla-get-Layers
  3.                  (vla-get-ActiveDocument
  4.                    (vlax-get-acad-object)))
  5.    (setq lst (cons (vla-get-name lay) lst)))
  6. lst)

 
有趣的速度结果:
 
  1. Elapsed milliseconds / relative speed for 4096 iteration(s):
  2.    (GETLAYERS3).....1123 / 1.40 <fastest>
  3.    (GETLAYERS1).....1264 / 1.25
  4.    (GETLAYERS2).....1576 / 1.00 <slowest>

 
当你说从多个图形中获取列表时,你到底在寻找什么?命令行中的列表?通过脚本/ObjectDBX运行多个图形?所有打开的图纸?
 
 
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 16:43:52 | 显示全部楼层
这是我的问题。。。我有一个文件夹,里面装满了我需要查看的图纸,以确保每个图纸都有正确的图层,每个图层都有正确的属性。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:47:53 | 显示全部楼层
 
ObjectDBX将是最快的方法,我认为您需要制作一个包含“正确”值的表来进行检查。
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 16:51:33 | 显示全部楼层
 
 
考虑到我需要浏览的图形数量和每个图形中的图层数量,我认为制作一个包含正确值的表格将非常耗时。我以为项目经理有能力告诉我什么图纸中有哪些层,但我不相信它有能力。我有点想找一个程序,类似于项目经理,但这给了我每个图形中的图层和图层属性。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:56:21 | 显示全部楼层
 
但是,你必须仔细查看每个列表,以确保它是正确的。。。
 
当然,最好为每一层准备一个正确属性的表格,然后列出不符合表格的图纸。。
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 16:59:58 | 显示全部楼层
 
 
我同意你的观点,但是我在最后一分钟试图完成这个图层检查,这次我真的没有时间制作一个正确属性的表。我正在寻找一个可能的快速解决方案,并计划在有更多时间时找到一个更可行的解决方案。不幸的是,这是在最后一刻强加给我的。
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 17:04:20 | 显示全部楼层
我正在考虑找到一个命令,该命令可以为每个图形创建一个列表,并在脚本中使用它,使用EZ script Pro之类的批处理运行程序来运行它。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:09:11 | 显示全部楼层
尝试此配对,将结果写入输出文件:
 
  1. (defun c:CheckLayers (/ *error* ObjRelease DirDialog Get_Subs ObjectDBXDocument GetLayers
  2.                        DBX DWLST FILE FOLDER LAYER_LIST PATH SHELL)
  3. (vl-load-com)
  4. ;; Lee Mac  ~  15.01.10
  5. (defun *error* (msg)
  6.    (ObjRelease (list Shell dbx))
  7.    (and ofile (= (type ofile) 'FILE) (close ofile))
  8.    
  9.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  10.        (princ (strcat "\n** Error: " msg " **")))
  11.    (princ))
  12. (defun ObjRelease (lst)
  13.    (mapcar
  14.      (function
  15.        (lambda (x)
  16.          (if (and (eq (type x) 'VLA-OBJECT)
  17.                   (not (vlax-object-released-p x)))
  18.            (vl-catch-all-apply
  19.              (function vlax-release-object) (list x))))) lst))
  20. (defun DirDialog (msg dir flag / Shell Fold Path)
  21.    ;; Lee Mac  ~  07.06.09
  22.    
  23.    (setq Shell (vla-getInterfaceObject *acad "Shell.Application")
  24.          Fold  (vlax-invoke-method Shell 'BrowseForFolder
  25.                  (vla-get-HWND *acad) msg flag dir))
  26.    (vlax-release-object Shell)
  27.    
  28.    (if Fold
  29.      (progn
  30.        (setq Path (vlax-get-property
  31.                     (vlax-get-property Fold 'Self) 'Path))
  32.        (vlax-release-object Fold)
  33.       
  34.        (and (= "\" (substr Path (strlen Path)))
  35.             (setq Path (substr Path 1 (1- (strlen Path)))))))
  36.    
  37.    Path)
  38. (defun Get_Subs (folder / file) ;; CAB
  39.    (mapcar
  40.      (function
  41.        (lambda (x) (setq file (strcat folder "\" x))
  42.                    (cons file (apply (function append) (get_subs file)))))
  43.        (cddr (vl-directory-files folder nil -1))))
  44. (defun ObjectDBXDocument (/ acVer)
  45.    
  46.    (vla-GetInterfaceObject *acad
  47.      (if (< (setq acVer (atoi (getvar "ACADVER"))) 16) "ObjectDBX.AxDbDocument"
  48.        (strcat "ObjectDBX.AxDbDocument." (itoa acVer)))))
  49. (defun GetLayers (doc / lst)
  50.    (vlax-for lay (vla-get-Layers doc)
  51.      (setq lst (cons (vla-get-name lay) lst)))
  52. (acad_strlsort lst))
  53. (setq *acad (cond (*acad) ((vlax-get-acad-object)))
  54.        *doc  (cond (*doc ) ((vla-get-ActiveDocument *acad))))
  55. (or *def* (setq *def* "Yes"))
  56. (if (and (setq Path (DirDialog "Select Directory" nil 0))
  57.           (vl-file-directory-p Path)
  58.           (setq outfile (getfiled "Output File" "" "txt" 1)))
  59.    (progn
  60.      (initget "Yes No")
  61.      (setq *def* (cond ((getkword
  62.                           (strcat "\nProcess SubDirectories? <" *def* "> : "))) (*def*)))
  63.      (princ "\n>> Processing...")
  64.      (foreach dwg  (setq dwLst (apply (function append)
  65.                                       (vl-remove 'nil
  66.                                         (mapcar
  67.                                           (function
  68.                                             (lambda (Path)
  69.                                               (mapcar
  70.                                                 (function
  71.                                                   (lambda (File)
  72.                                                     (strcat Path "\" File)))
  73.                                                 (vl-directory-files Path "*.dwg" 1))))
  74.                                           (append (list Path)
  75.                                                   (apply (function append)
  76.                                                          (if (= "YES" (strcase *def*))
  77.                                                            (Get_Subs Path))))))))      
  78.        (vlax-for doc (vla-get-Documents *acad)
  79.          (and (eq (strcase (vla-get-fullname doc)) (strcase dwg))
  80.               (setq dbx doc)))
  81.        (and (not dbx) (setq dbx (ObjectDBXDocument)))
  82.       
  83.        (if (not (vl-catch-all-error-p
  84.                    (vl-catch-all-apply
  85.                      (function vla-open) (list dbx dwg))))
  86.          (progn
  87.            (princ (chr 46))
  88.            (setq Layer_List (cons (cons dwg (GetLayers dbx)) Layer_List))
  89.          ) ; Progn
  90.        ))
  91.      (princ (strcat "\n<< " (itoa (length dwLst)) " Drawings Processed >>")))
  92.    
  93.    (princ "*Cancel*"))
  94. (ObjRelease (list Shell dbx)) (gc) (gc)
  95. (if (and Layer_List
  96.          (setq ofile (open outfile "w")))
  97.    (progn
  98.      
  99.      (mapcar
  100.        (function
  101.          (lambda (x)
  102.            (write-line (car x) ofile)
  103.            (mapcar
  104.              (function
  105.                (lambda (y)
  106.                  (write-line y ofile))) (cdr x))
  107.            (write-line "\n" ofile)))
  108.        Layer_List)
  109.      (close ofile))
  110.    (princ "\n*Cancel*"))
  111. (princ))
  112.          
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 17:12:06 | 显示全部楼层
这正是我想要的!!!非常感谢李!我相信,要使这一点与我所寻找的完美匹配,我需要将其添加到列表中,它会创建每个层的属性,但正如我之前所说,我并不急于这样做。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-21 01:56 , Processed in 0.520350 second(s), 73 queries .

© 2020-2025 乐筑天下

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