public static List <ICAMOper> CreateCamOper( NXOpen.Tag WorkGeometryGroup, NXOpen.Tag ProgramGroup, NXOpen.Tag MethodGroupRoot, NXOpen.Tag cutterGroupRootTag, CAMElectrode ele, CNCConfig.CAMConfig.ProjectInfo project, List <CAMCutter> cutterDetails, double fireNum ) { var result = new List <ICAMOper>(); foreach (var item in project.Details) { var operConfig = ele.CamConfig.Operations.FirstOrDefault(m => m.显示名称 == item.工序); Func <string, CAMCutter> GetCutterAction = (s) => { var c = cutterDetails.FirstOrDefault(m => m.CutterName == s); if (ele.CamConfig.SparkPosition == CNCConfig.CAMConfig.E_SparkPosition.CheatKnife || ele.CamConfig.SparkPosition == CNCConfig.CAMConfig.E_SparkPosition.CheatKnifeZ ) { var tempC = cutterDetails.FirstOrDefault(m => m.CutterName == s + fireNum.ToString()); if (tempC != null) { c = tempC; } } return(c); }; var cutter = GetCutterAction(item.刀具); var refCutter = cutterDetails.FirstOrDefault(m => m.CutterName == item.参考刀具); if (operConfig == null) { throw new Exception("配置工具方案工序配置异常!"); } ICAMOper camOper = null; switch (operConfig.模版类型) { case CNCConfig.CAMConfig.S_OperationTemplate.EACT_AUTOCAM: { switch (GetEnumByKey(operConfig.模板名称)) { case E_TmplateOper.FACE_MILLING_KC: { camOper = new JYTools_FACE_MILLING_KC_Oper(); break; } } break; } default: { switch (GetEnumByKey(operConfig.模板名称)) { case E_TmplateOper.FACE_MILLING_TOP: { camOper = new WsqAutoCAM_FACE_MILLING_TOP_Oper(); break; } case E_TmplateOper.CAVITY_MILL_C: { camOper = new WsqAutoCAM_CAVITY_MILL_C_Oper(); break; } case E_TmplateOper.CAVITY_PLANAR_MILL: { camOper = new WsqAutoCAM_CAVITY_PLANAR_MILL_Oper(); break; } case E_TmplateOper.CAVITY_MILL_REF: { camOper = new WsqAutoCAM_CAVITY_MILL_REF_Oper(); break; } case E_TmplateOper.FACE_MILLING_BASE: { camOper = new WsqAutoCAM_FACE_MILLING_BASE_Oper(); break; } case E_TmplateOper.FACE_MILLING: { camOper = new WsqAutoCAM_FACE_MILLING_Oper(); break; } case E_TmplateOper.PLANAR_MILL_BASE: { camOper = new WsqAutoCAM_PLANAR_MILL_BASE_Oper(); break; } case E_TmplateOper.PLANAR_MILL: { camOper = new WsqAutoCAM_PLANAR_MILL_Oper(); break; } case E_TmplateOper.ZLEVEL_PROFILE_STEEP: { camOper = new WsqAutoCAM_ZLEVEL_PROFILE_STEEP_Oper(); break; } case E_TmplateOper.ZLEVEL_CORNER: { camOper = new WsqAutoCAM_ZLEVEL_CORNER_Oper(); break; } case E_TmplateOper.CONTOUR_AREA_NON_STEEP: { camOper = new WsqAutoCAM_CONTOUR_AREA_NON_STEEP_Oper(); break; } case E_TmplateOper.FLOWCUT_REF_TOOL: { camOper = new WsqAutoCAM_FLOWCUT_REF_TOOL_Oper(); break; } case E_TmplateOper.FACE_MILLING_CORNER: { camOper = new WsqAutoCAM_FACE_MILLING_CORNER_Oper(); break; } case E_TmplateOper.CONTOUR_TEXT: { camOper = new WsqAutoCAM_CONTOUR_TEXT_Oper(); break; } } break; } } if (camOper != null) { result.Add(camOper); camOper.FRIENUM = fireNum; camOper.AutoAnalysis(ele, WorkGeometryGroup, ProgramGroup, MethodGroupRoot, cutter, refCutter); if (item.切深 > 0) { camOper.SetCutDepth(item.切深); } if (item.进给 > 0) { camOper.SetFeedRate(item.进给); } } } return(result); }
public static List <CAMCutter> CreateCutter(CAMElectrode ele, CNCConfig.CAMConfig camConfig, NXOpen.Tag cutterGroupRootTag, out CNCConfig.CAMConfig.ProjectInfo project) { var eleInfo = ele.Electrode.GetElectrodeInfo(); List <CAMCutter> result = new List <CAMCutter>(); var info = ele.Electrode.GetElectrodeInfo(); var cutterConfigs = camConfig.FindCutterInfo(info.MAT_NAME); project = camConfig.Projects.Where(u => u.方案名称 == "自动").FirstOrDefault() ?? camConfig.Projects.Where(u => u.方案名称 == "自动").FirstOrDefault(); if (project == null) { throw new Exception("配置工具未配置方案!"); } var cutterStrs = new List <string>(); project.Details.ForEach(u => { cutterStrs.Add(u.刀具); cutterStrs.Add(u.参考刀具); }); cutterStrs = cutterStrs.Where(u => !string.IsNullOrEmpty(u)).ToList(); cutterStrs = cutterStrs.Distinct().ToList(); foreach (var item in cutterStrs) { var cutterConfig = cutterConfigs.FirstOrDefault(m => m.刀具名称 == item); if (cutterConfig != null) { Action <double> action = (f) => { var camCutter = new CAMCutter(); camCutter.AUTOCAM_TYPE = AUTOCAM_TYPE.mill_planar; camCutter.AUTOCAM_SUBTYPE = AUTOCAM_SUBTYPE.MILL; camCutter.CutterName = cutterConfig.刀具名称 + (f != 0 ? f.ToString() : ""); camCutter.TL_DIAMETER = double.Parse(cutterConfig.直径) + (f * 2); camCutter.TL_COR1_RAD = double.Parse(cutterConfig.R角) + f; camCutter.TL_COR1_RAD = camCutter.TL_COR1_RAD < 0 ? 0 : camCutter.TL_COR1_RAD; camCutter.TL_HEIGHT = double.Parse(cutterConfig.刀长); camCutter.TL_FLUTE_LN = double.Parse(cutterConfig.刃长); camCutter.TL_NUMBER = int.Parse(cutterConfig.刀号); camCutter.TL_ADJ_REG = int.Parse(cutterConfig.补正号); camCutter.Speed = double.Parse(cutterConfig.转速); camCutter.FeedRate = double.Parse(cutterConfig.进给); camCutter.FEED_TRAVERSAL = double.Parse(cutterConfig.横越); camCutter.CutDepth = double.Parse(cutterConfig.切深); result.Add(camCutter); }; action(0); if (eleInfo.FINISH_NUMBER > 0) //精 { action(eleInfo.FINISH_SPACE); } if (eleInfo.MIDDLE_NUMBER > 0) //中 { action(eleInfo.MIDDLE_SPACE); } if (eleInfo.ROUGH_NUMBER > 0) //粗 { action(eleInfo.ROUGH_SPACE); } } else { throw new Exception("配置工具方案刀具配置异常!"); } } result = Helper.CreateCutter(result, cutterGroupRootTag); return(result); }