freedom_ice 发表于 2023-4-9 23:44:40

批量处理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)   
)



pzweng 发表于 2023-4-13 13:17:35

freedom_ice 发表于 2023-4-11 10:42
试试这个行不行
打开文档即为当前文档保存关闭之前vla-PurgeAll
( setq doc_now ( vla-open AcadD ...

用 sentcommad 或 PostCommand

PGJ 发表于 2023-4-13 11:38:04

感谢分享,对DWG图形进行批处理,一直用 SCRIPT

freedom_ice 发表于 2023-4-11 10:42:35

tfanghui 发表于 2023-4-11 10:29
感谢分享!请教下大佬,想在保存前执行清理,用command执行,会先保存再 返回到打开的文件执行清理。是哪里 ...

试试这个行不行
打开文档即为当前文档保存关闭之前vla-PurgeAll
( setq doc_now ( vla-open AcadDocuments block_file));打开的文档
(vla-PurgeAll doc_now )

多文档不能用command

飞雪神光 发表于 2023-4-9 23:53:34

感谢分享

vitalgg 发表于 2023-4-10 00:55:03

lisp是单线程且与文档相关的,当 激活其它dwg文档时,当前的 lisp 流程就会挂起,并交出控制权。

cyh3210573 发表于 2023-4-10 01:05:57

感谢楼主分享

zhaoxt 发表于 2023-4-10 06:14:51

这个厉害了,又多了无限可能.。感谢

yshf 发表于 2023-4-10 08:27:57

谢谢分享!
(setq block_file (strcat result "\" file))
应改为
(setq block_file (strcat result "\\" file))

Noangler 发表于 2023-4-10 09:02:03

感谢分享,这个主要用来做什么!

freedom_ice 发表于 2023-4-10 11:26:22

yshf 发表于 2023-4-10 08:27
谢谢分享!
(setq block_file (strcat result "\" file))
应改为


双斜线好像被转义了 变成单斜线了。

菜鸟初来乍到 发表于 2023-4-10 22:18:55

感谢楼主分享

mercio 发表于 2023-4-11 07:56:30

之前Leemac有一个不打开图纸获取图纸部分信息的lisp,在他官网上
页: [1] 2 3
查看完整版本: 批量处理dwg文件,遍历,打开,写入,保存,关闭