Пример #1
0
        /// <summary>
        /// 上传CMM文件
        /// </summary>
        public static void WriteCMMFile(ElecManage.Electrode elec, object data, CMMConfig cmmConfig)
        {
            var info     = elec.GetElectrodeInfo();
            var elecName = info.Elec_Name;

            Helper.ShowMsg(string.Format("{0}开始上传取点文件...", elecName));
            var MODEL_NUMBER = info.EACT_MODELNO;
            var fileName     = string.Format("{0}{1}", elecName, ".txt");
            var result       = Path.Combine(_cmmFilePath, fileName);

            if (Directory.Exists(_cmmFilePath))
            {
                Directory.Delete(_cmmFilePath, true);
            }
            Directory.CreateDirectory(_cmmFilePath);
            var json = Newtonsoft.Json.JsonConvert.SerializeObject(data);

            File.WriteAllText(result, json);
            if (cmmConfig.IsSelGetPointFilePath && !string.IsNullOrEmpty(cmmConfig.GetPointFilePath))
            {
                var path = Path.Combine(cmmConfig.GetPointFilePath, string.Format(@"{0}\{1}", info.EACT_MODELNO, elecName));
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }

                File.WriteAllText(Path.Combine(path, fileName), json);
            }
            FtpUpload("CMM", new ElecManage.MouldInfo {
                MODEL_NUMBER = MODEL_NUMBER
            }, result, elecName);
            Helper.ShowMsg(string.Format("{0}取点文件上传成功", elecName));
        }
Пример #2
0
        /// <summary>
        /// 设置边界和加工底面
        /// </summary>
        /// <param name="ele">电极</param>
        public void SetBoundaryAndCutFloor(ElecManage.Electrode ele)
        {
            List <NXOpen.Tag>         peripheral;
            List <List <NXOpen.Tag> > innerCircumference;

            Helper.GetOutlineCurve(ele.BaseFace, out peripheral, out innerCircumference);
            var trans = Snap.Geom.Transform.CreateTranslation(0, 0, ele.GetElectrodeInfo().HEADPULLUPH);

            innerCircumference.ForEach(u => {
                var curves = new List <NXOpen.Tag>();
                u.ForEach(m => {
                    NXOpen.Tag tmpValue;
                    ufSession.Modl.CreateCurveFromEdge(m, out tmpValue);
                    var curve      = Snap.NX.Curve.Wrap(tmpValue);
                    curve.IsHidden = true;
                    curve.Move(trans);
                    curves.Add(tmpValue);
                });

                Helper.SetBoundaryByCurves(curves
                                           , NXOpen.UF.CamGeomType.CamPart, OperTag, NXOpen.UF.CamMaterialSide.CamMaterialSideInLeft);
            });

            Helper.SetCutFloor(OperTag, ele.BaseFace.GetCenterPointEx());
        }
Пример #3
0
        /// <summary>
        /// 获取取点信息
        /// </summary>
        public static GetPointInfo GetCMMPointInfo(List <PointData> points, ElecManage.Electrode elec, EactConfig.ConfigData configData)
        {
            var info     = new GetPointInfo();
            var elecInfo = elec.GetElectrodeInfo();

            info.basestationh = Math.Round(elecInfo.BasestationH, 4);
            info.sizex        = elecInfo.X;
            info.sizey        = elecInfo.Y;
            info.sizez        = elecInfo.Z;
            var box = elec.ElecBody.Box;

            info.boxMaxX  = Math.Round(box.MaxXYZ.X, 4);
            info.boxMaxY  = Math.Round(box.MaxXYZ.Y, 4);
            info.boxMaxZ  = Math.Round(box.MaxXYZ.Z, 4);
            info.boxMinX  = Math.Round(box.MinXYZ.X, 4);
            info.boxMinY  = Math.Round(box.MinXYZ.Y, 4);
            info.boxMinZ  = Math.Round(box.MinXYZ.Z, 4);
            info.headh    = Math.Round(elecInfo.HEADPULLUPH, 4);
            info.partname = elecInfo.Elec_Name;
            info.cornor   = ((int)elec.GetCMMQuadrantType(configData.QuadrantType)) + 1;
            var MODEL_NUMBER = elecInfo.EACT_MODELNO;

            info.mouldname = MODEL_NUMBER;

            var trans = Snap.Geom.Transform.CreateTranslation();

            if (elec.BaseFace != null)
            {
                var midPoint = elec.BaseFace.GetCenterPoint();
                trans = Snap.Geom.Transform.CreateTranslation(new Snap.Position() - midPoint);
            }

            //TODO 电极取点的象限角

            points.ForEach(u =>
            {
                var pointInfo       = new CMM.GetPointInfo.PointInfo();
                u.Position          = u.Position.Copy(trans);
                pointInfo.pointname = u.PointName;
                pointInfo.arrow     = u.Arrow;
                pointInfo.TIP       = string.Format("A{0}B{1}", u.A, u.B);
                pointInfo.a         = u.A;
                pointInfo.b         = u.B;
                pointInfo.type      = (int)u.PointType;
                pointInfo.x         = System.Math.Round(u.Position.X, 4);
                pointInfo.y         = System.Math.Round(u.Position.Y, 4);
                pointInfo.z         = System.Math.Round(u.Position.Z, 4);
                pointInfo.i         = System.Math.Round(u.Vector.X, 4);
                pointInfo.j         = System.Math.Round(u.Vector.Y, 4);
                pointInfo.k         = System.Math.Round(u.Vector.Z, 4);
                info.pointlist.Add(pointInfo);
            });

            return(info);
        }
Пример #4
0
        /// <summary>
        /// 自动取点
        /// </summary>
        public static List <PointData> AutoSelPoint(ElecManage.Electrode electrode, CMMConfig config, bool isUploadFile = true)
        {
            var positions     = new List <PointData>();
            var tempPositions = new List <PointData>();
            var elecInfo      = electrode.GetElectrodeInfo();

            config.ElecMaxZ = electrode.ElecBody.Box.MaxZ;
            var elecName = elecInfo.Elec_Name;

            Helper.ShowMsg(string.Format("{0}基准面取点", elecName));
            tempPositions = GetHorizontalDatumFacePositions(electrode, config);
            if (tempPositions.Count < 3)
            {
                throw new Exception("基准面取点异常!");
            }
            //根据象限排序
            positions.AddRange(OrderPointDatas(tempPositions));



            Helper.ShowMsg(string.Format("{0}侧面取点", elecName));
            tempPositions = GetVerticalDatumFacesPositions(electrode, config);
            if (tempPositions.Count < 8)
            {
                throw new Exception("侧面取点异常!");
            }
            positions.AddRange(tempPositions);



            Helper.ShowMsg(string.Format("{0}电极头部面取点", elecName));
            tempPositions = GetElectrodeHeadFacePositions(electrode, config);
            if (tempPositions.Count <= 0)
            {
                throw new Exception("电极头部面取点异常!");
            }
            //排序
            tempPositions = tempPositions.OrderBy(u => u.A).ThenBy(u => u.B).ThenByDescending(u => u.Position.Z).ToList();
            positions.AddRange(tempPositions);

            //名称
            foreach (var item in positions)
            {
                item.PointName = string.Format("P{0}", positions.IndexOf(item) + 1);
            }

            if (isUploadFile)
            {
                WriteCMMFile(electrode, GetPointInfo.GetCMMPointInfo(positions, electrode, _EactConfigData), config);
            }
            return(positions);
        }
Пример #5
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;
        }