Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }