乐筑天下

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

[编程交流] 将每个层保存在单独的

[复制链接]

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:57:55 | 显示全部楼层 |阅读模式
大家好,
我正在寻找一种自动拆分a的方法。包含多个图层的dwg。仅包含一个图层的dwg(每个图层应使用图层名作为新文件名分别保存在新文件中)。
有人知道一个简单的方法吗?
谢谢
泽维尔
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:01:24 | 显示全部楼层
你可以写一个lisp文件,它会自动为你做。
 
另一种有点麻烦但确实起作用的方法是使用qselect命令。
 
应用于:整个图形
 
对象类型:多个
 
特性:图层
 
操作员=
 
值(每次单独选择层)
 
创建外部图块
 
文件名和路径(图层名)并保留所有其他内容
 
好啊
 
然后重新开始下一层
 
 
希望这对你有所帮助,直到有人为你发布列表
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:04:53 | 显示全部楼层
谢谢,这就是我一直在做的。。。
 
只是一个问题:什么是
 
“wblock
 
文件名和路径(图层名)并保留所有其他内容
 
“好的”
 
这个函数在哪里?(我正在使用Acad 2005)
这可能比选择“复制新文件”“粘贴”更快?
 
事实上,我真的在寻找一种自动方式!
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:10:04 | 显示全部楼层
对不起,如果有点多云,
 
按qselect中的ok按钮(选择后)
 
在命令行中键入wblock(writeblock)
 
在文件名和路径中:(输入图层名)
 
按ok(确定)按钮。
 
将创建一个新文件。然后我建议从下一层开始循环。
 
在一幅画中是可以忍受的,但在负载下是痛苦的。
 
 
希望其中一个lisp向导很快就会为您生成一个这样做的例程
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-5 17:12:15 | 显示全部楼层
泽维尔,
您好。
这当然可以做到,下面的代码可以做到,但只是证明,而不是一个完成的例程。你需要稍微了解VBA才能完成它!
  1. Public Sub GetLayer()
  2. Dim i As Integer
  3. Dim mySelSet As AcadSelectionSet
  4. Dim gpCode(0) As Integer
  5. Dim dataValue(0) As Variant
  6. Dim groupCode As Variant
  7. Dim dataCode As Variant
  8. Dim SaveName As String
  9. For i = 0 To ThisDrawing.Layers.Count - 1
  10. Set mySelSet = ThisDrawing.SelectionSets.Add("TextOnLayer")
  11. gpCode(0) = 8 'layer
  12. groupCode = gpCode
  13. dataValue(0) = ThisDrawing.Layers(i).Name  'layer name
  14. dataCode = dataValue
  15. mySelSet.Select acSelectionSetAll, , , groupCode, dataCode
  16. Debug.Print mySelSet.Count
  17. ThisDrawing.Wblock "C:\Fred_" & ThisDrawing.Layers(i).Name, mySelSet
  18. Set mySelSet = Nothing
  19. ThisDrawing.SelectionSets.Item("TextOnLayer").Delete
  20. Next
  21. End Sub

 
WBLOCK(写块)用于从现有图形的部分中创建新图形。可以选择图形中定义的单个项目或块。
回复

使用道具 举报

10

主题

253

帖子

75

银币

后起之秀

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

