示例#1
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);
        }
示例#2
0
        /// <summary>
        /// 自动编程
        /// </summary>
        public static void AutoCam(CAMElectrode ele, CNCConfig.CAMConfig camConfig)
        {
            //安全距离
            var safeDistance    = 10;
            var autoBlankOffset = new double[] { camConfig.AutoBlankXPlus, camConfig.AutoBlankXReduce, camConfig.AutoBlankYPlus, camConfig.AutoBlankYReduce, camConfig.AutoBlankZPlus, camConfig.AutoBlankZReduce };
            var eleInfo         = ele.Electrode.GetElectrodeInfo();
            var bodyBox         = ele.BodyBox;

            //几何组根节点
            NXOpen.Tag geometryGroupRootTag;
            //程序组根节点
            NXOpen.Tag orderGroupRootTag;
            //刀具组根节点
            NXOpen.Tag cutterGroupRootTag;
            //方法组根节点
            NXOpen.Tag methodGroupRootTag;
            //几何体组
            NXOpen.Tag workGeometryGroupTag;


            //TODO 初始化对象
            NXOpen.Tag setup_tag;
            ufSession.Setup.AskSetup(out setup_tag);
            ufSession.Setup.AskGeomRoot(setup_tag, out geometryGroupRootTag);
            ufSession.Setup.AskProgramRoot(setup_tag, out orderGroupRootTag);
            ufSession.Setup.AskMctRoot(setup_tag, out cutterGroupRootTag);
            ufSession.Setup.AskMthdRoot(setup_tag, out methodGroupRootTag);

            //根据配置文件创建刀具
            CNCConfig.CAMConfig.ProjectInfo projectConfig;
            var cutters = CreateCutter(ele, camConfig, cutterGroupRootTag, out projectConfig);

            //TODO删除旧的程序

            //TODO 创建坐标系和几何体
            //加工坐标系
            NXOpen.Tag workMcsGroupTag;
            ufSession.Ncgeom.Create(AUTOCAM_TYPE.mill_planar, AUTOCAM_SUBTYPE.MCS, out workMcsGroupTag);
            ufSession.Obj.SetName(workMcsGroupTag, AUTOCAM_ROOTNAME.GEOM_EACT);
            ufSession.Ncgroup.AcceptMember(geometryGroupRootTag, workMcsGroupTag);

            //TODO 设置安全平面
            var normal = new Snap.Vector(0, 0, 1);
            var origin = new Snap.Position((bodyBox.MinX + bodyBox.MaxX) / 2, (bodyBox.MinY + bodyBox.MaxY) / 2, bodyBox.MaxZ + safeDistance);

            ufSession.Cam.SetClearPlaneData(workMcsGroupTag, origin.Array, normal.Array);

            //TODO 创建几何体
            ufSession.Ncgeom.Create(AUTOCAM_TYPE.mill_planar, AUTOCAM_SUBTYPE.WORKPIECE, out workGeometryGroupTag);
            ufSession.Obj.SetName(workGeometryGroupTag, eleInfo.Elec_Name);
            ufSession.Ncgroup.AcceptMember(workMcsGroupTag, workGeometryGroupTag);

            //TODO 添加Body作为工作几何体
            Helper.SetCamgeom(NXOpen.UF.CamGeomType.CamPart, workGeometryGroupTag, new List <NXOpen.Tag> {
                ele.Electrode.ElecBody.NXOpenTag
            });

            //TODO 设置毛坯为自动块
            ufSession.Cam.SetAutoBlank(workGeometryGroupTag, NXOpen.UF.UFCam.BlankGeomType.AutoBlockType, autoBlankOffset);

            Action <string, double, int> action = (type, fireNum, number) => {
                //TODO 创建程序
                NXOpen.Tag programGroupTag;
                ufSession.Ncprog.Create(AUTOCAM_TYPE.mill_planar, AUTOCAM_SUBTYPE.PROGRAM, out programGroupTag);
                ufSession.Obj.SetName(programGroupTag, string.Format("{0}-{1}", eleInfo.Elec_Name, type));
                ufSession.Ncgroup.AcceptMember(orderGroupRootTag, programGroupTag);

                var list = CAMOper.CreateCamOper(workGeometryGroupTag, programGroupTag, methodGroupRootTag, cutterGroupRootTag, ele, projectConfig, cutters, fireNum);
                list = list.Where(u => u.OperIsValid).ToList();
                //var exMsg=Helper.PathGenerate(programGroupTag);
                //Helper.ShowInfoWindow(exMsg);
            };

            if (eleInfo.FINISH_NUMBER > 0)  //精
            {
                action("F", eleInfo.FINISH_SPACE, eleInfo.FINISH_NUMBER);
            }

            if (eleInfo.MIDDLE_NUMBER > 0)  //中
            {
                action("M", eleInfo.MIDDLE_SPACE, eleInfo.MIDDLE_NUMBER);
            }

            if (eleInfo.ROUGH_NUMBER > 0)  //粗
            {
                action("R", eleInfo.ROUGH_SPACE, eleInfo.ROUGH_NUMBER);
            }
        }
