明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2870|回复: 27

[讨论] 批量处理dwg文件,遍历,打开,写入,保存,关闭

  [复制链接]
发表于 2023-4-9 23:44 | 显示全部楼层 |阅读模式
本帖最后由 freedom_ice 于 2023-4-10 11:25 编辑

在论坛里找到过批量修改字体之类的,但是没有找到批量写入实体的,尝试了很久,总是想着用vla-activate来实现,但是不管怎么激活,写入实体总是在第一个打开的CAD里面。今天发现用Vlisp,添加实体的时候指定文档即可解决问题。
分享给大家。代码来自于论坛及帮助文件。


  1. ( vl-load-com )
  2. (defun c:tt ( / sh folder folderobject result)  
  3.   ( setq   AcadObject ( vlax-get-acad-object )  
  4.          AcadDocument ( vla-get-ActiveDocument AcadObject )  
  5.            AcadDocuments ( vla-get-documents AcadObject )
  6.   )
  7.   
  8.   (setq sh (vla-getInterfaceObject (vlax-get-acad-object) "Shell.Application" ))
  9.   (setq folder (vlax-invoke-method sh 'BrowseForFolder 0 "请选择文件夹" 0 ))
  10.   (vlax-release-object sh)
  11.   (setq folderobject (vlax-get-property folder 'Self))
  12.   (setq result (vlax-get-property FolderObject 'Path))
  13.   (setq Files_Folder (vl-directory-files result "*.dwg"))   
  14.   (foreach file Files_Folder
  15.            (setq block_file (strcat result "\\" file))
  16.    
  17.            ( setq doc_now ( vla-open AcadDocuments block_file));打开的文档
  18.    
  19.            ( setq  mSpace ( vla-get-ModelSpace doc_now ) )
  20.            ( setq myline ( vla-addline mspace (vlax-3d-point '( 0 0 0 ) )(vlax-3d-point '( 500 100 0 ))))
  21.            ( vla-Save doc_now )
  22.            ( vlax-for doc AcadDocuments   
  23.                       (if (/= (vla-get-Name doc) (vla-get-Name AcadDocument))  
  24.                           (vla-Close doc :vlax-false)  
  25.                       )  
  26.            )
  27.            ( vla-activate AcadDocument )
  28.   )  
  29.   (princ)   
  30. )



评分

参与人数 6明经币 +6 收起 理由
mercio + 1 2020试了一下,可以写入斜线,但关图的时候.
baitang36 + 1 很给力!
tigcat + 1 很给力!
guosheyang + 1 赞一个!
tfanghui + 1 赞一个!
xj6019 + 1 牛叉,赞一个!

查看全部评分

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

用 sentcommad 或 PostCommand
回复 支持 1 反对 0

使用道具 举报

发表于 2023-4-13 11:38 | 显示全部楼层
感谢分享,对DWG图形进行批处理,一直用 SCRIPT
回复 支持 1 反对 0

使用道具 举报

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

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

多文档不能用command

点评

楼主,还有个问题请教一下 ,像这种跨文档的操作,怎么定义一个函数,然后执行这个函数,  发表于 2023-4-11 11:33
我试试,谢谢楼主!  发表于 2023-4-11 11:25
回复 支持 1 反对 0

使用道具 举报

发表于 2023-4-10 00:55 | 显示全部楼层
lisp是单线程且与文档相关的,当 激活其它dwg文档时,当前的 lisp 流程就会挂起,并交出控制权。
发表于 2023-4-10 01:05 来自手机 | 显示全部楼层
感谢楼主分享
发表于 2023-4-10 06:14 | 显示全部楼层
这个厉害了,又多了无限可能.。感谢
发表于 2023-4-10 08:27 | 显示全部楼层
谢谢分享!
(setq block_file (strcat result "\" file))
应改为
(setq block_file (strcat result "\\" file))
发表于 2023-4-10 09:02 | 显示全部楼层
感谢分享,这个主要用来做什么!
 楼主| 发表于 2023-4-10 11:26 | 显示全部楼层
yshf 发表于 2023-4-10 08:27
谢谢分享!
(setq block_file (strcat result "\" file))
应改为

双斜线好像被转义了 变成单斜线了。
发表于 2023-4-10 22:18 | 显示全部楼层
感谢楼主分享
发表于 2023-4-11 07:56 | 显示全部楼层
之前Leemac有一个不打开图纸获取图纸部分信息的lisp,在他官网上
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-7 11:21 , Processed in 0.253904 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表