明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: aws

[提问] 寻求批量导出1000个图块不卡的方法

[复制链接]
发表于 2025-4-28 17:43:40 | 显示全部楼层
本帖最后由 qazxswk 于 2025-4-28 17:45 编辑

我用传统的command函数,导出时间是24秒左右。没有卡住。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-28 19:43:23 | 显示全部楼层
qazxswk 发表于 2025-4-28 17:43
我用传统的command函数,导出时间是24秒左右。没有卡住。

这个案例的图块有点过于简单了,随手创建的,我自己测试也44秒,没有卡住。不过,这不是重点,重点是寻找想摆脱commond的方法

点评

aws
(foreach x lst(command "-WBLOCK" "文件地址" "块名"))代码倒是很简单  发表于 2025-4-29 08:05
看看你的代码  发表于 2025-4-29 00:23
回复 支持 反对

使用道具 举报

发表于 2025-4-28 20:09:54 | 显示全部楼层
aws 发表于 2025-4-28 19:43
这个案例的图块有点过于简单了,随手创建的,我自己测试也44秒,没有卡住。不过,这不是重点,重点是寻找 ...

1,创建后台数据库.
2,深度克隆到后台数据库.
3,保存.
如果你用Lisp的话建议还是要Command,因为存在后台操作.
如果不用Command的话会引起文字偏移.
https://www.cnblogs.com/JJBox/p/10226119.html

规避文字操作是同步工作数据库.
我不知道Lisp是否有此操作?
HostApplicationServices.WorkingDatabase = _database;

所以别想了,这点速度自己适应一下就好了.
实在不行学C#
回复 支持 反对

使用道具 举报

发表于 2025-4-28 20:34:43 | 显示全部楼层
拿学C#需要的时间,够CAD慢悠悠用command生成999W个DWG了,估计画图一辈子也做不到需要wblock这么多DWG
回复 支持 反对

使用道具 举报

发表于 2025-4-28 20:39:19 | 显示全部楼层
kozmosovia 发表于 2025-4-28 20:34
拿学C#需要的时间,够CAD慢悠悠用command生成999W个DWG了,估计画图一辈子也做不到需要wblock这么多DWG

现在那么多教程,不至于两个月还学不会,而且还有AI
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-30 10:50:52 | 显示全部楼层

恶补了一下vl函数知识,即使摆脱了command,使用vl函数也是会弹窗,看样子只能这样了?
  1. ;---将obj图块对象导出指定文件夹
  2. (defun vla_wb(path obj / doc vla_sets vla_ss)
  3.   (vl-load-com);加载vl-lisp
  4.   (setq doc(vla-get-ActiveDocument(vlax-get-acad-object)))
  5.   (setq vla_sets(vla-get-SelectionSets doc));获取当前文档选择集合
  6.   (if(vl-catch-all-error-p(vl-catch-all-apply 'vla-item(list vla_sets "vla_ss")))
  7.     (setq vla_ss(vla-add vla_sets "vla_ss"))
  8.     (progn
  9.       (vla-delete(vla-item vla_sets "vla_ss"))
  10.       (setq vla_ss(vla-add vla_sets "vla_ss"))
  11.     )
  12.   )
  13.   (vla-AddItems  vla_ss(vlax-make-variant(vlax-safearray-fill(vlax-make-safearray vlax-vbObject '(0 . 0))(list obj))));将对象数组变体加入到vla选择集
  14.   (vla-WBlock doc(strcat path "\\"(vla-get-name obj)".dwg")vla_ss)
  15.   (vla-Delete vla_ss);删除选择集
  16. )


回复 支持 反对

使用道具 举报

发表于 2025-4-30 11:13:19 | 显示全部楼层
本帖最后由 kozmosovia 于 2025-4-30 14:35 编辑

用DBX,没那么多啰嗦,也快很多
循环选择集:
   开个DBX
   vla-CopyObjects图形进DBX
   保存
   关闭DBX

更加快的方式
开个DBX
循环选择集:
   删除DBX的Blocks和ModelSpace
   vla-CopyObjects图形进DBX
   保存
关闭DBX

回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-30 15:15:59 | 显示全部楼层
kozmosovia 发表于 2025-4-30 11:13
用DBX,没那么多啰嗦,也快很多
循环选择集:
   开个DBX

感谢指点,我再思考思考,感觉离答案不远了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-30 16:49:25 | 显示全部楼层
kozmosovia 发表于 2025-4-30 11:13
用DBX,没那么多啰嗦,也快很多
循环选择集:
   开个DBX


是不是这样,但是我这边没法运行,缺少axdb22.dll模块,只有一个axdb.dll模块,cad2020版本的。
  1. ;---导出obj图块对象到指定文件夹
  2. ;---patch是文件夹路径,obj是图块对象名
  3. (defun saveas_dbx(patch obj / acad dbx doc var vla_block)
  4.   (vl-load-com);加载vl-lisp
  5.   (setq acad(vlax-get-acad-object));获取正在运行的CAD程序
  6.   (setq doc(vla-get-ActiveDocument acad));获取当前文档
  7.   (setq dbx(vla-GetInterfaceObject acad "ObjectDBX.AxDbDocument.22.0"))
  8.   (vla-Delete(vla-get-Blocks dbx))
  9.   (vla-Delete(vla-get-ModelSpace dbx))
  10.   (setq vla_block(vla-Item(vla-get-Blocks doc)(vla-get-Name obj)));获取块定义
  11.   (setq var(vlax-make-variant(vlax-safearray-fill(vlax-make-safearray vlax-vbObject '(0 . 0))(list vla_block))));创建对象数组变体
  12.   (vla-CopyObjects doc var dbx)
  13.   (vla-SaveAs dbx(strcat patch "\\"(vla-get-Name obj)".dwg")48)
  14.   (vlax-release-object dbx)
  15.   (vlax-release-object var)
  16. )
  17. (defun c:gg()
  18.   (setq ss(ssget))
  19.   (setq desk(strcat(vla-item(vlax-get(vlax-create-object "wscript.shell")'specialfolders)"desktop")"\\文件加"));获取桌面位置
  20.   (vl-mkdir desk)
  21.   (setq obj_lst(mapcar 'vlax-ename->vla-object(vl-remove-if 'listp(mapcar 'cadr(ssnamex ss)))))
  22.   (foreach obj obj_lst
  23.     (saveas_dbx desk obj)
  24.   )
  25.   (print)
  26.   (princ)
  27. )

回复 支持 反对

使用道具 举报

发表于 2025-5-2 15:16:09 | 显示全部楼层
命令pl32
试试C#

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-1 16:21 , Processed in 0.168261 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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