示例#3
0
        public void Init(ElecManage.Electrode ele, CNCConfig.CAMConfig camConfig)
        {
            CamConfig = camConfig;
            Electrode = ele;

            var body    = ele.ElecBody;
            var basePos = ele.GetElecBasePos();
            var eleInfo = ele.GetElectrodeInfo();

            BodyBox = body.Box;

            //分析面
            var    faces      = ele.ElecBody.Faces;
            double judgeValue = 15;
            var    camFaces   = new List <CAMFace>();

            ele.ElecHeadFaces.ForEach(u => {
                camFaces.Add(new CAMFace {
                    FaceTag = u.NXOpenTag, DraftAngle = u.GetDraftAngle()
                });
            });

            //基准面
            AllBaseFaces = faces.Where(u => camFaces.FirstOrDefault(m => m.FaceTag == u.NXOpenTag) == null).ToList();
            //垂直面
            VerticalFaces = camFaces.Where(u => u.DraftAngle == 0
                                           //&& u.GetSnapFace().ObjectSubType == Snap.NX.ObjectTypes.SubType.FacePlane
                                           ).ToList();
            //水平面
            HorizontalFaces = camFaces.Where(u => u.DraftAngle == 90 &&
                                             u.GetSnapFace().ObjectSubType == Snap.NX.ObjectTypes.SubType.FacePlane
                                             ).ToList();
            //平缓面(等高面)
            GentleFaces = camFaces.Where(u =>
                                         (u.DraftAngle >= judgeValue && u.DraftAngle < 90)
                                         ||
                                         (u.DraftAngle == 90 && u.GetSnapFace().ObjectSubType != Snap.NX.ObjectTypes.SubType.FacePlane)
                                         ).ToList();
            //陡峭面
            var steepFaces = camFaces.Where(u =>
                                            (u.DraftAngle < judgeValue && u.DraftAngle > 0)
                                            //||
                                            //(u.DraftAngle == 0 && u.GetSnapFace().ObjectSubType != Snap.NX.ObjectTypes.SubType.FacePlane)
                                            ).ToList();

            //倒扣面
            ButtonedFaces = camFaces.Where(u => u.DraftAngle < 0).ToList();
            //非平面
            var nonPlanefaces = ele.ElecHeadFaces.Where(u => u.ObjectSubType != Snap.NX.ObjectTypes.SubType.FacePlane).ToList();

            //设置基准面颜色
            AllBaseFaces.ForEach(u => {
                CAMFace.SetColor(camConfig.BaseFaceColor, u.NXOpenTag);
            });
            //设置垂直面颜色
            VerticalFaces.ForEach(u => {
                u.SetColor(camConfig.VerticalPlaneColor);
            });
            //设置水平面颜色
            HorizontalFaces.ForEach(u => {
                u.SetColor(camConfig.HorizontalPlaneColor);
            });
            //设置平缓面颜色
            GentleFaces.ForEach(u => {
                u.SetColor(camConfig.GentlePlaneColor);
            });
            //设置陡峭面颜色
            steepFaces.ForEach(u => {
                u.SetColor(camConfig.CurveSurfaceColor);
            });
            //倒扣面
            ButtonedFaces.ForEach(u => {
                u.SetColor(camConfig.ButtonedFaceColor);
            });

            //分析方案
            CamScheme = E_CamScheme.SIMPLE;
        }