使用SCR脚本打开和关闭AUTOCAD文件

时间:2018-07-18 22:01:38

标签: scripting autocad autolisp

我最近开始为AUTOCAD编写脚本。 我要执行以下操作:

假设,我将脚本放置在当前位置。 在当前位置,我有几个文件夹。每个文件夹依次包含许多文件夹,这些文件夹又包含一些图形文件(.DWG和.DWT类型)。 我想遍历每个文件夹并获得仅包含.DWT文件的列表。

现在,我要遍历每个.DWT文件并在AUTOCAD中打开文件,将参数“ DELOBJ”的值更改为1(例如),最后保存并关闭文档。

我们可以使用普通的SCR脚本来做到这一点吗(或者可以使用LISP Command来做到这一点)? 如果有人能在这种情况下为我提供帮助,我将非常高兴

谢谢。

3 个答案:

答案 0 :(得分:0)

今天我没有足够的时间准备完整的样品(对不起),但让我们开始:

获取所有* .DWT文件的列表。您可以这样做:

(defun CMD::Dir ( pattern / Shell Dirinf Outbuf CmdVal) 
(setq cmd (strcat "%comspec% /C dir /S /B " pattern ) )
(print cmd )
(setq Shell (vlax-get-or-create-object "Wscript.Shell"))
(setq Dirinf(vlax-invoke-method Shell 'Exec cmd ))
(setq Outbuf(vlax-get-property Dirinf 'StdOut ))
( while (= :vlax-false (vlax-get-property Outbuf 'AtEndOfStream ) )
    (setq CmdVal (append CmdVal (list (vlax-invoke-method Outbuf 'ReadLine ) ) ) )
)
(vlax-release-object Shell)
CmdVal
)

(setq files (CMD::Dir "**YourPath**\\*.dwt" ) )

然后使用(foreach file files .. )打开每个图形,并设置DELOBJ的值。但是请记住,LISP上下文仅在活动图形中,因此您不能使用(setvar 'DELOBJ 1) 也许您可以通过vlax做到。但这是时候,我现在无法帮助您。当我有样品时,我会更新。

答案 1 :(得分:0)

“ DELOBJ”系统变量保存在注册表中,因此它与任何文档都没有关系...(实际上,某些Sysvar保存在文档中,但是如果您只需要关注这一点...)

请参阅: ADSK Knowledge Network

因此,您为每个配置文件设置一次(一个简单的.reg文件就足够了)

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD\[Release]\[Product]\Profiles\[Profile]]
"Delobj"=dword:00000001

答案 2 :(得分:0)

您可以使用此代码从注册表中提取值。

(vl-registry-read (strcat "HKEY_CURRENT_USER\\" (vlax-product-key) "\\Profiles\\" (vla-get-ActiveProfile (vla-get-profiles (vla-get-preferences (vlax-get-Acad-Object)))) "\\General") "Delobj")

检查其是否不是1,然后使用vl-registry-write