MUSIC-DIE 发表于 2022-2-26 00:03:17

简化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函数操作





nochao 发表于 2022-2-26 00:17:31

真不错,顶一个!

MUSIC-DIE 发表于 2022-2-26 23:55:26

本帖最后由 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)
)

附件已更改!

uualice2020 发表于 2022-2-27 09:25:54

DCL_MULTIFILEDIALOG???

lxl217114 发表于 2022-2-27 21:21:36

谢谢分享
点赞

MUSIC-DIE 发表于 2022-3-1 09:35:25

uualice2020 发表于 2022-2-27 09:25
DCL_MULTIFILEDIALOG???

加载opencdcl

uualice2020 发表于 2022-3-1 21:27:28

MUSIC-DIE 发表于 2022-3-1 09:35
加载opencdcl

怎么加载?

MUSIC-DIE 发表于 2022-3-1 22:02:35

uualice2020 发表于 2022-3-1 21:27
怎么加载?

论坛搜索一下,很多的

tigcat 发表于 2022-5-15 14:30:00

非常赞,感谢分享如此实用的代码.

teykmcqh 发表于 2024-8-25 02:42:19

谢谢分享:victory:
页: [1]
查看完整版本: 简化DBX后台处理流程!以批量关闭非打印图层为例。