vlx、lsp快捷键定义的通用函数制作
本帖最后由 kele99kele 于 2015-8-19 00:27 编辑xyp1964版主于2012年关于自定义vlx插件快捷键的回帖我修改了下,如下:(if (null c:tt)
(progn
(load "nice_hualouti_v3.2.3.lsp")
(setq tt c:nice_hualouti)
(defun c:tt ()(tt))
(vl-acad-undefun 'c:nice_hualouti)
)
)我现在想将这个程序做成一个通用函数,求助如何实现
思路如下:(defun N::SetKey (newkey oldkey filename)
(if (null (strcat "c:" newkey))
(progn
(load (strcat "\"" filename"\""))
(setq newkey (strcat "c:" oldkey))
(defun (strcat "c:" newkey) ()(newkey))
(vl-acad-undefun (list (strcat "c:" oldkey)))
)
)
)有点驴唇不对马嘴的感觉,变量不是变量,字符串不是字符串的,请高手帮忙改改
本帖最后由 llsheng_73 于 2015-8-19 03:13 编辑
最尴尬的问题是 (defun (strcat "c:" newkey) ()(newkey))因为语法错误而无法执行,别的一些地方相对来说还有解决的办法,比如刚开始的条件判断(null(strcat"c:"newkey))会被判断为假期而不能进入(progn...)部分,改成(null(eval(read(strcat"c:"newkey))))就行.这种类似问题还有好几处。。
为了规避defun语句的语法问题。可以在程序过程中生成一个临时lsp,写入(defun (strcat "c:" newkey) ()(newkey))这一部分,然后加载它后删除临时lsp文件,从而使得defun能够被正确执行 本帖最后由 kele99kele 于 2015-8-19 10:03 编辑
llsheng_73 发表于 2015-8-19 02:57 static/image/common/back.gif
最尴尬的问题是 (defun (strcat "c:" newkey) ()(newkey))因为语法错误而无法执行,别的一些地方相对来说还有 ...
生成临时文件的办法我认为可行,之前也想过,想法不成熟 kele99kele 发表于 2015-8-19 10:02 static/image/common/back.gif
生成临时文件的办法我认为可行,之前也想过,想法不成熟
(defun N::SetKey (newkey oldkey filename)
(if (null (eval (read (setq newkey (strcat "c:" newkey)))))
(progn
(load filename)
(setq oldkey (strcat "c:" oldkey))
(eval (list 'defun (read newkey) () (list (read oldkey))))
(vl-acad-undefun (read oldkey))
)
)
) 如果有用那是太好了 是最理想的吧,可以随时加载
页:
[1]