乐筑天下

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

[编程交流] 需要找到所有包含的DWG

[复制链接]

3

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 11:37:08 | 显示全部楼层 |阅读模式
我正在寻找一个类似于MacAtt的LISP例程,它搜索文件夹中的所有图形,并返回包含某些属性文本(在值中,而不是在标记名中)的图形列表。我不能提前说出这些街区的名字——这是个未知数。有很多很棒的批量应用程序,但似乎他们都想改变一些东西。我只想找出哪些图纸(在几十张图纸中)包含,例如“M7润滑泵”。帮助
 
提前感谢!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:45:15 | 显示全部楼层
你好,何博士,
 
我很高兴你喜欢我的MacAtt计划
 
我还编写了一个批处理ObjectDBX程序,该程序只需要一个函数参数即可处理。
 
请参见此处:
 
http://www.theswamp.org/index.php?topic=31827.0
 
如果我有时间,我会写一个函数,你可以输入它
回复

使用道具 举报

3

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 11:48:23 | 显示全部楼层
谢谢你,李。我很荣幸能沐浴在你的光辉之中。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:51:38 | 显示全部楼层
哈哈谢谢
 
好的,试一试:
 
这是我的子功能:
 
  1. ;;;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;;;
  2. ;;;ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,¤º°`°º¤;;;
  3. ;;                                                                               ;;
  4. ;;                                                                               ;;
  5. ;;                       --=={  ObjectDBX Base Program  }==--                    ;;
  6. ;;                                                                               ;;
  7. ;;  Provides a shell through which a LISP may operate on multiple drawings in a  ;;
  8. ;;  folder/sub-folders.                                                          ;;
  9. ;;                                                                               ;;
  10. ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
  11. ;;                                                                               ;;
  12. ;;  AUTHOR:                                                                      ;;
  13. ;;                                                                               ;;
  14. ;;  Copyright © Lee McDonnell, January 2010. All Rights Reserved.                ;;
  15. ;;                                                                               ;;
  16. ;;      { Contact: Lee Mac @ TheSwamp.org, CADTutor.net }                        ;;
  17. ;;                                                                               ;;
  18. ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
  19. ;;                                                                               ;;
  20. ;;  ARGUMENTS:                                                                   ;;
  21. ;;                                                                               ;;
  22. ;;  foo  ~  a function taking a single argument (the Document Object), and       ;;
  23. ;;          following the 'rules' of ObjectDBX:                                  ;;
  24. ;;                                                                               ;;
  25. ;;            - No SelectionSets               (ssget,ssname etc.)               ;;
  26. ;;            - No Command calls                                                 ;;
  27. ;;            - No *Ent Methods                (entget,entmod etc.)              ;;
  28. ;;            - No Access to System Variables  (vla-Set/GetVariable, etc)        ;;
  29. ;;                                                                               ;;
  30. ;;  dwgLst  ~  [Optional]  A list of dwg filepaths to process, if nil, program   ;;
  31. ;;                         will display BrowseForFolder dialog.                  ;;
  32. ;;                                                                               ;;
  33. ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
  34. ;;                                                                               ;;
  35. ;;;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;;;
  36. ;;;ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,¤º°`°º¤;;;
  37. (defun Mac-ODBX (foo dwgLst / *error* ObjRelease Get_Subs DirDialog ObjectDBXDocument
  38.                              DBX DBXDOC DOCLST DWGLST ERR FILE FILEPATH FLAG FOLDER PATH RESULT SUBS)
  39. (vl-load-com)
  40. (setq *acad (cond (*acad) ((vlax-get-acad-object)))
  41.        *adoc (cond (*adoc) ((vla-get-ActiveDocument *acad))))
  42. ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
  43. (defun *error* (msg)
  44.    (ObjRelease (list dbx dbxdoc))
  45.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  46.        (princ (strcat "\n** Error: " msg " **")))
  47.    (princ))
  48. ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
  49. (defun ObjRelease (lst)
  50.    (mapcar
  51.      (function
  52.        (lambda (x)
  53.          (if (and (eq (type x) 'VLA-OBJECT)
  54.                   (not (vlax-object-released-p x)))
  55.            (vl-catch-all-apply
  56.              (function vlax-release-object) (list x))))) lst))
  57. ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
  58. (defun Get_Subs (folder / file) ;; CAB
  59.    (mapcar
  60.      (function
  61.        (lambda (x) (setq file (strcat folder "\" x))
  62.                    (cons file (apply (function append) (get_subs file)))))
  63.        (cddr (vl-directory-files folder nil -1))))
  64. ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
  65. (defun DirDialog (msg dir flag / Shell Fold Path)
  66.    ; Lee Mac  ~ 07.06.09
  67.    (setq *acad (cond (*acad) ((vlax-get-acad-object))))
  68.    (setq Shell (vla-getInterfaceObject *acad "Shell.Application")
  69.          Fold  (vlax-invoke-method Shell 'BrowseForFolder
  70.                  (vla-get-HWND *acad) msg flag dir))
  71.    (vlax-release-object Shell)
  72.    (if Fold
  73.      (progn
  74.        (setq Path (vlax-get-property
  75.                     (vlax-get-property Fold 'Self) 'Path))
  76.        (vlax-release-object Fold)
  77.        (and (= "\" (substr Path (strlen Path)))
  78.             (setq Path (substr Path 1 (1- (strlen Path)))))))
  79.    
  80.    Path)
  81. ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
  82. (defun ObjectDBXDocument (/ acVer)
  83.    (setq *acad (cond (*acad) ((vlax-get-acad-object))))
  84.    
  85.    (vla-GetInterfaceObject *acad
  86.      (if (< (setq acVer (atoi (getvar "ACADVER"))) 16) "ObjectDBX.AxDbDocument"
  87.        (strcat "ObjectDBX.AxDbDocument." (itoa acVer)))))
  88. ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
  89. (if (setq dwgLst
  90.        (cond (dwgLst)
  91.              (  (setq Path (DirDialog "Select Directory to Process" nil 0))
  92.                 (initget "Yes No")
  93.                 (setq subs (cond ((getkword "\nProcess SubDirectories? <Yes> : ")) ("Yes")))
  94.                 (apply (function append)
  95.                        (vl-remove 'nil
  96.                          (mapcar
  97.                            (function
  98.                              (lambda (Filepath)
  99.                                (mapcar
  100.                                  (function
  101.                                    (lambda (Filename)
  102.                                      (strcat Filepath "\" Filename)))
  103.                                  (vl-directory-files Filepath "*.dwg" 1))))
  104.                            (append (list Path)
  105.                                    (apply (function append)
  106.                                           (if (= "Yes" subs) (Get_Subs Path))))))))))
  107.    (progn
  108.      (vlax-for doc (vla-get-Documents *acad)
  109.        (setq DocLst
  110.          (cons
  111.            (cons
  112.              (strcase
  113.                (vla-get-fullname doc)) doc) DocLst)))
  114.      (setq dbxdoc (ObjectDBXDocument))
  115.      (foreach dwg dwgLst        
  116.        (setq flag (and (setq dbx (cdr (assoc (strcase dwg) DocLst)))))
  117.        (and (not flag)
  118.             (setq Err (vl-catch-all-apply
  119.                         (function vla-open) (list dbxdoc dwg)) dbx dbxdoc))
  120.        (if (or flag (not (vl-catch-all-error-p Err)))
  121.          (setq Result (cons (cons dwg ((eval foo) dbx)) Result))
  122.          (princ (strcat "\n** Error Opening File: " (vl-filename-base dwg)  ".dwg **"))))))
  123. (ObjRelease (list dbx dbxdoc))
  124. Result)

 
你可以这样称呼它:
 
  1. ;; Test Function
  2. (defun c:test (/ searchterm)
  3. (setq searchterm "M7 LUBE PUMP")
  4. (print
  5.    (Mac-ODBX
  6.      '(lambda (document / i) (setq i 0)
  7.         
  8.         (vlax-for lay (vla-get-layouts document)
  9.          
  10.           (vlax-for obj (vla-get-block lay)
  11.             (if (and (eq "AcDbBlockReference"
  12.                          (vla-get-Objectname obj))
  13.                      (eq :vlax-true (vla-get-hasAttributes obj)))
  14.               (foreach att (append (vlax-invoke obj 'GetAttributes)
  15.                                    (vlax-invoke obj 'GetConstantAttributes))
  16.                
  17.                 (if (eq searchterm (vla-get-TextString att))
  18.                   
  19.                   (setq i (1+ i)))))))
  20.         i)
  21.      nil))
  22. (princ))

 
这将返回图形列表以及搜索项在图形中出现的次数。
 
希望这有帮助!
 
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:56:58 | 显示全部楼层
正如你们所知,你们可以使用设计中心进行搜索。
123714g8nnr1rrfvlgff8r.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:03:41 | 显示全部楼层
这就是我对AutoCAD缺乏经验的地方。。。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:05:52 | 显示全部楼层
 
花点时间在上面。Autodesk想到了一些好事情。
回复

使用道具 举报

3

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 12:12:25 | 显示全部楼层
哇!好极了
 
嗯。。。我不想听起来很无知,但我对这一切都不熟悉。我给那个OBDX文件取什么文件名?(TheSwamp还没有批准我。)
 
再次感谢。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:14:52 | 显示全部楼层
没有什么反对李的,但你不需要。设计中心可以选择。
回复

使用道具 举报

3

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 12:21:25 | 显示全部楼层
我现在正在尝试,它似乎正是我想要的。我尝试了DataExtraction工具(将数据放入电子表格),但它只是停滞不前。不知道设计中心这么做!
 
对于李,我仍然很感谢你的帮助,因为我正在努力学习LISP,我需要所有我能得到的好例子!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 02:34 , Processed in 0.760788 second(s), 74 queries .

© 2020-2025 乐筑天下

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