乐筑天下

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

[编程交流] 读取autocad文件

[复制链接]

40

主题

103

帖子

63

银币

后起之秀

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

铜币
200
发表于 2022-7-6 09:15:06 | 显示全部楼层 |阅读模式
大家好,
 
我只想在不打开的情况下读取autocad文件的图层列表。
用lisp可以吗?
 
谢谢
库马尔。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:23:42 | 显示全部楼层
这可以通过ObjectDBX实现,如下代码所示:
 
  1. (defun c:test ( / doc file lst )
  2. (if
  3.    (and
  4.      (setq file (getfiled "Select Drawing" "" "dwg;dwt;dws" 16))
  5.      (setq doc  (LM:GetDocumentObject (vlax-get-acad-object) file))
  6.    )
  7.    (progn
  8.      (vlax-for l (vla-get-layers doc) (setq lst (cons (vla-get-name l) lst)))
  9.      (vlax-release-object doc)
  10.    )
  11. )
  12. (reverse lst)
  13. )        
  14. ;;-----------------=={ Get Document Object }==----------------;;
  15. ;;                                                            ;;
  16. ;;  Retrieves a the VLA Document Object for the specified     ;;
  17. ;;  filename. Document Object may be present in the Documents ;;
  18. ;;  collection, or obtained through ObjectDBX                 ;;
  19. ;;------------------------------------------------------------;;
  20. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  21. ;;------------------------------------------------------------;;
  22. ;;  Arguments:                                                ;;
  23. ;;  acapp    - AutoCAD Application Object                     ;;
  24. ;;  filename - filename for which to retrieve document object ;;
  25. ;;------------------------------------------------------------;;
  26. ;;  Returns:  VLA Document Object, else nil                   ;;
  27. ;;------------------------------------------------------------;;
  28. (defun LM:GetDocumentObject ( acapp filename / acdocs dbx )
  29. (vlax-for doc  (vla-get-Documents acapp)
  30.    (setq acdocs (cons (cons (strcase (vla-get-fullname doc)) doc) acdocs))
  31. )
  32. (cond
  33.    ( (not (setq filename (findfile filename)))
  34.      nil
  35.    )
  36.    ( (cdr (assoc (strcase filename) acdocs))
  37.    )
  38.    ( (not
  39.        (vl-catch-all-error-p
  40.          (vl-catch-all-apply 'vla-open
  41.            (list (setq dbx (LM:ObjectDBXDocument acapp)) filename)
  42.          )
  43.        )
  44.      )
  45.      dbx
  46.    )
  47. )
  48. )
  49. ;;-----------------=={ ObjectDBX Document }==-----------------;;
  50. ;;                                                            ;;
  51. ;;  Retrieves a version specific ObjectDBX Document object    ;;
  52. ;;------------------------------------------------------------;;
  53. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  54. ;;------------------------------------------------------------;;
  55. ;;  Arguments:                                                ;;
  56. ;;  acapp - AutoCAD Application Object                        ;;
  57. ;;------------------------------------------------------------;;
  58. ;;  Returns:  VLA ObjectDBX Document object, else nil         ;;
  59. ;;------------------------------------------------------------;;
  60. (defun LM:ObjectDBXDocument ( acapp / acver )
  61. (vla-GetInterfaceObject acapp
  62.    (if (< (setq acver (atoi (getvar "ACADVER"))) 16)
  63.      "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." (itoa acver))
  64.    )
  65. )
  66. )
  67. (vl-load-com) (princ)
在该程序中使用了该思想的扩展。
回复

使用道具 举报

40

主题

103

帖子

63

银币

后起之秀

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

铜币
200
发表于 2022-7-6 09:29:36 | 显示全部楼层
嗨,李,
 
谢谢你的快速反应。
 
