我用传统的command函数,导出时间是24秒左右。没有卡住。
qazxswk 发表于 2025-4-28 17:43
我用传统的command函数,导出时间是24秒左右。没有卡住。
这个案例的图块有点过于简单了,随手创建的,我自己测试也44秒,没有卡住。不过,这不是重点,重点是寻找想摆脱commond的方法 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# 拿学C#需要的时间,够CAD慢悠悠用command生成999W个DWG了,估计画图一辈子也做不到需要wblock这么多DWG kozmosovia 发表于 2025-4-28 20:34
拿学C#需要的时间,够CAD慢悠悠用command生成999W个DWG了,估计画图一辈子也做不到需要wblock这么多DWG
现在那么多教程,不至于两个月还学不会,而且还有AI
恶补了一下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);删除选择集
)
本帖最后由 kozmosovia 于 2025-4-30 14:35 编辑
用DBX,没那么多啰嗦,也快很多
循环选择集:
开个DBX
vla-CopyObjects图形进DBX
保存
关闭DBX
更加快的方式
开个DBX
循环选择集:
删除DBX的Blocks和ModelSpace
vla-CopyObjects图形进DBX
保存
关闭DBX
kozmosovia 发表于 2025-4-30 11:13
用DBX,没那么多啰嗦,也快很多
循环选择集:
开个DBX
感谢指点,我再思考思考,感觉离答案不远了 kozmosovia 发表于 2025-4-30 11:13
用DBX,没那么多啰嗦,也快很多
循环选择集:
开个DBX
是不是这样,但是我这边没法运行,缺少axdb22.dll模块,只有一个axdb.dll模块,cad2020版本的。
;---导出obj图块对象到指定文件夹
;---patch是文件夹路径,obj是图块对象名
(defun saveas_dbx(patch obj / acad dbx doc var vla_block)
(vl-load-com);加载vl-lisp
(setq acad(vlax-get-acad-object));获取正在运行的CAD程序
(setq doc(vla-get-ActiveDocument acad));获取当前文档
(setq dbx(vla-GetInterfaceObject acad "ObjectDBX.AxDbDocument.22.0"))
(vla-Delete(vla-get-Blocks dbx))
(vla-Delete(vla-get-ModelSpace dbx))
(setq vla_block(vla-Item(vla-get-Blocks doc)(vla-get-Name obj)));获取块定义
(setq var(vlax-make-variant(vlax-safearray-fill(vlax-make-safearray vlax-vbObject '(0 . 0))(list vla_block))));创建对象数组变体
(vla-CopyObjects doc var dbx)
(vla-SaveAs dbx(strcat patch "\\"(vla-get-Name obj)".dwg")48)
(vlax-release-object dbx)
(vlax-release-object var)
)
(defun c:gg()
(setq ss(ssget))
(setq desk(strcat(vla-item(vlax-get(vlax-create-object "wscript.shell")'specialfolders)"desktop")"\\文件加"));获取桌面位置
(vl-mkdir desk)
(setq obj_lst(mapcar 'vlax-ename->vla-object(vl-remove-if 'listp(mapcar 'cadr(ssnamex ss)))))
(foreach obj obj_lst
(saveas_dbx desk obj)
)
(print)
(princ)
)
页:
1
[2]