本帖最后由 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-Layers dbx) ;批量关闭非打印图层匿名函数
- (if (zerop (vlax-get lyr 'Plottable))
- (vla-put-freeze lyr :vlax-true)
- )
- )
- dbx
- )
- (list "已冻结非打印图层" "冻结失败") ;自定义提示
- )
- (princ)
- )
需要注意的是:
1、DBX没有命令行,因此和命令行相关的命令都不可以使用 如:getpoint ssget 等
2、DBX没有application,因此和application相关的命令都不可以使用如 BIND, open,系统变量等
3、DBX实际上相当于一个document,只能通过DBX这个doc来遍历图元实现功能
4、DBX因为是使用的VBA的对象,因此只能使用VBA的lisp函数操作
|