如何控制OPEN命令vi
嗨,球童们,正如你们大多数人所知,CommandWillStart和CommandEnded是两个反应器,当一个命令调用和一个命令结束时触发。
我正在寻找一种方法来控制打开命令后,选择一个图形,然后才真正打开它。这个任务可能吗?
非常感谢您的建议和帮助。 您可以创建一个包含类似以下内容的函数,而不是使用“open”命令
setq filePath (getfiled "Select file" "" "dwg" )
这样,您将只返回文件路径,允许您在打开文件之前执行任何操作。
希望这有帮助 阿汉哈-请澄清。。。我不明白在打开一幅画之前,你想对它做什么?
SOliver-不幸的是,GetField没有提供保存的快捷方式(标准打开对话框左侧的链接),也没有“记住”上次打开的目录(没有额外的编码,可能使用GETENV/SETENV?),这就是为什么我也使用带有标准OPEN、XATTACH等命令的reactor。但是,在较新版本的AutoCAD中,我必须修改代码以包含前置命令(INITDIA),以便强制执行某些命令的对话框版本。
SOliver,非常感谢您的建议,但更改OPEN命令不会影响。打开(内部ommand),因此任何调用“_.OPN”或“.OPEN”的代码都将绕过我捕获要打开的文件的方式。
RenderMan,我想:
1-确定图形是否为只读。
2-在某些情况下(取决于登录(用户)的名称),即使它实际上不是只读的,也可以在没有任何消息的情况下以只读方式打开它。
3-对于某些情况,请像AutoCAD一样打开它。
我希望它足够清楚?
是的,这很有帮助。
不幸的是,考虑到您概述的条件步骤,您将不得不使用getfield选项。下面是一个小示例,它结合了Lee的_FileOpen-p函数来确定只读状态:
(defun c:FOO(/ _FileOpen-p _Open f)
(princ "\rFOO ")
(vl-load-com)
(defun _FileOpen-p(fileName / f)
;; Lee Mac, 2011
;; filename = filename of file to test
;; Returns T if specified file is open
(if (setq f (open fileName "a"))
(close f)
T))
(defun _Open (acApp f o)
(vla-activate (vla-open (vla-get-documents acApp) f o)))
(if (setq f (getfiled "Select file" "" "dwg" )
((lambda (acApp user / s)
(cond
;; If user is a member, open read-only
((vl-position user '("user1" "user2" "user3"))
(_Open acApp f :vlax-true))
;; If available, open normally, else open read-only
((if (_FileOpen-p f)
(progn
(alert "File is already open. ")
(_Open acApp f :vlax-true))
(_Open acApp f :vlax-false)))))
(vlax-get-acad-object)
(getvar 'loginname)))
(princ))
希望这有帮助!
**编辑-在选择位于(getvar’dwgprefix)中的图形时,还要注意GetField的行为,因为您需要使用STRCAT添加active directory。
非常感谢RenderMan,这真的很有帮助。
李,一如既往,您可以回答AutoCAD编码中的任何问题。
我非常感谢你的帮助。
不客气。
页:
[1]