作为C#语言的铁粉,在做二次开发的时候,发现西门子在C#语言下的支持还是不够完善。
就拿自动切换制图模式来说,C++可以直接调用内部函数 UI_APP_change_application,还在网上找到有人推荐使用 ::PostMessage切换模块。
经过一番模式,目前找到2种方法支持c#语言下切换模块:
1、使用图纸页的Open方法,具体使用见代码
/// <summary>
/// 创建第一张图纸
/// </summary>
/// <param name="dwgName">图纸名称(带prt文件类型)</param>
/// <param name="dwgTemplate">图纸模板类型</param>
/// <param name="sheetName">图纸sheet名称</param>
public static void CreatDWG(string dwgName, string dwgTemplate, string sheetName, string asmName)
{
Session theSession = Session.GetSession();
theUFSession = UFSession.GetUFSession();
FileNew fileNew1;
fileNew1 = theSession.Parts.FileNew();
fileNew1.TemplateFileName = dwgTemplate;
fileNew1.Application = FileNewApplication.Drafting;
fileNew1.Units = NXOpen.Part.Units.Millimeters;
fileNew1.TemplateType = FileNewTemplateType.Item;
fileNew1.NewFileName = "C:\\temp\\" + dwgName;
fileNew1.MasterFileName = asmName;
fileNew1.UseBlankTemplate = false;
fileNew1.MakeDisplayedPart = true;
NXObject nXObject1;
nXObject1 = fileNew1.Commit();
fileNew1.Destroy();
Part workPart = theSession.Parts.Work;
Part displayPart = theSession.Parts.Display;
NXOpen.Drawings.DrawingSheet drawingSheet1 = (NXOpen.Drawings.DrawingSheet)workPart.DrawingSheets.FindObject("A3_1");
drawingSheet1.Open();
theUFSession.Draw.RenameDrawing(drawingSheet1.Tag, sheetName);
//CreateView(drawingSheet1.Tag);
}
2、使用theUI.MenuBarManager.ApplicationSwitchRequest("UG_APP_DRAFTING")
int moduleid;
theUFSession.UF.AskApplicationModule(out moduleid);
if (moduleid != UFConstants.UF_APP_DRAFTING)
{
theUI.MenuBarManager.ApplicationSwitchRequest("UG_APP_DRAFTING");
}
个人推荐第二种方法,因为我使用的NX8.0,网上也发现高版本的方法。一起列举如下:
NX10:
Session theSession = NXopen.Session.GetSession();
theSession.ApplicationSwitchImmediate("UG_APP_DRAFTING");
NX11:
Part workPart = theSession.Parts.Work;
workpart.Drafting.EnterDraftingApplication();