kele99kele 发表于 2015-8-19 00:26:11

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 02:57:46

本帖最后由 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:02:13

本帖最后由 kele99kele 于 2015-8-19 10:03 编辑

llsheng_73 发表于 2015-8-19 02:57 static/image/common/back.gif
最尴尬的问题是 (defun (strcat "c:" newkey) ()(newkey))因为语法错误而无法执行,别的一些地方相对来说还有 ...
生成临时文件的办法我认为可行,之前也想过,想法不成熟

nzl1116 发表于 2015-8-19 11:08:53

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))
    )
)
)

tranney 发表于 2016-1-8 16:31:44

如果有用那是太好了

curugi 发表于 2018-2-1 01:46:13

是最理想的吧,可以随时加载
页: [1]
查看完整版本: vlx、lsp快捷键定义的通用函数制作