铜币
223
发表于 2022-7-5 17:15:53 | 显示全部楼层
尝试使用。看看评论!
  1. ;|
  2. Limitations: file sould be opened "full" (not partial). All layers should
  3. be thawed, on, unlocked (not controlled).
  4. Layout entities will create unexpected result - be careful!
  5. Actually there are some ways to change code to select only model entites
  6. But i can't do it - i've got too much job
  7. And something else  - look how the code works
  8. * written by kpblc 2006 Nov 23
  9. |;
  10. (defun c:lay2file (/ adoc selset)
  11. (vl-load-com)
  12. (vla-startundomark
  13.    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  14.    ) ;_ end of vla-StartUndoMark
  15. (vlax-for ss (vla-get-selectionsets adoc)
  16.    (if (= (vla-get-name ss) "temp")
  17.      (progn
  18.        (vla-clear ss)
  19.        (vla-erase ss)
  20.        ) ;_ end of progn
  21.      ) ;_ end of if
  22.    ) ;_ end of vlax-for
  23. (setq selset (vla-add (vla-get-selectionsets adoc) "temp"))
  24. (vlax-for lay (vla-get-layers adoc)
  25.    (if (and (not (vla-select
  26.                    selset
  27.                    acselectionsetall
  28.                    (vlax-make-variant
  29.                      (vlax-safearray-fill
  30.                        (vlax-make-safearray
  31.                          vlax-vbdouble
  32.                          '(0 . 0)
  33.                          ) ;_ end of vlax-make-safearray
  34.                        '(
  35.                        ) ;_ end of vlax-safearray-fill
  36.                      ) ;_ end of vlax-make-variant
  37.                    (vlax-make-variant
  38.                      (vlax-safearray-fill
  39.                        (vlax-make-safearray
  40.                          vlax-vbvariant
  41.                          '(0 . 0)
  42.                          ) ;_ end of vlax-make-safearray
  43.                        (list (vla-get-name lay))
  44.                        ) ;_ end of vlax-safearray-fill
  45.                      ) ;_ end of vlax-make-variant
  46.                    ) ;_ end of vla-select
  47.                  ) ;_ end of not
  48.             (> (vla-get-count selset) 0)
  49.             ) ;_ end of and
  50.      (vla-wblock
  51.        adoc
  52.        (strcat (getvar "dwgprefix") (vla-get-name lay) ".dwg")
  53.        selset
  54.        ) ;_ end of vla-Wblock
  55.      ) ;_ end of if
  56.    (vla-clear selset)
  57.    ) ;_ end of vlax-for
  58. (vl-catch-all-apply '(lambda () (vla-delete selset)))
  59. (vla-endundomark adoc)
  60. (princ)
  61. ) ;_ end of defun

在VBA中,代码可能更可读。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:19:25 | 显示全部楼层
谢谢大家!
我的编程是=0,但我会问一个知道(多一点)的人。。。
如果我们做不到,我会回来的!
 
同时,如果有人有其他建议。。。
 
再次感谢
 
泽维尔
回复

使用道具 举报

10

主题

253

帖子

75

银币

后起之秀

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

铜币
223
发表于 2022-7-5 17:23:14 | 显示全部楼层
还有一件事:在http://www.cadforum.cz/cadforum_en/default.asp?tab=4&cat=33我发现:
我没有加载和测试它。还要看看http://www.jtbworld.com/lisp/layoutstodwgs.htm
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:24:21 | 显示全部楼层
辛布罗,你的方式比我做的要快。。。总比什么都没有好!
事实上,我第一次尝试时它没有起作用,因为我的wblock拼写为wbloc。。。法语!
泽维尔
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-5 17:27:23 | 显示全部楼层
还有一个,选择目标文件夹。
 
  1. (defun c:lsave(/ actDoc layCol docName dwgName actSel fCount)
  2. (vl-load-com)
  3. (defun BrowseFolder (/ ShlObj Folder FldObj OutVal)
  4. (vl-load-com)
  5. (setq
  6.    ShlObj (vla-getInterfaceObject
  7.       (vlax-get-acad-object)
  8.       "Shell.Application"
  9.     )
  10.    Folder(vlax-invoke-method ShlObj 'BrowseForFolder 0
  11.     "Select Folder to create files" 0)
  12. )
  13. (vlax-release-object ShlObj)
  14. (if Folder
  15.    (progn
  16.      (setq
  17. FldObj (vlax-get-property Folder 'Self)
  18. OutVal (vlax-get-property FldObj 'Path)
  19.      )
  20.      (vlax-release-object Folder)
  21.      (vlax-release-object FldObj)
  22.      OutVal
  23.    )
  24. )
  25. )
  26. (setq actDoc(vla-get-ActiveDocument
  27.         (vlax-get-acad-object))
  28. actSel(vla-get-ActiveSelectionSet actDoc)
  29. layCol(vla-get-Layers actDoc)
  30. docName(vla-get-Name actDoc)
  31. fCount 0
  32. ); end setq
  33. (if
  34.    (setq wntPath
  35.    (BrowseFolder))
  36.    (progn
  37. (vlax-for lay layCol
  38.    (setq layName(vla-get-Name lay)
  39.   dwgName
  40.    (strcat wntPath "\"
  41.            (vl-filename-base docName)
  42.             " - " layName ".dwg")
  43.   ); end setq
  44. (vla-clear actSel)(vla-erase actSel)
  45. (vla-Select actSel acSelectionSetAll nil nil
  46. (vlax-safearray-fill
  47.    (vlax-make-safearray vlax-vbInteger '(0 . 0))
  48.     '(
  49. ) ; end vla-safearray-fill
  50. (vlax-safearray-fill
  51.    (vlax-make-safearray vlax-vbvariant '(0 . 0))
  52.     (list layName)
  53. ) ; end vla-safearray-fill
  54. ) ; end vla-select
  55.    (if(/= 0(vla-get-Count actSel))
  56.      (vla-WBlock actDoc dwgName actSel)); end if
  57.    (setq fCount(1+ fCount))
  58.    ); end vlax-for
  59. ); end progn
  60.    ); end if
  61. (princ
  62.    (strcat "\*** "
  63.     (itoa fCount)
  64.     " files were created *** "))
  65. (princ)
  66. ); end of c:lsave

 
>kpblc不可能跟上你。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 13:09 , Processed in 0.923658 second(s), 72 queries .

© 2020-2025 乐筑天下

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