Comatosis 发表于 2022-7-6 08:58:05

写一个打开面包的脚本

我假设其他人在某个时候需要这样做,但我找不到任何好的信息(或者至少我找到的信息只针对单个图形)。
 
我有一个LISP例程,它生成一个脚本,在特定文件夹中的所有图形上运行另一个LISP例程。我在图形上运行的例程只收集来自它们的信息,并且根本不会更改图形,因此我希望以只读方式打开图形,以防止任何意外事件,并且防止在网络上其他人打开其中一个图形时脚本挂起。
 
这可行吗?我尝试在脚本生成器中添加一个额外的空间或“\n”,以在AutoCAD询问我是否要打开只读副本时“伪造”返回键的额外点击,但这并没有按预期工作(事实上,我被告知它只是因为某种原因无法打开脚本)。
 
谢谢

Jack_O'nei 发表于 2022-7-6 09:02:06

如果我在这里错了,有人会纠正我,但据我所知,“只读”属性是由操作系统设置的,图形实际打开时除外。在这种情况下,Autocad会生成一个锁定文件,以警告其他人图形已打开。我不知道有什么方法可以让你的系统认为它是只读的,只需要将文件复制到一个单独的目录并在那里设置“只读”标志。你也许可以修改你的lisp来为你做到这一点,但你必须询问lisp大师。让它为你要处理的文件创建一个副本,做任何你要做的事情,然后删除副本。这样你就不必担心其他人,也不会因为有太多额外的文件而把硬盘弄得乱七八糟。

Comatosis 发表于 2022-7-6 09:07:08

嗯,我曾想过这样做,至少在完成任务后自动删除生成的脚本文件。一般来说,我希望这个过程尽可能自动化,但我有点担心创建一个过程,将所有图形复制到另一个文件夹,运行脚本,然后删除该文件夹。如果有人在运行此脚本后无意中删除了原始图形,我将立即失去工作。

Jack_O'nei 发表于 2022-7-6 09:11:23

 
设置权限级别,以便只有某些人可以保存到存储他们的驱动器。其他人保存到“已提交”文件夹中,当更改获得批准时,具有驱动器写入权限的人(我建议检查图形的人)将其保存到共享驱动器中。这样就不会发生意外,你就不需要复制了。

BlackBox 发表于 2022-7-6 09:13:56

以下是RK最近发布的关于*的一些附加信息。DWL*文件:
 
 
林奇
 
我不确定这是否有助于操作,但这是一个如何以只读方式打开图形的简单示例:
 

(defun c:OPENR ()
(princ "\nOPEN READ-ONLY ")
(vl-load-com)
((lambda (acApp / f)
      (if (/= 1 (getvar 'sdi))
      (if (setq f (getfiled "Select file to open read-only" "" "dwg" 16))
          (vla-activate
            (vla-open (vla-get-documents acApp) f :vlax-true)))
      (prompt "\n** Command not available in SDI mode ** ")))
   (vlax-get-acad-object))
(princ))

Comatosis 发表于 2022-7-6 09:19:47

 
我在其他地方找到了一篇文章,其中显示了通过取消定义和重新定义“open”命令以只读方式打开图形的代码,但我不知道如何抑制弹出的对话框。将FILEDIA和CMDDIA设置为0没有任何作用。
 
这是我试过的,从http://forums.augi.com/showthread.php?t=104865
 


(vl-load-com)
(command "._undefine" "open")
(defun C:open ()
(setq fn (getfiled "Select Drawing" "" "dwg" 0))
(if (zerop (getvar "SDI"))
   (vlax-invoke-method
   (vla-get-documents (vlax-get-acad-object))
   'Open
   fn
   :vlax-true
   )
)
)



 
去掉/替换getfield命令可以解决这个问题吗?

Jack_O'nei 发表于 2022-7-6 09:25:28

 
我曾经工作过的一个地方就是这样做的,但我们有几百名起草人分布在几个州。如果你每天晚上都把省下来的钱备份起来,即使有人把事情搞砸了,你也永远不会损失超过一天的钱。

BlackBox 发表于 2022-7-6 09:27:38

虽然取消定义OPEN将起作用,但您需要重新定义命令,可能还需要包括错误检查,以便在发生错误时恢复OPEN。IMO-最好有一个单独的命令。
 
使用OPENR命令,您可以从命令行进行如下调用:
 

(defun _OPENR (f) (_OpenReadOnly f))
(defun _OpenReadOnly (f)
;; Example (_OpenReadOnly "C:\\file.dwg")
(princ "\nOPEN READ-ONLY ")
(vl-load-com)
((lambda (acApp)
      (if (/= 1 (getvar 'sdi))
      (if (findfile f)
          (vla-activate
            (vla-open (vla-get-documents acApp) f :vlax-true))
          (prompt "\n** File not found ** "))
      (prompt "\n** Command not available in SDI mode ** ")))
   (vlax-get-acad-object))
(princ))

Jack_O'nei 发表于 2022-7-6 09:30:53

看,我知道有更好的方法的人最终会出现。这些Lisp程序的家伙会治好你的。我对Lisp程序非常了解,看到一个Lisp程序,我会说“是的,这是Lisp程序的惯例!”

Comatosis 发表于 2022-7-6 09:36:12

 
我做错什么了吗?
 

Command: (_openr "C:\dir\dir\dir\drawingfile.dwg")
OPEN READ-ONLY

 
该命令只输出princ语句,但没有打开任何文件。
页: [1] 2
查看完整版本: 写一个打开面包的脚本