VLX或者fas文件的命令忘了,怎么办?
本帖最后由 llsheng_73 于 2015-9-19 15:11 编辑以下这种经历相信很多人都会有过
得到一个不错的程序,是编译后的,用着不错,但时间久了不用之后,再需要用的时候发现一个很尴尬的事:忘了命令是什么了
以前我给别人程序也是编译后的,文件名一般就是命令名(希望看到文件就知道它命令是什么),但有人根据其作用把名字改了(怕时间久了不知道做什么用)。这样一来好了,作用倒是清楚了,但命令是什么呢?时间太久问我也不一定知道了。。。后来我一般就在编译前在最后加一句princ或者alert,把主要作用及命令简短的说一下,这样确实避免了很多开头说到的尴尬。
说了这么多,这种问题怎么办呢,别急,办法还是有的,今天才试出来
新开一个空图,在需要查看命令或者函数的的vlx或者fas文件被加载前运行(setq 加载前(atoms-family 0)临时 0) 然后再加载你的vlx或者fas文件,运行代码(vl-reomve-if'(lambda(x)(member x 加载前))(atoms-family 0)) 最后会得到一个表,这个表里边除了最后两项都是刚才加载那个文件所定义的函数(最后两项一般是刚才所定义的两个变量 加载前 临时),看到里边有C:XXXX之类的,是不是会高兴得想跳起来?
当然,也有可能除了刚才自己定义的两个变量,什么也没有!很郁闷?这不是方法的问题,而是习惯的问题,后边会提到。
那两个setq语句后边还加了一个根本没用的,可以试下去掉它会怎么样,可以肯定的是对最后结果没影响,但过程可能会比较..... 38楼G版已经放出工具了,大家稍微修改下就更方便了,在此感谢G版!!!
此外,经常看到一些人它的CAD启动组里边一大堆,各种常用不常用的程序差不多都在,他们的理由的用掉时候再去加载它们麻烦。问题是很多东东其实根本就很少用到,另外那一大堆程序来源各不相同。很难保证不会相互影响,比如无法保证都无全局变量,也不能保证没有同名函数。当有同名全局变量的情况下,可以先运行A正常,然后运行B不正常,反过来也一样。。
而当有函数同名就惨了,很可能单独加载都能用,或者单独加载A能用,加载了B后,B能用但A用不了啦。。。无语
其实这里想说的是,喜欢把用不用的都放一堆的,最好也看下有没有可能会因为函数同名或全局变量同名而引起冲突,
空图加载一个程序,按前边说的方法得到一个表,运行程序一次后再得到另一个表,两个表处理一下,就可以知道这个程序有没有用到全局变量,都是些什么。。。。然后就可以判断这些vllx或才fas文件全部加载会不会出现冲突,当然,这个活不一定轻松,但建议一定要做,其实也可以自己做个小工具来检测,好了,这后边的早就跑题了. ;查看C函数名称
(defun c:tt (/ l fn)
(setq l (mapcar 'eval (atoms-family 0)))
(if (setq fn (getfiled "" "" "lsp" 4))
(progn
(load fn)
(mapcar
(vl-remove-if-not
'(lambda (x) (= "C:" (substr x 1 2)))
(mapcar
'VL-PRINC-TO-STRING
(vl-remove-if
'(lambda (x) (member (eval x) l))
(atoms-family 0)
)
)
)
)
)
)
(princ)
) 你这思路好啊 本帖最后由 树櫴希德 于 2015-8-13 19:06 编辑
占个沙发 太有道理了
新开一个图,不要加载你不知道命令的那个vlx或者fas文件,在控制台运行(setq 加载前(atoms-family 0)临时 0)
然后再加载你想知道里边有些什么函数或者命令的vlx或者fas文件,再到控制台运行(setq 加载后(atoms-family 0)临时 0)
最后运行一句(vl-remove-if'(lambda(x)(member x 加载前))加载后)会得到一个表,这个表里边除了最后两项都是刚才加载那个文件所定义的函数还会有刚才所定义的两个变量 加载前 临时 多谢分享了! 不错。。。 论坛已有,搜索一下就得了 谢谢73哥,哈哈,按你的方法终于找到了程序命令... reyun 发表于 2015-8-13 23:32 static/image/common/back.gif
谢谢73哥,哈哈,按你的方法终于找到了程序命令...
嗯嗯,是的哈。 是的,有时候真的会忘记命令。。 这个很不错呢,
楼主能不能把它编成一个程序,用起来更直接点! 看看,不知道是不是有用