/// <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);
        }
Ejemplo n.º 2
0
        /// <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();//释放数据
            }
        }