我最近开始为AUTOCAD编写脚本。 我要执行以下操作:
假设,我将脚本放置在当前位置。 在当前位置,我有几个文件夹。每个文件夹依次包含许多文件夹,这些文件夹又包含一些图形文件(.DWG和.DWT类型)。 我想遍历每个文件夹并获得仅包含.DWT文件的列表。
现在,我要遍历每个.DWT文件并在AUTOCAD中打开文件,将参数“ DELOBJ”的值更改为1(例如),最后保存并关闭文档。
我们可以使用普通的SCR脚本来做到这一点吗(或者可以使用LISP Command来做到这一点)? 如果有人能在这种情况下为我提供帮助,我将非常高兴
谢谢。
答案 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保存在文档中,但是如果您只需要关注这一点...)>
因此,您为每个配置文件设置一次(一个简单的.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