/// <summary> /// 处理文件分区数据 /// </summary> /// <param name="File_Entity_Datas"></param> /// <returns></returns> public File_Entity_Data SeperateFileData(File_Entity_Data File_Entity_Datas) { Vector Centre = new Vector();//分区中心点 //处理数据:分区内多个图层 for (int i = 0; i < File_Entity_Datas.SectionDataCollections.Count; i++) { Centre = GetCentre(File_Entity_Datas.SectionDataCollections[i]); //获取中心点 File_Entity_Datas.SectionDataCollections[i].Centre = new Vector(Centre); //设置中心点 //提取数据 for (int j = 0; j < File_Entity_Datas.SectionDataCollections[i].SectionDatas.Count; j++) { if (!File_Entity_Datas.SectionDataCollections[i].SectionDatas[j].EN) { continue; } File_Entity_Datas.SectionDataCollections[i].SectionDatas[j].ArcLine = CentrelizeArcLine(File_Entity_Datas.SectionDataCollections[i].SectionDatas[j].ArcLine, Centre); File_Entity_Datas.SectionDataCollections[i].SectionDatas[j].Circle = CentrelizeCircle(File_Entity_Datas.SectionDataCollections[i].SectionDatas[j].Circle, Centre); File_Entity_Datas.SectionDataCollections[i].SectionDatas[j].LWPolyline = CentrelizeArcLine(File_Entity_Datas.SectionDataCollections[i].SectionDatas[j].LWPolyline, Centre); } } //处理数据:单分区单图层 for (int i = 0; i < File_Entity_Datas.LayerSectionDatas.Count; i++) { for (int j = 0; j < File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas.Count; j++) { Centre = GetCentre(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j]); File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].Centre = new Vector(Centre); File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].ArcLine = CentrelizeArcLine(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].ArcLine, Centre); File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].Circle = CentrelizeCircle(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].Circle, Centre); File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].LWPolyline = CentrelizeArcLine(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].LWPolyline, Centre); } } return(File_Entity_Datas); }
/// <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();//释放数据 } }
/// <summary> /// 推入数据进入控制器,并加工 /// </summary> /// <param name="File_Entity_Datas"></param> /// <returns></returns> public void PushDataToController(File_Entity_Data File_Entity_Datas) { int ScissorIndex = 0; List <string> ScissorList = new List <string>(); //刀具列表 Tech_Parameter ScissorPara = new Tech_Parameter(); //刀具参数 foreach (var o in File_Entity_Datas.LayerSectionDatas) { //启用刀具参数 ScissorList = GetScissorList(File_Entity_Datas.FileName, o.LayerName);//获取当前图层刀具列表 if (ScissorList.Count <= 0) { MessageBox.Show(string.Format("图层:{0},未指定刀具,该图层加工终止!!", o.LayerName)); return;//未指定刀具 } //循环调用刀具参数 foreach (var s in ScissorList) { ScissorIndex = Program.SystemContainer.ScissorList.FindIndex(t => t.Scissors_Name == s); //获取刀具索引 if (ScissorIndex == -1) //不含此刀具 { MessageBox.Show(string.Format("刀具:{0},不存在加工终止!!", s)); return; //未指定刀具 } ScissorPara = new Tech_Parameter(Program.SystemContainer.ScissorList[ScissorIndex]); //提取刀具参数 //按照刀具参数进行加工 for (int i = 1; i < ScissorPara.RepeatTime + 1; i++) //加工次数 { /*********************************************/ //加工前动作 //Z轴动作 if (i == 1)//初始Z轴高度 { //定位到Z轴高度 } //循序步进Z轴高度 if ((ScissorPara.FocusCompensationTimes > 0) && ((i % ScissorPara.FocusCompensationTimes) == 0)) { //Z轴步进值 } /*********************************************/ //加工中 foreach (var p in o.SectionEntityDatas) { //关闭激光 Program.SystemContainer.RTC_Fun.Close_Laser(); //平台定位 Program.SystemContainer.GTS_Fun.Gts_Ready_Correct(p.Centre); //运行和暂停切换 if (on_off) { ma = new ManualResetEvent(false); ma.WaitOne(); } //退出循环 if (stop) { return; } //振镜加工轨迹推入 Program.SystemContainer.RTC_Fun.Draw_Mark(p, 1, 0); //关闭激光 Program.SystemContainer.RTC_Fun.Close_Laser(); } /*********************************************/ //加工结束 //延时操作 if ((ScissorPara.DelayCompensationTimes > 0) && ((i % ScissorPara.DelayCompensationTimes) == 0)) { Thread.Sleep(ScissorPara.DelayCompensation);//延时 } } } } }
/// <summary> /// Mark定位 矫正偏转 /// </summary> /// <param name="File_Entity_Datas"></param> /// <returns></returns> public bool CalibrateFileData(File_Entity_Data File_Entity_Datas) { Affinity_Matrix Matrix = new Affinity_Matrix(); //重新梳理Mark信息 if (MarkType == 1) // 1 - 整块板定位(取4角) { File_Entity_Datas.PlatformMarkInfo.Clear(); //清空平台Mark坐标 foreach (var o in File_Entity_Datas.DxfMarkInfo) { File_Entity_Datas.PlatformMarkInfo.Add(new Vector(o.X + File_Entity_Datas.Mark.X, o.Y + File_Entity_Datas.Mark.Y)); } } else if (MarkType == 2)// 2 - 阵列文件定位(小分区取4角); { for (int i = 0; i < File_Entity_Datas.LayerSectionDatas.Count; i++) { for (int j = 0; j < File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas.Count; j++) { File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].PlatformMarkInfo.Clear();//清空平台Mark坐标 foreach (var o in File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].DxfMarkInfo) { File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].PlatformMarkInfo.Add(new Vector(o.X + File_Entity_Datas.Mark.X, o.Y + File_Entity_Datas.Mark.Y)); } } } } //计算偏转参数 if (MarkType == 1)// 1 - 整块板定位(取4角) { //Mark点位数量异常 if ((File_Entity_Datas.PlatformMarkInfo.Count < 3) || (File_Entity_Datas.DxfMarkInfo.Count < 3)) { MessageBox.Show("Mark定位点位数据异常!!!"); return(false); } //获取整图偏转参数 Matrix = Calibration.Calibrate_Mark(File_Entity_Datas.DxfMarkInfo, File_Entity_Datas.PlatformMarkInfo); if (Matrix == null) { return(false); //Mark校准失败 } //处理所有分区数据 for (int i = 0; i < File_Entity_Datas.LayerSectionDatas.Count; i++) { for (int j = 0; j < File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas.Count; j++) { File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].ArcLine = DataResolve.CalDataByMatrix(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].ArcLine, Matrix, true); File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].Circle = DataResolve.CalDataByMatrix(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].Circle, Matrix, true); File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].LWPolyline = DataResolve.CalDataByMatrix(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].LWPolyline, Matrix, true); } } } else if (MarkType == 2)// 2 - 每个小分区定位 { //处理数据 for (int i = 0; i < File_Entity_Datas.LayerSectionDatas.Count; i++) { for (int j = 0; j < File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas.Count; j++) { //Mark点位数量异常 if ((File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].PlatformMarkInfo.Count < 3) || (File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].DxfMarkInfo.Count < 3)) { MessageBox.Show("Mark定位点位数据异常!!!"); return(false); } //获取小分区偏转参数 Matrix = Calibration.Calibrate_Mark(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].DxfMarkInfo, File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].PlatformMarkInfo); if (Matrix == null) { return(false); //Mark校准失败 } //处理所有分区数据 File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].ArcLine = DataResolve.CalDataByMatrix(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].ArcLine, Matrix, true); File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].Circle = DataResolve.CalDataByMatrix(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].Circle, Matrix, true); File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].LWPolyline = DataResolve.CalDataByMatrix(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].LWPolyline, Matrix, true); } } } else//无Mark定位校准数据处理 { //处理数据 for (int i = 0; i < File_Entity_Datas.LayerSectionDatas.Count; i++) { for (int j = 0; j < File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas.Count; j++) { File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].ArcLine = DataResolve.CalDataByMatrix(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].ArcLine, Matrix, false); File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].Circle = DataResolve.CalDataByMatrix(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].Circle, Matrix, false); File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].LWPolyline = DataResolve.CalDataByMatrix(File_Entity_Datas.LayerSectionDatas[i].SectionEntityDatas[j].LWPolyline, Matrix, false); } } } //分区数据计算 File_Entity_Datas = DataResolve.SeperateFileData(File_Entity_Datas); //返回 return(true); }