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