明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2571|回复: 3

[求助]如何在cad生成下拉菜单

[复制链接]
发表于 2010-7-29 07:18:00 | 显示全部楼层 |阅读模式

我在网上收集了一些程序,改编了一些自己觉得方便的命令,放在一个lsp名目内加载使用.多了时间长有些命令一时想不起.

我想如果能生成下拉菜单,点击菜单就显示出连接命令就方便快捷多了.

如加载后在工具栏显示 :"欢迎使用"

下拉菜单后有一个一个的菜单提示连接命令
"ofl留下选中层f1画直角线mj标注面积 fc分层标注 bz标注长度 zbbz坐标标注" 等等

这样加载后,在工具栏生成菜单.就好多了.

请大侠给予指教,如何编辑这样的lsp程序,其它语言也行.

请麻烦或发送到461045462@qq.com

在此先谢了.

发表于 2010-7-30 11:01:00 | 显示全部楼层
参考如下代码,你自己就能实现!
  1. ;;; 判断是否加载本文件
  2. (if (car (atoms-family 1 '("vl-load-com")))
  3.   (vl-load-com)
  4.   ;;else
  5.   (progn
  6.     (Alert
  7.       "这个程序集是为AutoCAD 2000以及更高的版本设计的,许多程序有可能在没有Visual Lisp for R14支持的AutoCAD R14上不能正确地运行。"
  8.     )
  9.     (exit) ; 版本不符,退出加载。
  10.   )
  11. )
  12. ;;;第二步,定义一些设置菜单与支持路径要用的基本函数:
  13. ;;; 以下定义文件中用到的函数
  14. ;;;----------------------------------------------------------------------------------
  15. ;;; 取得本程序的路径
  16. ;;; ---------------------------------------------------------------------------------
  17. (defun GetMyApplicationPath (AppID)
  18.   (vl-registry-read
  19.     (strcat
  20.       "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\"
  21.       AppID
  22.       "_is1"
  23.     )
  24.     "Inno Setup: App Path"
  25.   )
  26. )
  27. (defun GetQToolsPath ()
  28.   (GetMyApplicationPath "QTools for AutoCAD")
  29. )
  30. ;;; 解析字符串为表(函数来自明经通道转载)
  31. ;;; ---------------------------------------------------------------------------------
  32. (defun strParse (Str Delimiter / SearchStr StringLen return n char)
  33.   (setq SearchStr Str)
  34.   (setq StringLen (strlen SearchStr))
  35.   (setq return '())
  36.   (while (> StringLen 0)
  37.     (setq n 1)
  38.     (setq char (substr SearchStr 1 1))
  39.     (while (and (/= char Delimiter) (/= char ""))
  40.       (setq n (1+ n))
  41.       (setq char (substr SearchStr n 1))
  42.     ) ;_ end of while
  43.     (setq return (cons (substr SearchStr 1 (1- n)) return))
  44.     (setq SearchStr (substr SearchStr (1+ n) StringLen))
  45.     (setq StringLen (strlen SearchStr))
  46.   ) ;_ end of while
  47.   (reverse return)
  48. ) ;_ end of defun
  49. ;;; 反解析表为字符串(函数来自明经通道转载)
  50. ;;; ---------------------------------------------------------------------------------
  51. (defun StrUnParse (Lst Delimiter / return)
  52.   (setq return "")
  53.   (foreach str Lst
  54.     (setq return (strcat return Delimiter str))
  55.   ) ;_ end of foreach
  56.   (substr return 2)
  57. ) ;_ end of defun
  58. ;;; 移除支持文件搜索路径
  59. ;;; ---------------------------------------------------------------------------------
  60. (defun QF_RemoveSupportPath (PathToRemove / supportlist)
  61.   (setq supportlist (strparse (getenv "ACAD") ";"))
  62.   (setq supportlist (vl-remove "" supportlist))
  63.   (setq supportlist
  64.   (vl-remove-if
  65.     '(lambda (x) (= (strcase x) (strcase PathToRemove)))
  66.     supportlist
  67.   )
  68.   )
  69.   (setenv "ACAD" (strUnParse supportlist ";"))
  70. )
  71. ;;; 添加支持文件搜索路径
  72. ;;; ---------------------------------------------------------------------------------
  73. ;;; note:  第二个参数如果为真, 插最前,否则插最后
  74. ;;;        
  75. (defun QF_AddSupportPath (PathToAdd isFirst / supportlist)
  76.   (QF_RemoveSupportPath PathToAdd)
  77.   (setq supportlist (strparse (getenv "ACAD") ";"))
  78.   (setq supportlist (vl-remove "" supportlist))
  79.   (if isFirst
  80.     (setq supportlist (cons PathToAdd supportlist))
  81.     (setq supportlist (append supportlist (list PathToAdd)))
  82.   )
  83.   (setenv "ACAD" (strUnParse supportlist ";"))
  84. )
  85. ;;; 根据不同的AutoCAD版本加载不同的菜单文件:
  86. (defun Load_QToolsMenu (/ acadver)
  87.   (setq acadver (atof (getvar "acadver")))
  88.   (cond
  89.     ((and (&gt= acadver 15.0) (&lt acadver 16.0))
  90.      (command "_menuload" "QTools.mnu")
  91.     )
  92.     ((and (&gt= acadver 16.0) (&lt= acadver 16.1))
  93.      (command "_menuload" "QTools2004.mnu")
  94.     )
  95.     ((&gt= acadver 16.2) (command "_menuload" "QTools2006.mnu"))
  96.   )
  97. )
  98. ;;; The following code "placemenu" written by LUCAS
  99. ;;; 插入菜单条 Placemenu由LUCAS编写
  100. ;;; ---------------------------------------------------------------------------------
  101. (defun QTools_PlaceMenu (/ n)
  102.   (if (menugroup "QTools")
  103.     (progn
  104.       (setq n 1)
  105.       (while (&lt n 24)
  106. (if (menucmd (strcat "P" (itoa n) ".1=?"))
  107.    (setq n (+ n 1))
  108.    (progn
  109.      (if (&gt n 3)
  110.        (setq n (- n 2))
  111.        (setq n 3)
  112.      )    ;if
  113.      (menucmd (strcat "p" (itoa n) "=+QTools.pop3"))
  114.      (menucmd (strcat "p" (itoa n) "=+QTools.pop2"))
  115.      (menucmd (strcat "p" (itoa n) "=+QTools.pop1"))
  116.      (setq n 25)
  117.    )    ;progn
  118. )    ;if
  119.       )     ;while
  120.     )     ;progn
  121.   )     ;if
  122.   (princ)
  123. )
  124. ;;;好了,下面可以开始设计初始化工具箱的主程序了:
  125. ;;; 初始化主函数
  126. ;;; ---------------------------------------------------
  127. (defun Init_QTools ()
  128.   ;; 添加支持路径
  129.   (QF_AddSupportPath (GetQToolsPath) nil)
  130.   (QF_AddSupportPath (strcat (GetQToolsPath) "\\LISP") nil)
  131.   (QF_AddSupportPath (strcat (GetQToolsPath) "\\LIB") nil)
  132.   (QF_AddSupportPath (strcat (GetQToolsPath) "\\BIN") nil)
  133.   ;; 如果菜单组还没有被加载,则加载之
  134.   (if (not (menugroup "QTools"))
  135.     (Load_QToolsMenu)
  136.   )
  137.   ;; 安排菜单条的位置
  138.   (QTools_PlaceMenu)
  139.   (princ)
  140. )
  141. ;;; 以上函数部分定义完毕
  142. ;;;主程序定义完毕,可以逐条执行了:
  143. ;;; -----------------------------------------------------
  144. ;;; 主程序:
  145. ;;; -----------------------------------------------------
  146. (princ "\n加载QTools工具集……")
  147. (setq qtools_cmdecho_save (getvar "cmdecho"))
  148. (setvar "cmdecho" 0)
  149. ;;; 执行初始化
  150. (Init_QTools)
  151. (setvar "cmdecho" qtools_cmdecho_save)
  152. (setq qtools_cmdecho_save nil)
  153. (princ "\nQTools工具集加载完毕。版本 2005.4")
  154. (princ)
  155. ;; autoload
  156. (autoload "CWCT" '("CHANGE-THICKNESS" "CHANGE-WIDTH"))
  157. ;; ……下略
发表于 2010-7-30 16:00:00 | 显示全部楼层
没有看明白。能否做个完整的?
 楼主| 发表于 2010-7-31 06:38:00 | 显示全部楼层

参考如下代码,你自己就能实现!

 

谢谢2楼的指教

下载来好好研究学习.愿能早日实现有一个自己的管理工具条.

谢了

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

本版积分规则

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

GMT+8, 2025-2-27 17:08 , Processed in 0.163543 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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