Steven P 发表于 2022-7-5 14:58:33

通过LISP关闭图形

下午好
我已经“升级”到包括将AutoCAD链接到projectwise(如果您不使用文档管理数据库/软件)。每次关闭图形时,它都会以projectwise方式进行检查,以查看是否通过它打开了图形-如果是,我会获得检查图形签入的选项,等等,如果不是AutoCAD正常工作。
 
我有一个LISP例程,它将批量处理其他LISP例程(虽然不完美,但它可以正常工作),当这个LISP例程尝试关闭图形时,projectwise会导致未经处理的访问错误(我的例程打开、处理、按需保存并依次关闭每个图形)
 
我正在使用一个标准的“close”命令-是否有另一种方法来关闭LISP例程中的图形,projectwise不会将其识别为“close”,我尝试了VLA-close,但无法使其工作,除非我做错了什么。
 
非常感谢
 
 
 
 
(注意,我的代码不整洁,所以我不愿意在这里发布-我认为在我完成它之前,阅读它的时间会比应该的时间长得多,但如果必要的话,我会发布它的部分)

Jef! 发表于 2022-7-5 15:16:20

通常,如果你做错了什么事,它不起作用,它是成对的;P(vla Close(vla get ActiveDocument(vlax get acad object)):vlax false);保存更改标志
 
project wise不会认为已经接近了?我不确定你的意思,但有一件事你必须注意的是,lisp“存在”在一个图形中,如果你关闭运行lisp的图形,执行就会立即停止。这就像锯一根你坐在上面的树枝。如果你做得不对,工作就会完成,但也有副作用。之后你不能继续,不管怎样,我很确定局部变量不会超出范围,垃圾收集也不会完成它的工作,一些Acad的变量/标志不能正确重置。几年前,我做了一个关闭图形并以只读方式重新打开它的例程,这样我就可以通过双击资源管理器以只读方式打开dwg,以避免从Acads打开对话框手动浏览,如果我在cad会话中使用它32次,我最终不得不关闭cad,因为它会弹出一个窗口,告诉我在一个会话中不能同时打开超过32个图形。对于cad来说,无论使用何种方法(command、vl cmdf、command-s、vla close、vla sendcommand、vla quit。。。
 
关闭包含lisp文件的执行并不是一个100%完美的解决方案。不要期望它无休止地/成批运行。

ronjonp 发表于 2022-7-5 15:25:45

我的哀悼。。。

rlx 发表于 2022-7-5 15:35:02

从我的rlxbatch应用程序中删除的董事:
 
 

;--- Close ---------------------------------------------- Begin Close Utilities ------------------------------------------------- Close ---

(defun RlxBatch_CloseAllButCurrent (/ dwg )
(vlax-for dwg (vla-get-Documents (vlax-get-acad-object))
   (if    (= (vla-get-Active dwg) :vlax-False)
   (if (= (vla-get-ReadOnly dwg) :vlax-true)
   (vla-close dwg :vlax-False)
   (vl-catch-all-apply (function (lambda ()(if (/= (getvar "dwgtitled") 0)(vla-save dwg))(vla-close dwg :vlax-False))))
   )
   )
)
)

(defun quit_all ( / dwg)
(vlax-for dwg (vla-get-Documents (vlax-get-acad-object)) (if (= (vla-get-active dwg) :vlax-false)(vla-close dwg :vlax-false)))
(command-s "._close" "_y")
)

(defun close_all ( / dwg ) (vlax-for dwg (vla-get-Documents (vlax-get-acad-object))(vla-close dwg :vlax-True)))

;--- Close ----------------------------------------------- End Close Utilities -------------------------------------------------- Close ---

Steven P 发表于 2022-7-5 15:47:50

到目前为止,我仍然无法让它工作,今天上午,所以将有另一个在这之前发生的一切看看,如果它可以,稍后会问更多的问题?

Jef! 发表于 2022-7-5 15:56:24

我想知道Project wise究竟如何/如何监视autocad。。。我的猜测是,不管使用什么方法(command、vl cmdf、command-s、vla close、vla sendcommand、vla quit),它仍然就像DWG从未关闭一样。唯一可行的方法是在lisp中保存所有内容,并邀请用户自己关闭图形。如果您发现新的内容,请随时与我们联系。

Steven P 发表于 2022-7-5 16:06:35

谢谢Jef,我没有试过command-s,但这类软件很管用(为什么这样做而其他选项不管用,我不知道但它管用)
(至于我剩下的例行程序,它会一个接一个地打开图形,执行需要执行的任何操作,然后在所有图形都被修改时关闭它们-我想这只是我需要修改的代码)
页: [1]
查看完整版本: 通过LISP关闭图形