我已经改变了功能,如下添加一个层到文件。
未获得错误,但未将任何层添加到文件中。
请告诉我哪里做错了。
 
  1. (defun c:test ( / doc file )
  2. (if
  3.    (and
  4.      (setq file (getfiled "Select Drawing" "" "dwg;dwt;dws" 16))
  5.      (setq doc  (GetDocumentObject (vlax-get-acad-object) file))
  6.    )
  7.    (progn
  8.      (setq LayerTable (vla-get-layers doc))
  9.      (setq aNewLayer (vla-add LayerTable "TestLayer"))
  10.      (vla-put-color aNewLayer 2)
  11.      (vlax-release-object doc)
  12.    )
  13. )
  14. (reverse lst)
  15. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:36:17 | 显示全部楼层
 
添加图层后,需要保存文件。
 
为什么现在变成了:?
 
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:42:41 | 显示全部楼层
 
什么是“如何窃取别人的想法,为自己赢得全部荣誉?”
 

                               
登录/注册后可看大图

 
 
 
呜呜,呜呜,呜呜。正确答案是“什么是笨蛋?”
 
101511lffrpja8zae2j518.jpg
回复

使用道具 举报

40

主题

103

帖子

63

银币

后起之秀

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

铜币
200
发表于 2022-7-6 09:48:30 | 显示全部楼层
对不起伙计们
 
我不想把这归功于我。
作为向一个非常新鲜的人解释它的一部分,我刚刚删除了它,以证明我们可以为函数使用任何名称。不幸的是,我复制了那个。
 
下面的标题仍然在我的原始程序中。
 
同时感谢李的快速帮助。
 
 
  1. ;;-----------------=={ Get Document Object }==----------------;;
  2. ;;                                                            ;;
  3. ;;  Retrieves a the VLA Document Object for the specified     ;;
  4. ;;  filename. Document Object may be present in the Documents ;;
  5. ;;  collection, or obtained through ObjectDBX                 ;;
  6. ;;------------------------------------------------------------;;
  7. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  8. ;;------------------------------------------------------------;;
  9. ;;  Arguments:                                                ;;
  10. ;;  acapp    - AutoCAD Application Object                     ;;
  11. ;;  filename - filename for which to retrieve document object ;;
  12. ;;------------------------------------------------------------;;
  13. ;;  Returns:  VLA Document Object, else nil                   ;;
  14. ;;------------------------------------------------------------;;
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:55:56 | 显示全部楼层
也许我的幽默尝试有点尖锐。
 
不过我想你明白,那些为他人的利益自愿工作的人(也就是说,免费工作),只是想得到应得的荣誉。没什么了。
 
 
现在你知道了。。。知道是:
 

                               
登录/注册后可看大图
回复

使用道具 举报

40

主题

103

帖子

63

银币

后起之秀

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

铜币
200
发表于 2022-7-6 10:05:11 | 显示全部楼层
大家好,
 
在向文档添加图层后,我尝试使用
 
  1. (vla-save doc)

 
但它返回以下错误。
; 错误:自动化错误。未提供说明。
 
我还注意到,它可以很好地处理当前打开的活动图形。
 
  1. (setq thisdrawing
  2.      (vla-get-activedocument
  3.           (vlax-get-acad-object)))
  4. (vla-save thisdrawing )

 
 
请告诉我在添加图层后如何保存文档。
 
 
谢谢
库马尔。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:11:14 | 显示全部楼层
将调用函数更改为:
 
  1. (defun c:test ( / doc file )
  2. (if
  3.    (and
  4.      (setq file (getfiled "Select Drawing" "" "dwg;dwt;dws" 16))
  5.      (setq doc  (LM:GetDocumentObject (vlax-get-acad-object) file))
  6.    )
  7.    (progn
  8.      (setq layer (vla-add (vla-get-layers doc) "TestLayer"))
  9.      (vla-put-color layer 2)
  10.      (vla-saveas doc file)
  11.      (vlax-release-object doc)
  12.    )
  13. )
  14. (princ)
  15. )

 
使用ObjectDBX时,需要使用SaveAs方法。
回复

使用道具 举报

40

主题

103

帖子

63

银币

后起之秀

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

铜币
200
发表于 2022-7-6 10:17:04 | 显示全部楼层
谢谢李
 
它工作得很好。。。。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 06:21 , Processed in 1.167764 second(s), 74 queries .

© 2020-2025 乐筑天下

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