找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 15203|回复: 32

[系统] 自动将加载的Lisp所在路径加入Support

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-10 09:20:01 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::AutoLoadLisp
调用格式: (XD::AutoLoadLisp)
参数说明:
返回值:
函数简介: 用 Appload 或者拖入CAD窗口的 Lisp 自动将其所在的目录添加到 Support
函数来源: 原创
函数作者: st788796
适用版本: 不限 
最后更新时间: 2013-07-10
备注: 将本函数放在lisp的最后实现添加 Support
演示图片: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
[ 本帖最后由 st788796 于 2013-7-10 18:20 编辑 ]\n\n[ 本帖最后由 st788796 于 2013-7-10 18:20 编辑 ]\n\n[ 本帖最后由 st788796 于 2013-7-10 12:07 编辑 ]\n\n
  1. (defun XD::String:Parse (str delimiter / post strlst strl)
  2.   (if str
  3.     (progn
  4.       (setq strlst '()
  5.      strl   (strlen delimiter)
  6.       )
  7.       (while (vl-string-search delimiter str)
  8. (setq post (vl-string-search delimiter str))
  9. (setq strlst (append strlst (list (substr str 1 post))))
  10. (setq str (substr str (+ post (1+ strl))))
  11.       )
  12.       (vl-remove "" (append strlst (list str)))
  13.     )
  14.   )
  15. )
  16. (defun XD::AutoLoadLisp (/ htm Clip_Bord txt path)
  17.   (setvar "cmdecho" 0)
  18.   (vl-cmdf ".copyhist")
  19.   (setq htm   (vlax-create-object "htmlfile")
  20. Clip_Bord (Vlax-Get-Property
  21.       (Vlax-Get htm 'ParentWindow)
  22.       'ClipboardData
  23.     )
  24.   )
  25.   (setq txt (reverse
  26.        (mapcar 'strcase
  27.         (reverse (xd::string:parse
  28.      (Vlax-Invoke Clip_Bord 'GetData "text")
  29.      "\r\n"
  30.           )
  31.         )
  32.        )
  33.      )
  34.   txt (mapcar '(lambda (x)
  35.          (if (wcmatch x "命令:*")
  36.     (substr x 7)
  37.     (subst x 10)
  38.          )
  39.        )
  40.       tx
  41.      )
  42. txt (vl-remove-if-not '(lambda (x) (wcmatch x "*LOAD*")) txt)
  43.   )
  44.   ;;晓东通用LISP函数库Build 2013.07.03加载完毕...!
  45.   (if txt
  46.     (progn
  47.       (if (wcmatch (car txt) "*APPLOAD")
  48. (setq patch (vl-registry-read
  49.         (strcat "HKEY_CURRENT_USER\\"
  50.          (vlax-product-key)
  51.          "\\Profiles\\"
  52.          (Getvar "Cprofile")
  53.          "\\Dialogs\\Appload"
  54.         )
  55.         "Maindialog"
  56.       )
  57. ) ;_appload 加载的
  58. (setq path (vl-filename-directory
  59.        (substr (vl-string-trim "(,)" (car txt)) 7)
  60.      )
  61. ) ;_窗口拖入或者手动加载的
  62.       )
  63.       (if
  64. (and path
  65.       (not
  66.         (vl-position
  67.    (strcase path)
  68.    (mapcar 'strcase (xd::string:parse (getenv "ACAD") ";"))
  69.         )
  70.       )
  71. )
  72.   (setenv "ACAD"
  73.    (strcat (getenv "ACAD") ";" path)
  74.   )
  75.       )
  76.     )
  77.   )
  78.   (vlax-release-object htm)
  79.   (princ)
  80. )
  81. (defun c:Autoloadlisp ()   (XD::AutoLoadLisp)   (princ "\nStart Command with Autoloadlisp to ADD Support Path!")   (princ))
  82. (princ)

评分

参与人数 1D豆 +5 收起 理由
牢固 + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-7-10 11:29:34 | 显示全部楼层
有一个笔误: "Maildialog"==>"Maindialog"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-7-10 12:02:12 | 显示全部楼层
本帖最后由 牢固 于 2013-7-10 12:21 编辑

这句代码是有问题的:
(setq txt (mapcar '(lambda (x) (vl-string-trim "COMMAND: " x)) txt))
它会把 "APPLOAD" 或"COMMAND:  APPLOAD"变成 “PPL”, 就不会得到正确结果啦!用vl-string-subst函数替换吧!

点评

用 Substr 替换了,最后增加个提示,用命令添加  详情 回复 发表于 2013-7-10 18:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-7-10 12:44:04 | 显示全部楼层
发现该函数在拖入加载方式时无效,将本函数放入叫加载的程序里,拖入窗口加载改程序,得不到加载的路径!因为函数运行时,程序的加载在命令行里还没有开始回显加载路径,所以也就得不到路径!
通过appload加载方式是可以得到路径的!

点评

测试了下用 vl-string-trim 还是有Bug,trim 的是匹配符,不是字符串,所以这个还是应该用 Substr 另外这个拖入G版说的对,拖入的时候是内存加载,回先不到命令行,正确的应该有个命令,拖入后运行就可以了。 _$ (  详情 回复 发表于 2013-7-10 17:08
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 862个

财富等级: 财运亨通

发表于 2013-7-10 13:54:11 | 显示全部楼层
学习了·~~~~~~~~~~~~~~~~~~~~~~~~~~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2013-7-10 17:08:24 | 显示全部楼层
牢固 发表于 2013-7-10 12:44
发现该函数在拖入加载方式时无效,将本函数放入叫加载的程序里,拖入窗口加载改程序,得不到加载的路径!因 ...

测试了下用 vl-string-trim 还是有Bug,trim 的是匹配符,不是字符串,所以这个还是应该用 Substr
另外这个拖入G版说的对,拖入的时候是内存加载,回先不到命令行,正确的应该有个命令,拖入后运行就可以了。
_$ (vl-string-trim "COMMAND: " "COMMAND: AP APPLOAD")
"P APPL"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2013-7-10 18:22:01 | 显示全部楼层
本帖最后由 st788796 于 2013-7-10 18:25 编辑
牢固 发表于 2013-7-10 12:02
这句代码是有问题的:
(setq txt (mapcar '(lambda (x) (vl-string-trim "COMMAND: " x)) txt))
它会把 " ...

用 Substr 替换了,最后增加个提示,用命令添加
放入 xd-lisp-lib.vlx  并和 xdrxapi 在同一路径下,就可以实现自动添加路径并加载 api
下一个可以用 vl-registry-write 将 xdrxapi 写入自动加载
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2013-7-10 21:44:15 | 显示全部楼层
这个函数牛,想不到还真的能实现自动加载路径。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-7-10 21:55:59 | 显示全部楼层
好函数,留个记号
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 185个

财富等级: 日进斗金

发表于 2013-7-11 10:33:41 | 显示全部楼层
有没有对应的函数:把已经添加进支持路径删除,包括删除注册表里面的东西

点评

删除路径好办,注册表删除用 vl-registry-delete ,这个函数不能对 HKLM 操作  详情 回复 发表于 2013-7-11 13:37
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2013-7-11 13:37:56 | 显示全部楼层
gdslqs 发表于 2013-7-11 10:33
有没有对应的函数:把已经添加进支持路径删除,包括删除注册表里面的东西

删除路径好办,注册表删除用 vl-registry-delete ,这个函数不能对 HKLM 操作

点评

支持路径 存放在注册表 HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R16.0\ACAD-201:804\Profiles\\General\ACAD 位置,直接通过修改注册表 ACAD 键值好像不能达到修改支持路径效果!修改键值后,关闭CAD,再打开C  详情 回复 发表于 2013-7-11 14:09
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-7-11 14:09:27 | 显示全部楼层
st788796 发表于 2013-7-11 13:37
删除路径好办,注册表删除用 vl-registry-delete ,这个函数不能对 HKLM 操作

支持路径 存放在注册表 HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R16.0\ACAD-201:804\Profiles\<<未命名配置>>\General\ACAD 位置,直接通过修改注册表 ACAD 键值好像不能达到修改支持路径效果!修改键值后,关闭CAD,再打开CAD,注册表键值又被恢复了!
我怀疑是不是CAD打开后,这些环境变量是驻留在内存里,退出CAD后再恢复到注册表去!所以只能在CAD里修改!

点评

支持路径直接用 (setenv "ACAD") 修改不能保存?  详情 回复 发表于 2013-7-11 14:41
哦? 那G版,你修改注册表后,别进CAD,重新启动下机器看看,进CAD还给修改回去不? 如果还是修改回去,那就说明还有其他地方存这个路径了,还需继续找。  详情 回复 发表于 2013-7-11 14:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-7-11 14:22:34 | 显示全部楼层
牢固 发表于 2013-7-11 14:09
支持路径 存放在注册表 HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R16.0\ACAD-201:804\Profiles\\Gen ...

哦? 那G版,你修改注册表后,别进CAD,重新启动下机器看看,进CAD还给修改回去不? 如果还是修改回去,那就说明还有其他地方存这个路径了,还需继续找。

点评

还有一个地方是保存在CAD的GUID的路径下HKEY_USERS\S-1-5-21-682003330-484061587-1801674531-500\Software\Autodesk\AutoCAD\R16.0\ACAD-201:804\Profiles\\General,包括那个启动组的也是在这个路径下有一份,但是  详情 回复 发表于 2013-7-11 15:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2013-7-11 14:41:42 | 显示全部楼层
牢固 发表于 2013-7-11 14:09
支持路径 存放在注册表 HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R16.0\ACAD-201:804\Profiles\\Gen ...

支持路径直接用 (setenv "ACAD" path) 修改不能保存?

点评

(SetEnv “ACAD" path) 当然可以修改支持路径那个!  详情 回复 发表于 2013-7-11 15:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-7-11 15:18:21 | 显示全部楼层
st788796 发表于 2013-7-11 14:41
支持路径直接用 (setenv "ACAD" path) 修改不能保存?

(SetEnv “ACAD" path) 当然可以修改支持路径那个!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-25 15:59 , Processed in 0.485524 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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