/// <summary>
        /// 创建固定轮廓铣
        /// </summary>
        /// <param name="model"></param>
        /// <param name="cam"></param>
        /// <returns></returns>
        public static AbstractOperationModel CreateOperationOfSurfaceContour(OperationNameModel model, ElectrodeCAM cam)
        {
            NCGroupModel        group = GetNcGroupModelOfName(model, cam);
            SurfaceContourModel sur   = new SurfaceContourModel(group, model.templateName, model.templateOperName);

            return(sur);
        }
        /// <summary>
        /// 光基准台名字
        /// </summary>
        /// <param name="program"></param>
        /// <param name="tool"></param>
        /// <returns></returns>
        public static OperationNameModel AskOperationNameModelOfBaseStation(string program, string tool)
        {
            OperationNameModel model = new OperationNameModel()
            {
                templateName     = "electrode",
                templateOperName = "J",
                ProgramName      = program,
                OperName         = tool + "-P-F",
                PngName          = "110.bmp",
                ToolName         = tool,
                OperType         = OperationType.PlanarMillingBase
            };

            return(model);
        }
        /// <summary>
        /// 光面名字
        /// </summary>
        /// <param name="program"></param>
        /// <param name="tool"></param>
        /// <returns></returns>
        public static OperationNameModel AskOperationNameModelOfFaceMilling(string program, string tool)
        {
            OperationNameModel model = new OperationNameModel()
            {
                templateName     = "electrode",
                templateOperName = "TOP",
                ProgramName      = program,
                OperName         = tool + "-TOP-F",
                PngName          = "261.bmp",
                ToolName         = tool,
                OperType         = OperationType.FaceMilling
            };

            return(model);
        }
        /// <summary>
        /// 二次开粗名字
        /// </summary>
        /// <param name="program"></param>
        /// <param name="tool"></param>
        /// <returns></returns>
        public static OperationNameModel AskOperationNameModelOfTwiceRough(string program, string tool)
        {
            OperationNameModel model = new OperationNameModel()
            {
                templateName     = "electrode",
                templateOperName = "R3",
                ProgramName      = program,
                OperName         = tool + "-CAV-R",
                PngName          = "260.bmp",
                ToolName         = tool,
                OperType         = OperationType.CavityMilling
            };

            return(model);
        }
        /// <summary>
        /// 钻孔名字
        /// </summary>
        /// <param name="program"></param>
        /// <param name="tool"></param>
        /// <returns></returns>
        public static OperationNameModel AskOperationNameModelOfPointToPoint(string program, string tool)
        {
            OperationNameModel model = new OperationNameModel()
            {
                templateName     = "electrode",
                templateOperName = "CK",
                ProgramName      = program,
                OperName         = tool + "-F",
                PngName          = "450.bmp",
                ToolName         = tool,
                OperType         = OperationType.SurfaceContour
            };

            return(model);
        }
        /// <summary>
        /// 光基准台名字
        /// </summary>
        /// <param name="program"></param>
        /// <param name="tool"></param>
        /// <returns></returns>
        public static OperationNameModel AskOperationNameModelOfBaseStation(string program, string tool, int operNumber)
        {
            int    k    = program.LastIndexOf("0");
            string temp = "1";

            if (k != -1)
            {
                temp = program.Substring(k + 1);
            }
            OperationNameModel model = new OperationNameModel()
            {
                templateName     = "electrode",
                templateOperName = "J",
                ProgramName      = program,
                OperName         = tool + "-F-" + temp + "-" + operNumber.ToString(),
                PngName          = "110.bmp",
                ToolName         = tool,
                OperType         = OperationType.PlanarMillingBase
            };

            return(model);
        }
        /// <summary>
        /// 二次开粗名字
        /// </summary>
        /// <param name="program"></param>
        /// <param name="tool"></param>
        ///  /// <param name="operNumber"></param>
        /// <returns></returns>
        public static OperationNameModel AskOperationNameModelOfTwiceRough(string program, string tool, int operNumber)
        {
            int    k    = program.LastIndexOf("0");
            string temp = "1";

            if (k != -1)
            {
                temp = program.Substring(k + 1);
            }
            OperationNameModel model = new OperationNameModel()
            {
                templateName     = "electrode",
                templateOperName = "R3",
                ProgramName      = program,
                OperName         = tool + "-CR-" + temp + "-" + operNumber.ToString(),
                PngName          = "260.bmp",
                ToolName         = tool,
                OperType         = OperationType.CavityMilling
            };

            return(model);
        }
        /// <summary>
        /// 钻孔名字
        /// </summary>
        /// <param name="program"></param>
        /// <param name="tool"></param>
        /// <returns></returns>
        public static OperationNameModel AskOperationNameModelOfPointToPoint(string program, string tool, int operNumber)
        {
            int    k    = program.LastIndexOf("0");
            string temp = "1";

            if (k != -1)
            {
                temp = program.Substring(k + 1);
            }
            OperationNameModel model = new OperationNameModel()
            {
                templateName     = "electrode",
                templateOperName = "CK",
                ProgramName      = program,
                OperName         = tool + "-DR-" + temp + "-" + operNumber.ToString(),
                PngName          = "450.bmp",
                ToolName         = tool,
                OperType         = OperationType.SurfaceContour
            };

            return(model);
        }
        private static NCGroupModel GetNcGroupModelOfName(OperationNameModel model, ElectrodeCAM cam)
        {
            Part         workPart = Session.GetSession().Parts.Work;
            NCGroupModel group    = new NCGroupModel()
            {
                GeometryGroup = cam.FindGeometry("WORKPIECE"),
                MethodGroup   = cam.MethodGroup.Find(a => a.Name.ToUpper().Equals("CU")),
                ToolGroup     = cam.FindTool(model.ToolName)
            };
            NCGroup temp = cam.FindProgram(model.ProgramName);

            if (temp == null)
            {
                NXOpen.CAM.NCGroup nCGroup1 = (NXOpen.CAM.NCGroup)workPart.CAMSetup.CAMGroupCollection.FindObject("AAA");
                NXOpen.CAM.NCGroup nCGroup2 = workPart.CAMSetup.CAMGroupCollection.CreateProgram(nCGroup1, "electrode", "AAA_1", NXOpen.CAM.NCGroupCollection.UseDefaultName.True, model.ProgramName);
                group.ProgramGroup = nCGroup2;
            }
            else
            {
                group.ProgramGroup = temp;
            }
            return(group);
        }
        /// <summary>
        /// 创建等高铣
        /// </summary>
        /// <param name="model"></param>
        /// <param name="cam"></param>
        /// <returns></returns>
        public static AbstractOperationModel CreateOperationOfZLevelMilling(OperationNameModel model, ElectrodeCAM cam)
        {
            NCGroupModel group = GetNcGroupModelOfName(model, cam);

            return(new ZLevelMillingModel(group, model.templateName, model.templateOperName));
        }
 /// <summary>
 /// 创建型腔铣
 /// </summary>
 /// <param name="model"></param>
 /// <param name="cam"></param>
 /// <returns></returns>
 public static AbstractOperationModel CreateOperationOfCavityMilling(OperationNameModel model, ElectrodeCAM cam)
 {
     return(new CavityMillingModel(GetNcGroupModelOfName(model, cam), model.templateName, model.templateOperName));
 }
        /// <summary>
        /// 创建平面铣
        /// </summary>
        /// <param name="model"></param>
        /// <param name="cam"></param>
        /// <returns></returns>
        public static AbstractOperationModel CreateOperationOfPlanarMilling(OperationNameModel model, ElectrodeCAMTemplateModel template)
        {
            NCGroupModel group = GetNcGroupModelOfName(model, template);

            return(new PlanarMillingModel(group, model.templateName, model.templateOperName));
        }