| 初衷:我们在加载某个lisp程序时,如果同时为该程序自动生成个自定义工具栏使用起来就方便了。 实现:在加载lisp时,自动执行一段程序,创建一个mnu文件,写入工具栏内容,然后加载。 例子:
;;; 自动创建"动态轴测图"工具栏子程序 (defun create_zct.mnu ( / filen lst menuname stream tempname x) (defun getmenu ( / lst x) ; 获得cad加载的菜单列表 (vlax-for x (vla-get-menugroups (vlax-get-acad-object)) (setq lst (cons (vla-get-name x) lst))) ) (setvar "cmdecho" 0) (vl-load-com) (if (member "ZCT" (getmenu)) ; 判断cad是否加载zct工具栏 (command "TOOLBAR" "动态轴测图" "S") ; 如果已加载,则显示该工具栏 (progn ; 如果没加载,则自动执行下面程序 (alert "\n程序自动创建\"动态轴测图\"工具栏,请稍后") (setq menuname (cond ((setq tempname "zct.mnu" ; 在cad搜索目录创建一个菜单mnu文件 filen (open tempname "w") ; 打开该菜单并写状态 ) (foreach stream '("***MENUGROUP=ZCT\n" "***TOOLBARS\n" ; 写入工具栏内容,图标最好采用cad自带的图标 "**ZCT\n" "ID_ZCT001 [_Toolbar(\"动态轴测图\", _Floating, _Hide, 10, 340, 1)]\n" "ID_ZCT011 [_Button(\"轴测图直线\", \"RCDATA_16_OSNEND\", \"RCDATA_16_OSNEND\")]^C^Czline\n" "ID_ZCT012 [_Button(\"轴测图标注\", \"RCDATA_16_DIMOBL\", \"RCDATA_16_DIMOBL\")]^C^Czdim\n" "ID_ZCT013 [_Button(\"轴测图文字\", \"RCDATA_16_TEXEDI\", \"RCDATA_16_TEXEDI\")]^C^Cztext\n" "ID_ZCT014 [_Button(\"轴测图更改\", \"RCDATA_16_DIMOVE\", \"RCDATA_16_DIMOVE\")]^C^Czch\n" ) (princ stream filen) ) (close filen) ; 关闭mnu文件 tempname ) ) ) (command "menuload" menuname) ; 加载刚才创建的mnu文件 (command "TOOLBAR" "动态轴测图" "S") ; 显示工具栏 ) ) (princ) ) (create_zct.mnu) ;本句的作用是加载本lisp就自动执行create_zct.mnu子程序
;;; 以下部分是正常的程序 (defun c:zline () (alert "\n\"轴测图直线\"暂未开源") (princ) ) (defun c:zdim () (alert "\n\"轴测图标注\"源码在明经论坛") (princ) ) (defun c:ztext () (alert "\n\"轴测图文字\"暂未开源") (princ) ) (defun c:zch () (alert "\n\"轴测图更改\"暂未开源") (princ) )
|
|