本文目前仅包括怎样用objectarx.net 创建CUI,你可以用cad中的cui命令进行创建,不过我不喜欢那种方式,会附带很多无用的信息。
1个自定义局部cui包括如下内容:
head:这个基本不变
MenuGroup:这个是主要的菜单资源,包括了菜单所用到的命令以及菜单项的组成和工具栏等。
其中菜单组命令为MacroGroup ,里面包括了每个菜单用到的命令,每个命令由名称、命令、图标文件、注释等组成。
PopMenu表示菜单项的组成,里面包括了菜单的名称,挂接到命令ID,是否是分割条等。
ToolBar 表示工具栏的设置。
步骤:
1. 07以上版本,添加引用Accui.dll
2. 添加引用 using Autodesk.AutoCAD.Customization;
3. 得到主配置对象
string mainCui = Application.GetSystemVariable("MENUNAME") + ".cui";// 从AUTOCAD系统变量MENUNAME得到main cui文件
CustomizationSection cw = new CustomizationSection(mainCui);
4. 创建局部自定义cui对象
CustomizationSection pcs = new CustomizationSection();
pcs.MenuGroupName = strMenuGroupName;
5. 添加菜单的命令组
MacroGroup mg = new MacroGroup(dtMacroGroup.TableName, pcs.MenuGroup);
MenuMacro mm = null;
foreach (System.Data.DataRow r in dtMacroGroup.Rows)
{
mm = new MenuMacro(mg, r["name"].ToString(), r["command"].ToString(), r["UID"].ToString(), MacroType.Any);
mm.macro.HelpString = r["HelpString"].ToString();
mg.AddMacro(mm);
}
6. 添加菜单项的设置
StringCollection sc = new StringCollection();
sc.Add("POP1");
PopMenu pm = new PopMenu(dtPopMenu.TableName, sc, dtPopMenu.Namespace, pcs.MenuGroup);
PopMenuItem pmi = null;
foreach (DataRow r in dtPopMenu.Rows)
{
// 添加下拉菜单
if (Convert.ToBoolean( r["IsSeparator"]))
{
pmi = new PopMenuItem(pm); //用此构造方法,即为分割条
pm.PopMenuItems.Add(pmi);
}
else
{
foreach (MenuMacro m in mg.MenuMacros)
{
if (m.ElementID == r["MenuMacroID"].ToString())
{
pmi = new PopMenuItem(m, r["NameRef"].ToString(), pm, -1);
pm.PopMenuItems.Add(pmi);
break;
}
}
}
}
7. 最后保存文件
pcs.SaveAs(strCuiFile);
其中两个datatable的设置如下:
System.Data.DataTable dtMacroGroup = new System.Data.DataTable("TestMacros");
dtMacroGroup.Columns.Add("name", typeof(string));
dtMacroGroup.Columns.Add("command", typeof(string));
dtMacroGroup.Columns.Add("UID", typeof(string));
dtMacroGroup.Columns.Add("HelpString", typeof(string));
dtMacroGroup.Rows.Add("登录", "^C^CXLogon ", "ID_XLogon", "登录到统一平台");
dtMacroGroup.Rows.Add("检查", "^C^CXCheck ", "ID_XCheck", "检查文件");
System.Data.DataTable dtPopMenu = new System.Data.DataTable("CPE统一制图平台(&X)", "ID_CPEogprcd");
dtPopMenu.Columns.Add("IsSeparator", typeof(bool));
dtPopMenu.Columns.Add("NameRef", typeof(string));
dtPopMenu.Columns.Add("MenuMacroID", typeof(string));
dtPopMenu.Rows.Add(false, "登录(&L)", "ID_XLogon");
dtPopMenu.Rows.Add(false, "检查(&C)", "ID_XCheck");
dtPopMenu.Rows.Add(true, "", "");
详细代码如下:
public static void BuildMenuCUI(string strMenuGroupName, string strCuiFile, System.Data.DataTable dtMacroGroup, System.Data.DataTable dtPopMenu)
{
try
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
string mainCui = Application.GetSystemVariable("MENUNAME") + ".cui";// 从AUTOCAD系统变量MENUNAME得到main cui文件
CustomizationSection cw = new CustomizationSection(mainCui);
// 为我们的局部菜单创建一个自定义区域(customization section)
CustomizationSection pcs = new CustomizationSection();
pcs.MenuGroupName = strMenuGroupName;
// 添加菜单的命令组
MacroGroup mg = new MacroGroup(dtMacroGroup.TableName, pcs.MenuGroup);
MenuMacro mm = null;
foreach (System.Data.DataRow r in dtMacroGroup.Rows)
{
mm = new MenuMacro(mg, r["name"].ToString(), r["command"].ToString(), r["UID"].ToString(), MacroType.Any);
mm.macro.HelpString = r["HelpString"].ToString();
mg.AddMacro(mm);
}
//添加菜单项的设置
StringCollection sc = new StringCollection();
sc.Add("POP1");
PopMenu pm = new PopMenu(dtPopMenu.TableName, sc, dtPopMenu.Namespace, pcs.MenuGroup);
PopMenuItem pmi = null;
foreach (DataRow r in dtPopMenu.Rows)
{
// 添加下拉菜单
if (Convert.ToBoolean( r["IsSeparator"]))
{
pmi = new PopMenuItem(pm); //用此构造方法,即为分割条
pm.PopMenuItems.Add(pmi);
}
else
{
foreach (MenuMacro m in mg.MenuMacros)
{
if (m.ElementID == r["MenuMacroID"].ToString())
{
pmi = new PopMenuItem(m, r["NameRef"].ToString(), pm, -1);
pm.PopMenuItems.Add(pmi);
break;
}
}
}
}
// 最后保存文件
pcs.SaveAs(strCuiFile);
}
catch (System.Exception ex)
{
throw new System.Exception("->BuildMenuCUI:" + ex.Message);
}
}
效果如下:
生成的cui文件内容如下:(拷贝保存为txt,另存为 utf-8格式)
<?xml version="1.0"?>
<!--
警告!请勿编辑此文件的内容。
如果试图使用 XML 编辑器来编辑此文件,可能会失去自定义和移植功能。
如果需要修改自定义文件中的信息,请使用产品中的“自定义用户界面”对话框。
要访问“自定义用户界面”对话框,请单击“工具”菜单 >“自定义”>“界面”,或者在命令行中输入 CUI。
-->
<CustSection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FileVersion MajorVersion="0" MinorVersion="4" IncrementalVersion="1" UserVersion="1" />
<Header>
<CommonConfiguration>
<CommonItems>
<ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
</CommonItems>
</CommonConfiguration>
<WorkspaceRoot>
<WorkspaceConfigRoot />
</WorkspaceRoot>
</Header>
<MenuGroup Name="TEST">
<MacroGroup Name="TestMacros">
<MenuMacro UID="ID_XLogon">
<Macro type="Any">
<Revision MajorVersion="16" MinorVersion="2" UserVersion="1" />
<ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
<Name xlate="true" UID="XLS_0001">登录</Name>
<Command>^C^CXLogon </Command>
<HelpString xlate="true" UID="XLS_0002">登录到统一平台</HelpString>
</Macro>
</MenuMacro>
<MenuMacro UID="ID_XCheck">
<Macro type="Any">
<Revision MajorVersion="16" MinorVersion="2" UserVersion="1" />
<ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
<Name xlate="true" UID="XLS_0003">检查</Name>
<Command>^C^CXCheck </Command>
<HelpString xlate="true" UID="XLS_0004">检查文件</HelpString>
</Macro>
</MenuMacro>
</MacroGroup>
<MenuRoot>
<AcceleratorRoot />
<OverrideRoot />
<MouseButtonRoot />
<DigitizerButtonRoot />
<PopMenuRoot>
<PopMenu hasDiesel="false" UID="ID_CPEogprcd">
<ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
<Alias>POP1</Alias>
<Name xlate="true" UID="XLS_0005">CPE统一制图平台(&X)</Name>
<PopMenuItem IsSeparator="false" hasDiesel="false" UID="PMIU_0001">
<ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
<NameRef UID="XLS_0006" xlate="true">登录(&L)</NameRef>
<MenuItem>
<MacroRef MenuMacroID="ID_XLogon" />
</MenuItem>
</PopMenuItem>
<PopMenuItem IsSeparator="false" hasDiesel="false" UID="PMIU_0002">
<ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
<NameRef UID="XLS_0007" xlate="true">检查(&C)</NameRef>
<MenuItem>
<MacroRef MenuMacroID="ID_XCheck" />
</MenuItem>
</PopMenuItem>
<PopMenuItem IsSeparator="true" hasDiesel="false" UID="PMIU_0003">
<ModifiedRev MajorVersion="17" MinorVersion="1" UserVersion="1" />
</PopMenuItem>
</PopMenu>
</PopMenuRoot>
<ToolbarRoot />
<ScreenMenuRoot />
<ImageMenuRoot />
<TabletMenuRoot />
<DoubleClickRoot />
<ToolPanelRoot />
<PanelSetRoot />
</MenuRoot>
</MenuGroup>
</CustSection>