此问题将跳转至 浩辰CAD开发者问题处理渠道

c#.net二次开发浩辰CAD2020时候,找不到加载CUI文件相关的接口

之前在Auto Cad时候是在Acui.dll里,我试了gcui.dll,但是引用失败,请帮忙解决下问问,万分感谢
using GrxCAD.Customization;
using GrxCAD.ApplicationServices;
using GrxCAD.EditorInput;
using System.Collections.Specialized;
using System.IO;

namespace GstarCadTools
{
///
/// 操作CUI的类
///

public static class CUITools
{
private static Editor ed = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;

///
/// 获取并打开主CUI文件
///

/// AutoCAD文档对象
/// 返回主CUI文件
public static CustomizationSection GetMainCustomizationSection(this Document doc)
{
//获得主CUI文件所在的位置
string mainCuiFile = Application.GetSystemVariable("MENUNAME") + ".cuix";
//打开主CUI文件
return new CustomizationSection(mainCuiFile);
}

///
/// 创建局部CUI文件
///

/// AutoCAD文档对象
/// CUI文件名
/// 菜单组的名称
/// 返回创建的CUI文件
public static CustomizationSection AddCui(this Document doc, string cuiFile, string menuGroupName)
{
CustomizationSection cs;//声明CUI文件对象
if (!File.Exists(cuiFile))//如果要创建的文件不存在
{
cs = new CustomizationSection();//创建CUI文件对象
cs.MenuGroupName = menuGroupName;//指定菜单组名称
cs.SaveAs(cuiFile);//保存CUI文件
}
//如果已经存在指定的CUI文件,则打开该文件
else cs = new CustomizationSection(cuiFile);
return cs;//返回CUI文件对象
}

///
/// 装载指定的局部CUI文件
///

/// CUI文件
public static void LoadCui(this CustomizationSection cs)
{
//Application.SetSystemVariable("CMDECHO", 0);
//设置FILEDIA=0,禁止显示文件对话框,这样可以通过程序输入文件名
Application.SetSystemVariable("FILEDIA", 0);
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
if (cs.IsModified) cs.Save();//如果CUI文件被修改,则保存
//设置CMDECHO=0,控制不在命令行上回显提示和输入信息

Application.SetSystemVariable("menubar", 1);
////获取当前活动文档
Document doc = Application.DocumentManager.MdiActiveDocument;

CustomizationSection mainCs = doc.GetMainCustomizationSection();

//如果已存在局部CUI文件,则先卸载
if (mainCs.PartialCuiFiles.Contains(cs.CUIFileName))
doc.SendStringToExecute("_.cuiunload " + cs.CUIFileBaseName + " ", false, false, false);
//装载CUI文件,注意文件名必须是带路径的
doc.SendStringToExecute("_.cuiload " + cs.CUIFileName + " ", false, false, false);

//恢复CMDECHO及FILEDIA系统变量的初始值
doc.SendStringToExecute("(setvar \"FILEDIA\" " + 1 + ")(princ) ", false, false, false);
//doc.SendStringToExecute("(setvar \"CMDECHO\" " + 1 + ")(princ) ", false, false, false);
}

///
/// 添加菜单项所要执行的宏
///

/// CUI文件
/// 宏的显示名称
/// 宏的具体命令
/// 宏的标识符
/// 宏的状态栏提示信息
/// 宏的图标
/// 返回创建的宏
public static MenuMacro AddMacro(this CustomizationSection source, string name, string command, string tag, string helpString, string imagePath)
{
MenuGroup menuGroup = source.MenuGroup;//获取CUI文件中的菜单组
//判断菜单组中是否已经定义与菜单组名相同的宏集合
MacroGroup mg = menuGroup.FindMacroGroup(menuGroup.Name);
if (mg == null)//如果宏集合没有定义,则创建一个与菜单组名相同的宏集合
mg = new MacroGroup(menuGroup.Name, menuGroup);
//如果已经宏已经被定义,则返回
foreach (MenuMacro macro in mg.MenuMacros)
if (macro.ElementID == tag) return null;
//在宏集合中创建一个命令宏
MenuMacro MenuMacro = new MenuMacro(mg, name, command, tag);
//指定命令宏的说明信息,在状态栏中显示
MenuMacro.macro.HelpString = helpString;
//指定命令宏的大小图像的路径
MenuMacro.macro.LargeImage = MenuMacro.macro.SmallImage = imagePath;
return MenuMacro;//返回命令宏
}

///
/// 添加下拉菜单
///

/// 包含菜单的菜单组
/// 菜单名
/// 菜单的别名
/// 菜单的标识字符串
/// 返回下拉菜单对象
public static PopMenu AddPopMenu(this MenuGroup menuGroup, string name, StringCollection aliasList, string tag)
{
PopMenu pm = null;//声明下拉菜单对象
//如果菜单组中没有名称为name的下拉菜单
if (menuGroup.PopMenus.IsNameFree(name))
{
//为下拉菜单指定显示名称、别名、标识符和所属的菜单组
pm = new PopMenu(name, aliasList, tag, menuGroup);
}
return pm;//返回下拉菜单对象
}

///
/// 为菜单添加菜单项
///

/// 菜单项所属的菜单
/// 菜单项的位置
/// 菜单项的显示名称
/// 菜单项的命令宏的Id
/// 返回添加的菜单项
public static PopMenuItem AddMenuItem(this PopMenu parentMenu, string macroId)
{
PopMenuItem newPmi = null;
//定义一个菜单项对象,指定所属的菜单及位置
////如果name不为空,则指定菜单项的显示名为name,否则会使用命令宏的名称
newPmi = new PopMenuItem(parentMenu, -1);
newPmi.MacroID = macroId;
return newPmi;//返回菜单项对象
}

///
/// 为下拉菜单添加子菜单
///

/// 下拉菜单
/// 子菜单的位置
/// 子菜单的显示名称
/// 子菜单的标识字符串
/// 返回添加的子菜单
public static PopMenu AddSubMenu(this PopMenu parentMenu, int index, string name, string tag)
{
PopMenu pm = null;//声明子菜单对象(属于下拉菜单类)
//如果菜单组中没有名称为name的下拉菜单
if (parentMenu.CustomizationSection.MenuGroup.PopMenus.IsNameFree(name))
{
StringCollection Str = new StringCollection();

//为子菜单指定显示名称、标识符和所属的菜单组,别名设为null
pm = new PopMenu(name, Str, tag, parentMenu.CustomizationSection.MenuGroup);
//为子菜单指定其所属的菜单
PopMenuRef menuRef = new PopMenuRef(pm, parentMenu, index);
}
return pm;//返回子菜单对象
}

///
/// 为菜单添加分隔条
///

/// 下拉菜单
/// 分隔条的位置
/// 返回添加的分隔条
public static PopMenuItem AddSeparator(this PopMenu parentMenu, int index)
{
//定义一个分隔条并返回
return new PopMenuItem(parentMenu, index);
}

///
/// 添加工具栏
///

/// 工具栏所属的菜单组
/// 工具栏的显示名称
/// 返回添加的工具栏
public static Toolbar AddToolbar(this MenuGroup menuGroup, string name)
{
Toolbar tb = null;//声明一个工具栏对象
//如果菜单组中没有名称为name的工具栏
if (menuGroup.Toolbars.IsNameFree(name))
{
//为工具栏指定显示名称和所属的菜单组
tb = new Toolbar(name, menuGroup);
//设置工具栏为浮动工具栏
tb.ToolbarOrient = ToolbarOrient.floating;
//设置工具栏可见
tb.ToolbarVisible = ToolbarVisible.show;
}
return tb;//返回工具栏对象
}

///
/// 向工具栏添加按钮
///

/// 按钮所属的工具栏
/// 按钮在工具栏上的位置
/// 按钮的显示名称
/// 按钮的命令宏的Id
/// 返回工具栏按钮对象
public static ToolbarButton AddToolbarButton(this Toolbar parent, int index, string name, string macroId)
{
//创建一个工具栏按钮对象,指定其命令宏Id、显示名称、所属的工具栏和位置
ToolbarButton button = new ToolbarButton(macroId, name, parent, index);
return button;//返回工具栏按钮对象
}

///
/// 向工具栏添加弹出式工具栏
///

/// 工具栏所属的父工具栏
/// 弹出式工具栏在父工具栏上的位置
/// 弹出式工具栏所引用的工具栏
public static void AttachToolbarToFlyout(this Toolbar parent, int index, Toolbar toolbarRef)
{
//创建一个弹出式工具栏,指定其所属的工具栏和位置
ToolbarFlyout flyout = new ToolbarFlyout(parent, index);
//指定弹出式工具栏所引用的工具栏
flyout.ToolbarReference = toolbarRef.Name;
//引用的工具栏初始状态不可见
toolbarRef.ToolbarVisible = ToolbarVisible.hide;
}
}
}


已邀请:

CAD小苏 - 专注所以信赖!

赞同来自:

这个问题二次开发人员已经通过邮件回复您了

该问题目前已经被锁定, 无法添加新回复