请问一下lisp可不可以直接打开上次关闭的dwg文件
本帖最后由 Rocky121209 于 2016-7-6 18:39 编辑就是想加个命令打开这个文件,不知道是否可以?
很感谢各位的耐心解答,最终采用了18楼Sylvanas的代码,已经达到了我想要的结果,感谢大家
果然是强迫症
那好吧 其实要解决这个scr文件也是可以的。
改成这样
(defun c:tt ()
(setq ffn "D:\\openfile.scr"
ff (open ffn "w")
)
(write-line "open \"\" (while (null (vl-file-delete \"D:\\openfile.scr\"))(command \"delay\" 100))" ff)
(close ff)
(command "script" ffn)
)
这样就一次解决了,路径命令什么的自己改
我之所以习惯不删是因为经常用scr,路径都是一样的,方便管理和调试排错
我是想加一行命令到现有的lisp里的,所以。。。不想用鼠标点
当Filedia设置为0的时候,open命令的默认项就可以达到我要求,但是怎么把open写到lisp里??比如就我现在这个时候,如何执行open命令,然后就默认选项就可以了,代码怎么写? 或者获取到上次打开文件的完整路径? 额,没人能帮帮忙吗? 还是我问得不对? 或者再变通一下,弹出个文件选择框,选择文件在当前CAD打开。。。一定要在当前CAD打开,不然我其他lisp失效。。。 Rocky121209 发表于 2016-7-4 09:51 static/image/common/back.gif
或者再变通一下,弹出个文件选择框,选择文件在当前CAD打开。。。一定要在当前CAD打开,不然我其他lisp失效 ...
弹出文件选择框是可以办到的 (defun qf_getFolder (msg / WinShell shFolder path catchit)
(vl-load-com)
(setq winshell (vlax-create-object "Shell.Application"))
; (vlax-dump-object winshell T)
(setq shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1))
(setq
catchit (vl-catch-all-apply
'(lambda ()
(setq shFolder (vlax-get-property shFolder 'self))
(setq path (vlax-get-property shFolder 'path))
)
)
)
(if (vl-catch-all-error-p catchit)
nil
path
)
) 你的思路也可以直接实现
(setq fso (vlax-get-or-create-object "Scripting.FileSystemObject") )
(setq filelist (vl-directory-files"C:\\Users\\***\\AppData\\Roaming\\Autodesk\\AutoCAD 2014\\R19.1\\chs\\Recent\\选择文件"nil 0))
(setq filelist (cdr (cdr filelist)))
(foreach x filelist
(progn
(setq fn(vlax-invoke-method fso 'getfile(strcat"C:\\Users\\***\\AppData\\Roaming\\Autodesk\\AutoCAD2014\\R19.1\\chs\\Recent\\选择文件\\"x)))
(setq datelst(cons (cons x (vlax-get-property fn 'DateCreated))datelst)
)
)
然后比较datelst找到最新的文件,打开相应文件名即可 试试scr吧
(defun c:tt ()
(setq ffn "D:\\openfile.scr"
ff (open ffn "w")
)
(write-line "open \"\"" ff)
(close ff)
(command "script" ffn)
)
路径自己改喜欢的,至于生成的scr嘛,不碍事就留着好了。
强迫症的话可以手动删,或者在acaddoc.lsp加一条
(vl-file-delete "D:\\openfile.scr")
每次打开dwg文件自动删
同理路径自己改