/// <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)); }
/// <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()); }
/// <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); }
/// <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); }
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; }