明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3640|回复: 5

[已解答] vlx、lsp快捷键定义的通用函数制作

[复制链接]
发表于 2015-8-19 00:26:11 | 显示全部楼层 |阅读模式
本帖最后由 kele99kele 于 2015-8-19 00:27 编辑

xyp1964版主于2012年关于自定义vlx插件快捷键的回帖我修改了下,如下:
  1. (if (null c:tt)
  2.   (progn
  3.     (load "nice_hualouti_v3.2.3.lsp")
  4.     (setq tt c:nice_hualouti)
  5.     (defun c:tt ()(tt))
  6.     (vl-acad-undefun 'c:nice_hualouti)
  7.   )  
  8. )
我现在想将这个程序做成一个通用函数,求助如何实现
思路如下:
  1. (defun N::SetKey (newkey oldkey filename)
  2.   (if (null (strcat "c:" newkey))
  3.     (progn
  4.       (load (strcat """ filename"""))
  5.       (setq newkey (strcat "c:" oldkey))
  6.       (defun (strcat "c:" newkey) ()(newkey))
  7.       (vl-acad-undefun (list (strcat "c:" oldkey)))
  8.     )  
  9.   )
  10. )
有点驴唇不对马嘴的感觉,变量不是变量,字符串不是字符串的,请高手帮忙改改
发表于 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能够被正确执行
 楼主| 发表于 2015-8-19 10:02:13 | 显示全部楼层
本帖最后由 kele99kele 于 2015-8-19 10:03 编辑
llsheng_73 发表于 2015-8-19 02:57
最尴尬的问题是 (defun (strcat "c:" newkey) ()(newkey))因为语法错误而无法执行,别的一些地方相对来说还有 ...

生成临时文件的办法我认为可行,之前也想过,想法不成熟
发表于 2015-8-19 11:08:53 | 显示全部楼层
kele99kele 发表于 2015-8-19 10:02
生成临时文件的办法我认为可行,之前也想过,想法不成熟

  1. (defun N::SetKey (newkey oldkey filename)
  2.   (if (null (eval (read (setq newkey (strcat "c:" newkey)))))
  3.     (progn
  4.       (load filename)
  5.       (setq oldkey (strcat "c:" oldkey))
  6.       (eval (list 'defun (read newkey) () (list (read oldkey))))
  7.       (vl-acad-undefun (read oldkey))
  8.     )  
  9.   )
  10. )

点评

亲测可行,谢谢老兄帮忙  发表于 2015-8-19 12:33
发表于 2016-1-8 16:31:44 | 显示全部楼层
如果有用那是太好了
发表于 2018-2-1 01:46:13 | 显示全部楼层
是最理想的吧,可以随时加载
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-23 04:12 , Processed in 0.451956 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表