批量处理dwg文件,遍历,打开,写入,保存,关闭
本帖最后由 freedom_ice 于 2023-4-10 11:25 编辑在论坛里找到过批量修改字体之类的,但是没有找到批量写入实体的,尝试了很久,总是想着用vla-activate来实现,但是不管怎么激活,写入实体总是在第一个打开的CAD里面。今天发现用Vlisp,添加实体的时候指定文档即可解决问题。
分享给大家。代码来自于论坛及帮助文件。
( vl-load-com )
(defun c:tt ( / sh folder folderobject result)
( setq AcadObject ( vlax-get-acad-object )
AcadDocument ( vla-get-ActiveDocument AcadObject )
AcadDocuments ( vla-get-documents AcadObject )
)
(setq sh (vla-getInterfaceObject (vlax-get-acad-object) "Shell.Application" ))
(setq folder (vlax-invoke-method sh 'BrowseForFolder 0 "请选择文件夹" 0 ))
(vlax-release-object sh)
(setq folderobject (vlax-get-property folder 'Self))
(setq result (vlax-get-property FolderObject 'Path))
(setq Files_Folder (vl-directory-files result "*.dwg"))
(foreach file Files_Folder
(setq block_file (strcat result "\\\" file))
( setq doc_now ( vla-open AcadDocuments block_file));打开的文档
( setqmSpace ( vla-get-ModelSpace doc_now ) )
( setq myline ( vla-addline mspace (vlax-3d-point '( 0 0 0 ) )(vlax-3d-point '( 500 100 0 ))))
( vla-Save doc_now )
( vlax-for doc AcadDocuments
(if (/= (vla-get-Name doc) (vla-get-Name AcadDocument))
(vla-Close doc :vlax-false)
)
)
( vla-activate AcadDocument )
)
(princ)
)
freedom_ice 发表于 2023-4-11 10:42
试试这个行不行
打开文档即为当前文档保存关闭之前vla-PurgeAll
( setq doc_now ( vla-open AcadD ...
用 sentcommad 或 PostCommand 感谢分享,对DWG图形进行批处理,一直用 SCRIPT tfanghui 发表于 2023-4-11 10:29
感谢分享!请教下大佬,想在保存前执行清理,用command执行,会先保存再 返回到打开的文件执行清理。是哪里 ...
试试这个行不行
打开文档即为当前文档保存关闭之前vla-PurgeAll
( setq doc_now ( vla-open AcadDocuments block_file));打开的文档
(vla-PurgeAll doc_now )
多文档不能用command 感谢分享 lisp是单线程且与文档相关的,当 激活其它dwg文档时,当前的 lisp 流程就会挂起,并交出控制权。 感谢楼主分享 这个厉害了,又多了无限可能.。感谢 谢谢分享!
(setq block_file (strcat result "\" file))
应改为
(setq block_file (strcat result "\\" file)) 感谢分享,这个主要用来做什么! yshf 发表于 2023-4-10 08:27
谢谢分享!
(setq block_file (strcat result "\" file))
应改为
双斜线好像被转义了 变成单斜线了。 感谢楼主分享 之前Leemac有一个不打开图纸获取图纸部分信息的lisp,在他官网上