四级士官
- 积分
- 150
- 威望
- 172 点
- 金币
- 514 枚
- 贡献值
- 0 点
- 怪币
- 0 个
   
|
楼主 |
发表于 2009-9-4 18:34:40
|
显示全部楼层
* 菜单条语法
菜单文本描述按顺序包括:
菜单标题:将作为屏幕菜单的标题,语法为
MENU_TITLE=“XXXX”
菜单条定义:包括右键菜单条和屏幕菜单条;
菜单开关:进一解释前面各个菜单条所出现的菜单开关项;
菜单资源:各个菜单项的辅助资源,包括图标和功能说明;
菜单注释:菜单文本中可以包括注释,行尾注释用“//”表示,段注释用“/*”和“*/”括住,段注释不能嵌套段注释,但可以包括行尾注释。
菜单条的语法结构:
***XXXX
匹配对象描述
菜单项描述:
XXXX为菜单项标识符,每个菜单条都有唯一的标识。其中有三个标识符是固定的,有特别意义,他们是
COMMON,LAYOUT,SCREEN
分别对于模型空间右键菜单、图纸空间右键菜单和屏幕菜单,这三个特殊的菜单条不能有匹配对象描述。菜单文件中可以包含这三个菜单条的一个或多个或都没有。
匹配对象的描述:
对象类型标识符 = DXF过滤表
其中对象类型标识符,由字母开头的任意英文字符串,目前的菜单系统还没有用到标识符,以后可能会用到。
DXF过滤表,是对匹配对象的描述。如
0," OLYLINE,LWPOLYLINE",70,1 用来匹配封闭的多段线
0,"TCH_WALL" 用来匹配TArch的墙体
过滤表必须成对,每一对用来匹配对象DXF的一个点对,多个点对的匹配原则是“与”的关系。
匹配对象用来对预选的对象进行匹配验证,当找到匹配的菜单条时,就弹出右键菜单。因此菜单文件靠前的菜单条有更高的优先级,当多个菜单条匹配预选对象时,采用前面的菜单条。
菜单项描述:
菜单项标识 [菜单项标题描述]待执行的命令:
与AutoCAD的菜单项描述类似,菜单项标识用来关联后面的菜单资源,如图标和功能描述,可以为空;待执行的命令可以为空,这时菜单项不能被点取。
菜单项标题描述,通常只是菜单项的名称。根据需要可以产生多种菜单项类型和特征。
菜单标记标签
菜单标签:用{}括起来,有禁用标签和标记标签,语法为:
标签符号=函数调用
例如: {!=Is2DOnly}
函数调用为由ARX程序定义的AutoLISP外部函数,返回t和nil。内部实现是通过ads_invoke来调用的。当调用函数返回t时,标记成立。根据标签的类型(~或!),把菜单项设成不可用或加标记(打勾)。
下面是带标签的菜单项的示范例子:
ID_TSHOW2D [{!=Is2DOnly}完全二维]TShow2D
菜单项分隔符:
[--]
子菜单:
[->XXXX]
[XXXX]
......
[<-XXXX]
开关菜单项:
用户点取该菜单项时,在多个状态间切换。下面是开关菜单项:
ID_S_SPAREA [*SWITCH*]
在菜单开关中将进一步描述开关的逻辑。
* 菜单开关语法
菜单开关是描述前面的菜单条中出现的菜单项,一个开关菜单项由一个开关组来描述。菜单开关包含一系列开关组。菜单开关的语法:
***SWITCH
开关组1
开关组2
…
一个开关组对于一个开关菜单项。开关组的描述:
**ID_S_BASELINE
GET = GetBaselineState //取状态
SET = SetBaselineState //设状态
0 = ID_DOUBLE_WALL, “o 双线 o” //状态0
1 = ID_SINGLE_DOUBLE, “o单双线o” //状态1
2 = ID_SINGLE_WALL, “o 单线 o”
这个开关组,对前面的菜单条中的下列菜单项展开描述。
ID_S_BASELINE [*SWITCH*]
每一个开关组都要有GET语句和SET语句,GET通过函数调用(ads_invoke)确定当前的状态,SET为鼠标单击后执行的函数调用。系统按这样的逻辑确定开关状态,菜单初始化时通过GET调用确定当前状态,鼠标单击后调用SET改变状态,对于屏幕菜单,还要重新GET确定新的状态。
GET和SET都是调用ARX程序定义的AutoLISP函数进行的。其中GET的函数必须返回整数表示开关的状态。
GET和SET语句之后是状态的描述,分别对GET返回的状态进行描述。状态描述包括资源标识和标题名称两项。标题名称出现在菜单上,资源标识用来确定图标和功能描述。
* 菜单资源语法
菜单资源放置在菜单开关之后,***RESOURCE开始,语句由菜单名称标记索引,等号前为菜单名称标记名,等号后第一段为图标名称,这些图标为16X16-256色的.BMP图像格式,统一存放于.dll动态链接库的资源内,等号之后为状态行帮助信息,光标划过菜单项时显示本菜单项的简短说明。
下面是菜单资源的示范:
***RESOURCE
ID_ABCOORD_OFF = “TCH_COORDXY”,“坐标标注形式由XY变为AB”
ID_ABCOORD_ON = “TCH_COORDAB”,“坐标标注形式由AB变为XY”
……
ID_BOLDLINE_OFF = “ID_LIGHT_OFF“, “墙柱由细线显示切换为粗线显示”
ID_BOLDLINE_ON = “ID_LIGHT_ON”,“墙柱由粗线显示切换为细线显示”
…… 上面两行显示粗线打开与粗线关闭时的状态行帮助以及图标切换
//墙生成
ID_Wall = “Tch_16_Swall”,“进入墙体创建和编辑子菜单”
Id_Dwall = “Tch_16_Dwall”,“连续绘制双线直墙和弧墙:HZQT”
这里最后的四个字母HZQT是绘制墙体简化命令的定义,为便于记忆,使用汉语拼音的首字母表示,下面的DFJQ表示【等分加墙】命令。
Id_DivWall = “Tch_16_DivWall”,“将一段墙按轴线间距等分, 垂直方向加墙延伸到给定边界:DFJQ”。 |
|