简化DBX后台处理流程!以批量关闭非打印图层为例。
本帖最后由 MUSIC-DIE 于 2023-6-18 22:10 编辑工作中用到批量后台处理的地方挺多的
在此提供一个函数,可以让你不再注重于DBX后台处理的代码,专注于功能实现,
在开图的时候调试DBX代码,代码功能正常的情况下,嵌入此函数即可实现批量后台处理!
以下为DBXCAL函数的简单演示,功能为关闭所选文件的非打印图层
(defun C:FDYTCPL()
(DBXCAL
(GET-MULTI-FILES "请选择需要冻结非打印图层的文件:" "DWG图形文件(*.dwg)|*.dwg" "THISCOMPUTER") ;需要加载opendcl以实现多选文件
nil ;nil表示直接覆盖文件操作,其他路径表示另存操作
'(lambda(DBX) ;自定义dbx处理函数,只有一个DBX参数
(vlax-for lyr(vla-get-Layersdbx) ;批量关闭非打印图层匿名函数
(if (zerop (vlax-get lyr 'Plottable))
(vla-put-freeze lyr :vlax-true)
)
)
dbx
)
(list "已冻结非打印图层" "冻结失败") ;自定义提示
)
(princ)
)
需要注意的是:
1、DBX没有命令行,因此和命令行相关的命令都不可以使用 如:getpointssget 等
2、DBX没有application,因此和application相关的命令都不可以使用如 BIND, open,系统变量等
3、DBX实际上相当于一个document,只能通过DBX这个doc来遍历图元实现功能
4、DBX因为是使用的VBA的对象,因此只能使用VBA的lisp函数操作
真不错,顶一个! 本帖最后由 MUSIC-DIE 于 2022-2-26 23:56 编辑
漏掉了odcl变量的定义,没有人发现吗:D
;忘记定义odcl变量!
(defun Load-Odclp()
(if (setq ODCL (findfile (strcat "OpenDCL.x64." (itoa(atoi (getvar "acadver")))".arx"))) T nil)
)
附件已更改!
DCL_MULTIFILEDIALOG??? 谢谢分享
点赞 uualice2020 发表于 2022-2-27 09:25
DCL_MULTIFILEDIALOG???
加载opencdcl MUSIC-DIE 发表于 2022-3-1 09:35
加载opencdcl
怎么加载? uualice2020 发表于 2022-3-1 21:27
怎么加载?
论坛搜索一下,很多的 非常赞,感谢分享如此实用的代码. 谢谢分享:victory:
页:
[1]