/// <summary> /// 获取该分区中心坐标 /// </summary> /// <param name="SectionEntityData"></param> /// <returns></returns> public Vector GetCentre(Section_Entity_Data SectionEntityData) { //变量初始化 Vector Result = new Vector(); List <decimal> Tem_Dat_X = new List <decimal>(); List <decimal> Tem_Dat_Y = new List <decimal>(); //获取数据 if (SectionEntityData.ArcLine.Count > 0) { for (int i = 0; i < SectionEntityData.ArcLine.Count; i++) { if (SectionEntityData.ArcLine[i].Count >= 0)//判断数据大于零 { Tem_Dat_X.Add(SectionEntityData.ArcLine[i].Max(o => o.Start_x)); Tem_Dat_X.Add(SectionEntityData.ArcLine[i].Min(o => o.Start_x)); Tem_Dat_X.Add(SectionEntityData.ArcLine[i].Max(o => o.End_x)); Tem_Dat_X.Add(SectionEntityData.ArcLine[i].Min(o => o.End_x)); Tem_Dat_Y.Add(SectionEntityData.ArcLine[i].Max(o => o.Start_y)); Tem_Dat_Y.Add(SectionEntityData.ArcLine[i].Min(o => o.Start_y)); Tem_Dat_Y.Add(SectionEntityData.ArcLine[i].Max(o => o.End_y)); Tem_Dat_Y.Add(SectionEntityData.ArcLine[i].Min(o => o.End_y)); } } } if (SectionEntityData.Circle.Count > 0) { Tem_Dat_X.Add(SectionEntityData.Circle.Max(o => o.Center_x)); Tem_Dat_X.Add(SectionEntityData.Circle.Min(o => o.Center_x)); Tem_Dat_Y.Add(SectionEntityData.Circle.Max(o => o.Center_y)); Tem_Dat_Y.Add(SectionEntityData.Circle.Min(o => o.Center_y)); } if (SectionEntityData.LWPolyline.Count > 0) { for (int i = 0; i < SectionEntityData.LWPolyline.Count; i++) { if (SectionEntityData.LWPolyline[i].Count >= 0)//判断数据大于零 { Tem_Dat_X.Add(SectionEntityData.LWPolyline[i].Max(o => o.Start_x)); Tem_Dat_X.Add(SectionEntityData.LWPolyline[i].Min(o => o.Start_x)); Tem_Dat_X.Add(SectionEntityData.LWPolyline[i].Max(o => o.End_x)); Tem_Dat_X.Add(SectionEntityData.LWPolyline[i].Min(o => o.End_x)); Tem_Dat_Y.Add(SectionEntityData.LWPolyline[i].Max(o => o.Start_y)); Tem_Dat_Y.Add(SectionEntityData.LWPolyline[i].Min(o => o.Start_y)); Tem_Dat_Y.Add(SectionEntityData.LWPolyline[i].Max(o => o.End_y)); Tem_Dat_Y.Add(SectionEntityData.LWPolyline[i].Min(o => o.End_y)); } } } //计算返回坐标 if ((Tem_Dat_X.Count <= 0) || (Tem_Dat_Y.Count <= 0)) { Result = new Vector(0, 0); } else { Result = new Vector((Tem_Dat_X.Max() + Tem_Dat_X.Min()) / 2, (Tem_Dat_Y.Max() + Tem_Dat_Y.Min()) / 2); } return(Result); }
/// <summary> /// 解析数据 /// </summary> public void ResolveData() { //解析项目工程 if (MainLaserProject.FileList.Count <= 0) { MessageBox.Show("项目中无可用文件!!!"); return; } //读取DXF文件 DxfDocument dxf = DataResolve.Read_File(MainLaserProject.FileList[0].Path); if (dxf == null) { MessageBox.Show(string.Format("{0}数据读取失败!!!", MainLaserProject.FileList[0].Name)); return; } //指定文件名 File_Entity_Datas = new File_Entity_Data(); File_Entity_Datas.FileName = MainLaserProject.FileList[0].Name; //提取Mark信息 if (MarkType == 1) // 1 - 整块板定位(取4角) { File_Entity_Datas.DxfMarkInfo = DataResolve.DistractMark(dxf, "Mark"); //mark信息 } //获取分区编号序列 List <int> SectionList = new List <int>(); foreach (var o in MainLaserProject.FileList[0].LaserLayer) { SectionList.AddRange(DataResolve.DistractSectionColor(dxf, o));//追加数据 } SectionList = SectionList.Distinct().OrderBy(o => o).ToList(); if (SectionList.Count <= 0) { return; } //按分区提取数据 Integrate_Entity_Data TemData = new Integrate_Entity_Data(); //图层数据 Section_Entity_Data TemSectionData = new Section_Entity_Data(); //分区数据 foreach (var o in MainLaserProject.FileList[0].LaserLayer) { TemData.LayerName = o; foreach (var p in SectionList) { TemSectionData.Color = p; TemSectionData.ArcLine = DataResolve.DistractArcLine(dxf, p, o); //圆弧直线数据 TemSectionData.Circle = DataResolve.DistractCircle(dxf, p, o); //整圆数据 TemSectionData.LWPolyline = DataResolve.DistractLWPolyline(dxf, p, o); //多边形数据 if (MarkType == 2) //2 - 阵列文件定位(小分区取4角) { TemSectionData.DxfMarkInfo = DataResolve.DistractMark(dxf, p, "Mark"); //mark信息 } TemData.SectionEntityDatas.Add(new Section_Entity_Data(TemSectionData)); TemSectionData.Empty();//释放数据 } File_Entity_Datas.LayerSectionDatas.Add(new Integrate_Entity_Data(TemData)); TemData.Empty();//释放数据 } }