寻求批量导出1000个图块不卡的方法
(vla-WBlock)
(vla-SaveAs)
(vla-Export)
采用传统command的方法,会卡到崩溃,无奈只能想别的招,奈何这方面经验不足,故寻求坛友帮助!
恶补了一下vl函数知识,即使摆脱了command,使用vl函数也是会弹窗,看样子只能这样了?
;---将obj图块对象导出指定文件夹
(defun vla_wb(path obj / doc vla_sets vla_ss)
(vl-load-com);加载vl-lisp
(setq doc(vla-get-ActiveDocument(vlax-get-acad-object)))
(setq vla_sets(vla-get-SelectionSets doc));获取当前文档选择集合
(if(vl-catch-all-error-p(vl-catch-all-apply 'vla-item(list vla_sets "vla_ss")))
(setq vla_ss(vla-add vla_sets "vla_ss"))
(progn
(vla-delete(vla-item vla_sets "vla_ss"))
(setq vla_ss(vla-add vla_sets "vla_ss"))
)
)
(vla-AddItemsvla_ss(vlax-make-variant(vlax-safearray-fill(vlax-make-safearray vlax-vbObject '(0 . 0))(list obj))));将对象数组变体加入到vla选择集
(vla-WBlock doc(strcat path "\\"(vla-get-name obj)".dwg")vla_ss)
(vla-Delete vla_ss);删除选择集
)
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 17:25 编辑
用C#写一个任务分配器.(本质和批量打印一样)
1,打开图纸,选择要分区的区域,
通常为矩形,并且是指定图层或者颜色,
并且给每个区域一个有序名称.
2,根据区域数量多开cad.
目的是为了规避深度克隆并导出存档时候必然会遇到的单线程问题.
开的数量通常是CPU核心数,然后绑定线程亲和性.
区域%核心数=>处理的区域.
3,开始并行导出矩形范围内的数据.
4,根据导出排序数据(若需要)
我在浩辰里试了一下WBLOCK命令,不卡顿呀。
qazxswk 发表于 2025-4-28 16:19
我在浩辰里试了一下WBLOCK命令,不卡顿呀。
我没有表达清楚,,,我意思是循环导出1000个图块,生成1000个文件。每个图块一个文件 qazxswk 发表于 2025-4-28 16:23
你这就是导一个 用DBX,不过用已知的这个几个vla-,按说不应该卡的。
这么简单的需求,找Deepseek应该就能写出来。
kozmosovia 发表于 2025-4-28 16:28
用DBX,不过用已知的这个几个vla-,按说不应该卡的。
这么简单的需求,找Deepseek应该就能写出来。
问了,dp结合vla-saveas+dbx的方式,创建空白文档,再把块复制过去,再另存为,大概是这个思路,奈何无法运行,我也不知道该怎么修。 我拿你这个测了下,导出999个块,共用79秒,没有卡死,用的(command "_.WBLOCK"......),版本为autocad2014完整版,我猜测可能是精简版或者是版本的问题 wosiguwozai0830 发表于 2025-4-28 17:00
我拿你这个测了下,导出999个块,共用79秒,没有卡死,用的(command "_.WBLOCK"......),版本为autocad2014 ...
7.9秒还能接受,79秒太夸张了
页:
[1]
2