找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3279|回复: 1

[原创]:使用VLISP动态向AutoCAD菜单条中夹塞菜单条目

[复制链接]
发表于 2009-6-20 19:41:16 | 显示全部楼层 |阅读模式

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

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

×
http://fresco.yo2.cn/archives/642094#more-642094

2007-11-25_183807.gif


程序思路就是利用ActiveX对像模型提供的方法和属性。
目前的问题:设置条目的图标和快捷键(比如Ctrl+Shift+P)不知如何实现。


源代码:



AddBplotMenu.lsp
  1. [font=courier new]
  2. ;; 删除菜单
  3. (defun C:RemoveBplotMenu (/ MenuBar n i MenuItem Menu tag)
  4.   (setq MenuBar (vla-get-menubar (vlax-get-acad-object)))
  5.   ;; 找菜单“文件(&F)” "&File" tag: ID_MnFile
  6.   (setq n (vla-get-count MenuBar))
  7.   (setq i (1- n))
  8.   (while (and (>= i 0)                  ; 没有超过上限
  9.               (/= "ID_MnFile" (vla-get-tagstring (setq menuitem (vla-item MenuBar i)))) ; 找到"文件"菜单条
  10.          )
  11.     (setq i (1- i))
  12.   )
  13.   (if (< i 0)
  14.     (setq i 0)
  15.   )                                     ; 如果没有文件菜单, 取第一条菜单
  16.   (setq menu (vla-item MenuBar i))
  17.   ;;遍历文件菜单 删除原来的批量打印条目
  18.   (setq n (vla-get-count menu))
  19.   (setq i (1- n))
  20.   (while (> i 0)
  21.     (setq menuitem (vla-item menu i))
  22.     (setq tag (vla-get-tagstring menuitem))
  23.     (if (member tag '("ID_mnuBatchPlot" "ID_mnuBatchPlot2" "ID_mnuBatchPlotPopup"))
  24.       (vla-delete menuitem)
  25.     )
  26.     (setq i (1- i))
  27.   )
  28.   (princ)
  29. )
  30. ;; 添加菜单
  31. (defun C:AddBplotMenu (/ MenuBar menu menuitem bplotPopupMenu bplotmenuitem cap tag tmp i n)
  32.   (C:RemoveBplotMenu)
  33.   (setq MenuBar (vla-get-menubar (vlax-get-acad-object)))
  34.   ;; 找到菜单“文件(&F)” "&File" tag: ID_MnFile
  35.   (setq n (vla-get-count MenuBar))
  36.   (setq i (1- n))
  37.   (while (and (>= i 0)                  ; 没有超过上限
  38.               (/= "ID_MnFile" (vla-get-tagstring (setq menuitem (vla-item MenuBar i)))) ; 找到"文件"菜单条
  39.          )
  40.     (setq i (1- i))
  41.   )
  42.   (if (< i 0)                           ; 如果没有文件菜单, 取第一条菜单
  43.     (setq i 0)
  44.   )
  45.   (setq menu (vla-item MenuBar i))
  46.   ;; 找到打印菜单项, 设置当前插入位置
  47.   (setq i 0)
  48.   (setq n (vla-get-count menu))
  49.   (while (and (< i n)                   ; 没有超过上限
  50.               (/= "ID_Print" (vla-get-tagstring (setq menuitem (vla-item menu i)))) ; 找到"打印"菜单条
  51.          )
  52.     (setq i (1+ i))
  53.   )
  54.   (if (= i n)                           ; 如果没有找到"打印"菜单条, 插在倒数第二条.
  55.     (setq i (- n 2))
  56.   )
  57.   ;; 在当前插入位置的下面一条添加批量打印条目
  58.   (setq bplotmenuitem
  59.          (vla-addmenuitem
  60.            menu
  61.            (setq i (1+ i))
  62.            "批量打印(&B)..."
  63.            "\003\003_BatchPlot "
  64.          )
  65.   )
  66.   (vla-put-label bplotmenuitem "$(if,$(eq,$(getvar,blockeditor),1),~)批量打印(&B)...")
  67.   (vla-put-tagstring bplotmenuitem "ID_mnuBatchPlot")
  68.   (vla-put-helpstring bplotmenuitem "批量打印、批量生成布局、批量分图实用工具程序")
  69.   ;; 再在下面创建下级批量打印实用工具子菜单
  70.   (setq bplotPopupMenu (vla-addsubmenu menu (1+ i) "批量打印实用工具(&L)"))
  71.                                         ; (vla-put-tagstring bplotPopupMenu "ID_mnuBatchPlotPopup") ;不知道为什么不行.
  72.   ;; 下面这段代码设置批量打印实用工具子菜单的Tag
  73.   (setq n (vla-get-count menu))
  74.   (setq i (1- n))
  75.   (while (> i 0)
  76.     (setq menuitem (vla-item menu i))
  77.     (setq cap (vla-get-caption menuitem))
  78.     (if (= "批量打印实用工具(&L)" cap)
  79.       (vla-put-tagstring menuitem "ID_mnuBatchPlotPopup")
  80.     )
  81.     (setq i (1- i))
  82.   )
  83.   (setq i 0)

  84.   ;; 下面是子菜单条目
  85.   (setq tmp
  86.          (vla-addmenuitem
  87.            bplotPopupMenu
  88.            (setq i (1+ i))
  89.            "批量打印(&C)..."
  90.            "\003\003_bp_doPlot "
  91.          )
  92.   )
  93.   (vla-put-label tmp "$(if,$(eq,$(getvar,blockeditor),1),~)批量打印(&C)...")
  94.   (vla-put-helpstring tmp "批量打印图纸,直接发送到物理打印机或虚拟打印机")
  95.   (setq tmp
  96.          (vla-addmenuitem
  97.            bplotPopupMenu
  98.            (setq i (1+ i))
  99.            "批量生成布局(&L)..."
  100.            "\003\003_bp_doLayout "
  101.          )
  102.   )
  103.   (vla-put-label tmp "$(if,$(eq,$(getvar,blockeditor),1),~)批量生成布局(&L)...")
  104.   (vla-put-helpstring tmp "批量按当前的打印设置生成布局,每个图框一个布局")
  105.   (setq tmp
  106.          (vla-addmenuitem
  107.            bplotPopupMenu
  108.            (setq i (1+ i))
  109.            "批量生成PLT文件(&P)..."
  110.            "\003\003_bp_doPlotFile "
  111.          )
  112.   )
  113.   (vla-put-label tmp "$(if,$(eq,$(getvar,blockeditor),1),~)批量生成PLT文件(&P)...")
  114.   (vla-put-helpstring tmp "批量生成PLT打印文件供机房绘图仪服务器统一打印")
  115.   (setq tmp
  116.          (vla-addmenuitem
  117.            bplotPopupMenu
  118.            (setq i (1+ i))
  119.            "批量切分图纸(&W)..."
  120.            "\003\003_bp_doWblock "
  121.          )
  122.   )
  123.   (vla-put-label tmp "$(if,$(eq,$(getvar,blockeditor),1),~)批量切分图纸(&W)...")
  124.   (vla-put-helpstring tmp "自动根据图框切分图纸,每个图框一个DWG文件,供归档用")
  125.   (setq tmp
  126.          (vla-addmenuitem
  127.            bplotPopupMenu
  128.            (setq i (1+ i))
  129.            "打印现有布局(&A)..."
  130.            "\003\003_bp_doPlotLayout "
  131.          )
  132.   )
  133.   (vla-put-label tmp "$(if,$(eq,$(getvar,blockeditor),1),~)打印现有布局(&A)...")
  134.   (vla-put-helpstring tmp "按现有的布局显示顺序批量打印现有的布局空间")
  135.   (vla-AddSeparator
  136.     bplotPopupMenu
  137.     (setq i (1+ i))
  138.   )
  139.   (setq tmp (vla-addmenuitem
  140.               bplotPopupMenu
  141.               (setq i (1+ i))
  142.               "清除批量打印数据(&D)"
  143.               "\003\003_DeleteBPlotData "
  144.             )
  145.   )

  146.   (vla-AddSeparator
  147.     bplotPopupMenu
  148.     (setq i (1+ i))
  149.   )
  150.   (vla-addmenuitem
  151.     bplotPopupMenu
  152.     (setq i (1+ i))
  153.     "捐助作者支持开发(&D)"
  154.     "\003\003_Browser (findfile "donate.htm") "
  155.   )
  156.   (vla-addmenuitem
  157.     bplotPopupMenu
  158.     (setq i (1+ i))
  159.     "访问软件主页(&M)"
  160.     "\003\003_Browser [url]http://fresco.yo2.cn/archives/92111[/url] "
  161.   )
  162.   (vla-addmenuitem
  163.     bplotPopupMenu
  164.     (setq i (1+ i))
  165.     "批量打印帮助(&H)"
  166.     "\003\003_Browser (findfile "bp_help.htm") "
  167.   )

  168.   (princ)
  169. )
  170. ;; 加载批量打印菜单
  171. (C:AddBplotMenu)
  172. (princ)[/font]

本帖被以下淘专辑推荐:

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

已领礼包: 50个

财富等级: 招财进宝

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 03:28 , Processed in 0.424503 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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