Exemplo n.º 1
0
        /// <summary>
        /// 整板移动
        /// </summary>
        /// <param name="plate"></param>
        /// <param name="moveX"></param>
        /// <param name="moveY"></param>
        public PlateModel MovePlate(PlateModel plate, float moveX, float moveY)
        {
            for (int i = 0; i < plate.OutModel.ListShape.Count; i++)
            {
                move(plate.OutModel.ListShape[i], moveX, moveY);
            }
            for (int i = 0; i < plate.OutModel.ExpandShape.Count; i++)
            {
                move(plate.OutModel.ExpandShape[i], moveX, moveY);
            }
            plate.OutModel.IsBound = false;
            //plate .OutModel .Draw(CADInterface .bGrp .Graphics);
            if (plate.InnerModel.Count > 0)
            {
                for (int i = 0; i < plate.InnerModel.Count; i++)
                {
                    for (int j = 0; j < plate.InnerModel[i].ListShape.Count; j++)
                    {
                        move(plate.InnerModel[i].ListShape[i], moveX, moveY);
                    }
                    plate.InnerModel[i].IsBound = false;
                    //plate .InnerModel[i] .Draw(CADInterface .bGrp .Graphics);
                    for (int j = 0; j < plate.InnerModel[i].ListPoint.Count; j++)
                    {
                        plate.InnerModel[i].ListPoint[i] = move(plate.InnerModel[i].ListPoint[i], moveX, moveY);
                    }
                }
            }
            for (int i = 0; i < plate.OutModel.ListPoint.Count; i++)
            {
                plate.OutModel.ListPoint[i] = move(plate.OutModel.ListPoint[i], moveX, moveY);
            }
            for (int i = 0; i < plate.OutModel.ExpandPoint.Count; i++)
            {
                plate.OutModel.ExpandPoint[i] = move(plate.OutModel.ExpandPoint[i], moveX, moveY);
            }
            plate.RotateCenter = move(plate.RotateCenter, moveX, moveY);
            plate.PowCenter    = move(plate.PowCenter, moveX, moveY);
            plate.Bound        = new RectangleF(plate.Bound.X + moveX, plate.Bound.Y + moveY, plate.Bound.Width, plate.Bound.Height);

            return(plate);
        }
Exemplo n.º 2
0
        public async Task <JsonResult> GetPlate(PlateModel plateModel)
        {
            var    surveySelected = plateModel.surveySelected;
            string queryString    = "";

            if (surveySelected == "apogee")
            {
                //writePlateAPOGEE();
                queryString = "?plateIdApogee=" + plateModel.apogeeSelected + "&query=PlateAPOGEE&TaskName=Skyserver.GetImg.PlateAPOGEE&format=dataset";
            }
            else if (true)
            {
                queryString = "?plateIdApogee=" + "apogee.apo25m.s.r12.10001.57373" + "&query=PlateAPOGEE&TaskName=Skyserver.GetImg.PlateAPOGEE&format=dataset";
            }
            else
            {
                //writePlate();
            }

            Globals globals = new Globals();
            DataSet ds      = new DataSet();

            // TODO: cant load .net4 datase
            //using (var httpClient = new HttpClient())
            //{
            //    using (var response = await httpClient.GetStreamAsync(globals.ExploreWS + queryString))
            //    {
            //        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter fmt = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            //        ds = (System.Data.DataSet)fmt.Deserialize(response);
            //    }
            //}

            // TODO: cant load .net4 dataset

            //System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)WebRequest.Create(globals.ExploreWS + Uri.EscapeUriString(queryString));
            //WebResponse resp = req.GetResponse();
            //BinaryFormatter fmt = new BinaryFormatter();
            //ds = (DataSet)fmt.Deserialize(resp.GetResponseStream());


            return(Json("Plate information will be shown here"));
        }
Exemplo n.º 3
0
 /// <summary>
 /// 面积排序
 /// </summary>
 /// <param name="plate"></param>
 /// <returns></returns>
 public List <PlateModel> getSortByArea(List <PlateModel> plateList)
 {
     for (int i = 0; i < plateList.Count - 1; i++)
     {
         for (int j = i + 1; j < plateList.Count; j++)
         {
             if (plateList[i].Area < plateList[j].Area)
             {
                 PlateModel plateModel = plateList[i];
                 plateList[i] = plateList[j];
                 plateList[j] = plateModel;
             }
         }
     }
     for (int i = 0; i < plateList.Count; i++)
     {
         plateList[i].AreaPower = i;
     }
     return(plateList);
 }
Exemplo n.º 4
0
 /// <summary>
 /// 根据宽度进行排序
 /// </summary>
 /// <param name="plate"></param>
 /// <returns></returns>
 public List <PlateModel> getSortByHeight(List <PlateModel> plateList)
 {
     for (int i = 0; i < plateList.Count - 1; i++)
     {
         for (int j = i + 1; j < plateList.Count; j++)
         {
             if (plateList[i].Bound.Height < plateList[j].Bound.Height)
             {
                 PlateModel plateModel = plateList[i];
                 plateList[i] = plateList[j];
                 plateList[j] = plateModel;
             }
         }
     }
     for (int i = 0; i < plateList.Count; i++)
     {
         plateList[i].HeightPower = i;
     }
     return(plateList);
 }
Exemplo n.º 5
0
        /// <summary>
        /// 旋转后归位
        /// </summary>
        /// <param name="pm"></param>
        /// <param name="angle"></param>
        /// <returns></returns>
        public PlateModel RotateAndMove(PlateModel pmold, float angle)
        {
            //PlateModel pm = new RotateOper() .RotatePlate(pmold, new PointF(0, 0), angle);
            CopyOper   co = new CopyOper();
            PlateModel pm = co.CopyPlate(pmold);

            new RotateOper().RotatePlate(pm, new PointF(0, 0), angle);
            float maxX = pm.OutModel.ExpandPoint[0].X;
            float maxY = pm.OutModel.ExpandPoint[0].Y;
            float minX = pm.OutModel.ExpandPoint[0].X;
            float minY = pm.OutModel.ExpandPoint[0].Y;

            for (int i = 0; i < pm.OutModel.ExpandPoint.Count; i++)
            {
                if (maxX < pm.OutModel.ExpandPoint[i].X)
                {
                    maxX = pm.OutModel.ExpandPoint[i].X;
                }
                if (maxY < pm.OutModel.ExpandPoint[i].Y)
                {
                    maxY = pm.OutModel.ExpandPoint[i].Y;
                }

                if (minX > pm.OutModel.ExpandPoint[i].X)
                {
                    minX = pm.OutModel.ExpandPoint[i].X;
                }
                if (minY > pm.OutModel.ExpandPoint[i].Y)
                {
                    minY = pm.OutModel.ExpandPoint[i].Y;
                }
            }
            PlateModel pmmove = new MoveOper().MovePlate(pm, -minX, -minY);

            /*if (angle == 90 || angle == 270)
             *    pmmove .Rect = new RectangleF(0, 0, pm .Rect .Height, pm .Rect .Width);
             * else if (angle == 0 || angle == 180)
             *    pmmove .Rect = new RectangleF(0, 0, pm .Rect .Width, pm .Rect .Height);*/
            pmmove.Rect = GetRect(pmmove.OutModel.ExpandPoint);
            return(pmmove);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 旋转件号
        /// </summary>
        /// <param name="plate"></param>
        /// <param name="rotatePoint"></param>
        /// <param name="rotateAngle">角度以度的形式</param>
        public PlateModel RotatePlate(PlateModel plate, PointF rotatePoint, float rotateAngle)
        {
            float angle = (float)(rotateAngle * (Math.PI / 180));

            for (int i = 0; i < plate.OutModel.ListShape.Count; i++)
            {
                rotate(plate.OutModel.ListShape[i], rotatePoint, angle);
            }
            for (int i = 0; i < plate.OutModel.ExpandShape.Count; i++)
            {
                rotate(plate.OutModel.ExpandShape[i], rotatePoint, angle);
            }
            for (int i = 0; i < plate.OutModel.ListPoint.Count; i++)
            {
                plate.OutModel.ListPoint[i] = rotate(plate.OutModel.ListPoint[i], rotatePoint, angle);
            }
            for (int i = 0; i < plate.OutModel.ExpandPoint.Count; i++)
            {
                plate.OutModel.ExpandPoint[i] = rotate(plate.OutModel.ExpandPoint[i], rotatePoint, angle);
            }
            for (int i = 0; i < plate.InnerModel.Count; i++)
            {
                for (int j = 0; j < plate.InnerModel[i].ListShape.Count; j++)
                {
                    rotate(plate.InnerModel[i].ListShape[j], rotatePoint, angle);
                }
            }
            for (int i = 0; i < plate.InnerModel.Count; i++)
            {
                for (int j = 0; j < plate.InnerModel[i].ListPoint.Count; j++)
                {
                    plate.InnerModel[i].ListPoint[j] = rotate(plate.InnerModel[i].ListPoint[j], rotatePoint, angle);
                }
            }

            plate.PowCenter    = rotate(plate.PowCenter, rotatePoint, angle);
            plate.RotateCenter = rotate(plate.RotateCenter, rotatePoint, angle);
            return(plate);
        }
Exemplo n.º 7
0
        /// <summary>
        /// 对方案的基因序列进行变异,
        /// 变异基因后的基因不能存在于原方案中,变异量要足够的多
        /// </summary>
        /// <param name="listGene"></param>
        /// <param name="fangAn"></param>
        /// <param name="yiBianLv">异变概率</param>
        /// <returns></returns>
        public PaiYangFangAn getBianYiFangAn(List <PlateModel> listGene, PaiYangFangAn fangAn, float yiBianLv)
        {
            #region 创造轮盘
            List <RouletteAlgorithm> listLP = new List <RouletteAlgorithm>();
            for (int i = 0; i < listGene.Count; i++)
            {
                if (!listGene[i].HadUsedGene)
                {
                    RouletteAlgorithm ra = new RouletteAlgorithm();
                    ra.Plate = listGene[i];
                    listLP.Add(ra);
                }
            }
            listLP = getLunPan(listLP);     //生成轮盘概率
            #endregion

            Random rt = new Random();
            for (int i = 0; i < fangAn.ListPlate.Count; i++)
            {
                if (rt.NextDouble() < yiBianLv)
                {
                    //进行变异
                    double gaiLv = rt.NextDouble();
                    for (int j = 0; j < listLP.Count; j++)
                    {
                        if (gaiLv >= listLP[j].JiLeiGaiLvMin && gaiLv < listLP[j].JiLeiGaiLvMax)
                        {
                            PlateModel plate = listLP[j].Plate;
                            listLP[j].Plate           = fangAn.ListPlate[i].Plate;
                            fangAn.ListPlate[i].Plate = plate;
                        }
                    }
                }
            }
            return(fangAn);
        }
Exemplo n.º 8
0
        /// <summary>
        /// 判断件号是不是圆弧类型的件号
        /// </summary>
        /// <param name="plate"></param>
        /// <returns></returns>
        public PlateModel juedeIsArc(PlateModel plate)
        {
            for (int i = 0; i < plate.OutModel.ListShape.Count; i++)
            {
                if ("Arc".Equals(plate.OutModel.ListShape[i].ShapeClass) ||
                    "Ellipse".Equals(plate.OutModel.ListShape[i].ShapeClass) ||
                    "Circle".Equals(plate.OutModel.ListShape[i].ShapeClass))
                {
                    plate.OutModel.IsArc = true;
                    plate.IsArc          = true;
                    break;
                }
            }

            for (int i = 0; i < plate.InnerModel.Count; i++)
            {
                for (int j = 0; j < plate.InnerModel[i].ListShape.Count; j++)
                {
                    plate.InnerModel[i].IsArc = true;
                    break;
                }
            }
            return(plate);
        }
Exemplo n.º 9
0
        /// <summary>
        /// 组合图形旋转归位
        /// </summary>
        /// <param name="pm"></param>
        /// <param name="angle"></param>
        /// <returns></returns>
        public PlateCombine RotateAndMove(PlateCombine pc, float angle)
        {
            CopyOper   co  = new CopyOper();
            PlateModel pm1 = co.CopyPlate(pc.Plate1);
            PlateModel pm2 = co.CopyPlate(pc.Plate2);

            RotateOper ro = new RotateOper();

            pm1 = ro.RotatePlate(pm1, new PointF(0, 0), angle);
            pm2 = ro.RotatePlate(pm2, new PointF(0, 0), angle);

            float maxX = pm1.OutModel.ExpandPoint[0].X;
            float maxY = pm1.OutModel.ExpandPoint[0].Y;
            float minX = pm1.OutModel.ExpandPoint[0].X;
            float minY = pm1.OutModel.ExpandPoint[0].Y;

            for (int i = 0; i < pm1.OutModel.ExpandPoint.Count; i++)
            {
                if (maxX < pm1.OutModel.ExpandPoint[i].X)
                {
                    maxX = pm1.OutModel.ExpandPoint[i].X;
                }
                if (maxY < pm1.OutModel.ExpandPoint[i].Y)
                {
                    maxY = pm1.OutModel.ExpandPoint[i].Y;
                }

                if (minX > pm1.OutModel.ExpandPoint[i].X)
                {
                    minX = pm1.OutModel.ExpandPoint[i].X;
                }
                if (minY > pm1.OutModel.ExpandPoint[i].Y)
                {
                    minY = pm1.OutModel.ExpandPoint[i].Y;
                }
            }
            for (int i = 0; i < pm2.OutModel.ExpandPoint.Count; i++)
            {
                if (maxX < pm2.OutModel.ExpandPoint[i].X)
                {
                    maxX = pm2.OutModel.ExpandPoint[i].X;
                }
                if (maxY < pm2.OutModel.ExpandPoint[i].Y)
                {
                    maxY = pm2.OutModel.ExpandPoint[i].Y;
                }

                if (minX > pm2.OutModel.ExpandPoint[i].X)
                {
                    minX = pm2.OutModel.ExpandPoint[i].X;
                }
                if (minY > pm2.OutModel.ExpandPoint[i].Y)
                {
                    minY = pm2.OutModel.ExpandPoint[i].Y;
                }
            }
            MoveOper mo = new MoveOper();

            mo.MovePlate(pm1, -minX, -minY);
            mo.MovePlate(pm2, -minX, -minY);

            PlateCombine pcnew = new PlateCombine(pm1, pm2);

            pcnew.Rect = pc.Rect;
            //if (angle == 90)
            //{
            //      pcnew .Rect = new RectangleF(0, 0, pc .Rect .Height, pc .Rect .Width);
            //}
            pcnew.Rect = GetRect(pm1.OutModel.ExpandPoint, pm2.OutModel.ExpandPoint);
            return(pcnew);
        }
Exemplo n.º 10
0
 public PlateModel getRotateCenter(PlateModel plate)
 {
     plate.RotateCenter = new System.Drawing.PointF(plate.Bound.X + (plate.Bound.Width / 2), plate.Bound.Y + (plate.Bound.Height / 2));
     return(plate);
 }
Exemplo n.º 11
0
        private PlateModel analyticalPaper(string url)
        {
            //DateTime beforDT = System.DateTime.Now;

            PlateModel plate = new PlateModel();

            string[] urlStr     = url.Split('\\');
            string[] nameAndNum = urlStr[urlStr.Length - 1].Split('-');
            plate.PlateName  = nameAndNum[0];
            plate.PlateCode  = nameAndNum[0];
            plate.PlateCount = int.Parse(nameAndNum[1].Substring(0, nameAndNum[1].Length - 4));

            #region 加载dxf文件,获取文件每行的内容
            List <string> listDxfInfo = new List <string>();
            StreamReader  sr          = new StreamReader(url, Encoding.Default);
            String        input;
            while ((input = sr.ReadLine()) != "EOF")
            {
                listDxfInfo.Add(input);
            }
            listDxfInfo.Add("EOF");
            sr.Close();
            #endregion

            #region 提取需要的信息内容,这里按图形和文字进行分类提取
            List <string> listLine    = new List <string>();                            //直线类型
            List <string> listCircle  = new List <string>();                            //圆类型
            List <string> listArc     = new List <string>();                            //圆弧类型
            List <string> listEllipse = new List <string>();                            //椭圆类型
            List <string> listText    = new List <string>();                            //单行文字类型
            List <string> listMtext   = new List <string>();                            //多行文字类型
            List <string> listLayer   = new List <string>();                            //图层信息
            Dictionary <string, string> layerNandC = new Dictionary <string, string>(); //图层颜色和信息

            for (int i = 0; i < listDxfInfo.Count; i++)
            {
                string s1 = listDxfInfo[i].Trim();
                string s2 = listDxfInfo[i = i + 1].Trim();

                if ("LAYER".Equals(s2) && "0".Equals(s1))
                {
                    List <string> getList = createListByClass(i - 1, listDxfInfo);
                    listLayer.AddRange(getList);
                    i = i + getList.Count - 2;
                    getList.Clear();
                }
                else if ("LINE".Equals(s2) && "0".Equals(s1))
                {
                    List <string> getList = createListByClass(i - 1, listDxfInfo);
                    listLine.AddRange(getList);
                    i = i + getList.Count - 2;
                    getList.Clear();
                }
                else if ("CIRCLE".Equals(s2) && "0".Equals(s1))
                {
                    List <string> getList = createListByClass(i - 1, listDxfInfo);
                    listCircle.AddRange(getList);
                    i = i + getList.Count - 2;
                    getList.Clear();
                }
                else if ("ARC".Equals(s2) && "0".Equals(s1))
                {
                    List <string> getList = createListByClass(i - 1, listDxfInfo);
                    listArc.AddRange(getList);
                    i = i + getList.Count - 2;
                    getList.Clear();
                }
                else if ("ELLIPSE".Equals(s2) && "0".Equals(s1))
                {
                    List <string> getList = createListByClass(i - 1, listDxfInfo);
                    listEllipse.AddRange(getList);
                    i = i + getList.Count - 2;
                    getList.Clear();
                }
                else if ("TEXT".Equals(s2) && "0".Equals(s1))
                {
                    List <string> getList = createListByClass(i - 1, listDxfInfo);
                    listText.AddRange(getList);
                    i = i + getList.Count - 2;
                    getList.Clear();
                }
                else if ("MTEXT".Equals(s2) && "0".Equals(s1))
                {
                    List <string> getList = createListByClass(i - 1, listDxfInfo);
                    listMtext.AddRange(getList);
                    i = i + getList.Count - 2;
                    getList.Clear();
                }
            }

            listDxfInfo.Clear();
            #endregion

            #region 利用GDI+在自己的cad面板中画出提取出的内容
            if (listLayer.Count > 0)
            {
                layerNandC = new LayerTool().getLayer(listLayer);
            }
            if (listLine.Count > 0)
            {
                plate.OutModel.ListShape.AddRange(new LineTool().getLineByColor(listLine, layerNandC));
            }
            if (listCircle.Count > 0)
            {
                plate.OutModel.ListShape.AddRange(new CircleTool().getLineByColor(listCircle, layerNandC));
            }
            if (listArc.Count > 0)
            {
                plate.OutModel.ListShape.AddRange(new ArcTool().getLineByColor(listArc, layerNandC));
            }
            //if (listText.Count > 0) { new TextTool().createText(listText); }
            if (listEllipse.Count > 0)
            {
                plate.OutModel.ListShape.AddRange(new EllipseTool().getLineByColor(listEllipse, layerNandC));
            }
            #endregion

            listEllipse.Clear();
            listText.Clear();
            listArc.Clear();
            listCircle.Clear();
            listLine.Clear();
            listLayer.Clear();
            layerNandC.Clear();

            ModelOper modelOper = new ModelOper();

            plate = modelOper.baseShapeSort(plate);
            for (int k = 0; k < plate.InnerModel.Count; k++)
            {
                plate.InnerModel[k] = modelOper.reSetPointShunXu(plate.InnerModel[k], false);
            }

            //for (int i = 0; i < plate.InnerModel[0].ListShape.Count; i++)
            //{
            //    Console.WriteLine("{0},{1},{2}",
            //       plate.InnerModel[0].ListShape[i].ShapeClass, plate.InnerModel[0].ListShape[i].StartPoint, plate.InnerModel[0].ListShape[i].EndPoint);
            //}

            //CADInterface.currentPlates.Add(plate.OutModel);          //这里不存在外围面域,下面的判断之后才选定外围面域
            CADInterface.currentPlates.AddRange(plate.InnerModel);
            CADInterface.DrawShap();
            plate = modelOper.reSetOutInner(plate);
            plate = modelOper.juedeIsArc(plate);
            plate = new CalculateArea().getPlateArea(plate);
            plate = new CalculateArea().getPlateBound(plate);
            plate = new CreateCenterPoint().getRotateCenter(plate);
            plate = new CreateCenterPoint().getPowCenter(plate);

            //DateTime afterDT = System.DateTime.Now;
            //TimeSpan ts = afterDT.Subtract(beforDT);
            //Console.WriteLine("件号:{0},时间:{1}",
            //        plate.PlateName, ts.TotalSeconds);

            return(plate);

            //DateTime afterDT = System.DateTime.Now;
            //TimeSpan ts = afterDT.Subtract(beforDT);
            //MessageBox.Show("DateTime总共花费:" + ts.TotalMilliseconds);
        }
Exemplo n.º 12
0
 public PlateModel getPlateBound(PlateModel plate)
 {
     plate.Bound = plate.OutModel.Bound;
     return(plate);
 }
Exemplo n.º 13
0
 public void RotateCSYS(PlateModel plate, float movey)
 {
     RotatePlate(plate, new PointF(0, 0), 90);
     new MoveOper().MovePlate(plate, 0, movey);
 }
Exemplo n.º 14
0
 public PlateCombine(PlateModel p1, PlateModel p2)
 {
     Plate1 = p1;
     Plate2 = p2;
 }
Exemplo n.º 15
0
        public PlateModel Move(PlateModel pm, float x, float y)
        {
            PlateModel pmnew = new MoveOper().MovePlate(pm, x, y);

            return(pmnew);
        }
Exemplo n.º 16
0
        public List <PlateCombine> GetMinPlateCombineAll(PlateModel source, float T, string type, float limit = -1, bool _matchwidth = false
                                                         , float _matchrate = 0.9f)
        {
            RectHelper rect  = new RectHelper();
            CopyOper   co    = new CopyOper();
            PlateModel pm    = co.CopyPlate(source);
            PlateModel pmnew = co.CopyPlate(source);       //旋转180后的图形

            pmnew = Rotate(pmnew, 180);

            List <PointF> pnew  = pmnew.OutModel.ExpandPoint;
            List <PointF> chnew = rect.GetConvexHull(pmnew.OutModel.ExpandPoint);

            List <PointF>       p  = pm.OutModel.ExpandPoint;
            List <PointF>       ch = rect.GetConvexHull(pm.OutModel.ExpandPoint);
            var                 tp = rect.CombineAll(p, ch, pnew, chnew, T, limit, type, _matchwidth, _matchrate);
            List <PlateCombine> pc = new List <PlateCombine>();

            if (Convert.ToSingle(tp.Item1["area"].ToString()) > 0)
            {
                PlateModel pm1    = co.CopyPlate(pm);
                PlateModel pmnew1 = co.CopyPlate(pmnew);
                Move(pmnew1, Convert.ToSingle(tp.Item1["movex"]), Convert.ToSingle(tp.Item1["movey"]));
                RotateAndMove(pm1, pmnew1, Convert.ToSingle(tp.Item1["angle"]));
                PlateCombine pc1 = new PlateCombine(pm1, pmnew1, Convert.ToSingle(tp.Item1["angle"]), Convert.ToSingle(tp.Item1["angle2"]));
                pc1.Rect = pm1.Rect = pmnew1.Rect = GetRect(pm1.OutModel.ExpandPoint, pmnew1.OutModel.ExpandPoint);
                pc.Add(pc1);
            }
            if (Convert.ToSingle(tp.Item2["area"].ToString()) > 0)
            {
                PlateModel pm2    = co.CopyPlate(pm);
                PlateModel pmnew2 = co.CopyPlate(pmnew);
                Move(pmnew2, Convert.ToSingle(tp.Item2["movex"]), Convert.ToSingle(tp.Item2["movey"]));
                RotateAndMove(pm2, pmnew2, Convert.ToSingle(tp.Item2["angle"]));
                PlateCombine pc2 = new PlateCombine(pm2, pmnew2, Convert.ToSingle(tp.Item1["angle"]), Convert.ToSingle(tp.Item1["angle2"]));
                pc2.Rect = pm2.Rect = pmnew2.Rect = GetRect(pm2.OutModel.ExpandPoint, pmnew2.OutModel.ExpandPoint);
                pc.Add(pc2);
            }
            if (Convert.ToSingle(tp.Item3["area"].ToString()) > 0)
            {
                PlateModel pm3    = co.CopyPlate(pm);
                PlateModel pmnew3 = co.CopyPlate(pmnew);
                Move(pmnew3, Convert.ToSingle(tp.Item3["movex"]), Convert.ToSingle(tp.Item3["movey"]));
                RotateAndMove(pm3, pmnew3, Convert.ToSingle(tp.Item3["angle"]));
                PlateCombine pc3 = new PlateCombine(pm3, pmnew3, Convert.ToSingle(tp.Item1["angle"]), Convert.ToSingle(tp.Item1["angle2"]));
                pc3.Rect = pm3.Rect = pmnew3.Rect = GetRect(pm3.OutModel.ExpandPoint, pmnew3.OutModel.ExpandPoint);
                pc.Add(pc3);
            }
            if (Convert.ToSingle(tp.Item4["area"].ToString()) > 0)
            {
                PlateModel pm4    = co.CopyPlate(pm);
                PlateModel pmnew4 = co.CopyPlate(pmnew);
                Move(pmnew4, Convert.ToSingle(tp.Item4["movex"]), Convert.ToSingle(tp.Item4["movey"]));
                RotateAndMove(pm4, pmnew4, Convert.ToSingle(tp.Item4["angle"]));
                PlateCombine pc4 = new PlateCombine(pm4, pmnew4, Convert.ToSingle(tp.Item1["angle"]), Convert.ToSingle(tp.Item1["angle2"]));
                pc4.Rect = pm4.Rect = pmnew4.Rect = GetRect(pm4.OutModel.ExpandPoint, pmnew4.OutModel.ExpandPoint);
                pc.Add(pc4);
            }
            if (Convert.ToSingle(tp.Item1["area"].ToString()) > 0)
            {
                PlateModel pm5    = co.CopyPlate(pm);
                PlateModel pmnew5 = co.CopyPlate(pmnew);
                Move(pmnew5, Convert.ToSingle(tp.Item1["movex"]), Convert.ToSingle(tp.Item1["movey"]));
                RotateAndMove(pm5, pmnew5, Convert.ToSingle(tp.Item1["angle2"]));
                PlateCombine pc5 = new PlateCombine(pm5, pmnew5, Convert.ToSingle(tp.Item1["angle"]), Convert.ToSingle(tp.Item1["angle2"]));
                pc5.Rect = pm5.Rect = pmnew5.Rect = GetRect(pm5.OutModel.ExpandPoint, pmnew5.OutModel.ExpandPoint);
                pc.Add(pc5);
            }
            if (Convert.ToSingle(tp.Item2["area"].ToString()) > 0)
            {
                PlateModel pm6    = co.CopyPlate(pm);
                PlateModel pmnew6 = co.CopyPlate(pmnew);
                Move(pmnew6, Convert.ToSingle(tp.Item2["movex"]), Convert.ToSingle(tp.Item2["movey"]));
                RotateAndMove(pm6, pmnew6, Convert.ToSingle(tp.Item2["angle2"]));
                PlateCombine pc6 = new PlateCombine(pm6, pmnew6, Convert.ToSingle(tp.Item1["angle"]), Convert.ToSingle(tp.Item1["angle2"]));
                pc6.Rect = pm6.Rect = pmnew6.Rect = GetRect(pm6.OutModel.ExpandPoint, pmnew6.OutModel.ExpandPoint);
                pc.Add(pc6);
            }
            if (Convert.ToSingle(tp.Item3["area"].ToString()) > 0)
            {
                PlateModel pm7    = co.CopyPlate(pm);
                PlateModel pmnew7 = co.CopyPlate(pmnew);
                Move(pmnew7, Convert.ToSingle(tp.Item3["movex"]), Convert.ToSingle(tp.Item3["movey"]));
                RotateAndMove(pm7, pmnew7, Convert.ToSingle(tp.Item3["angle2"]));
                PlateCombine pc7 = new PlateCombine(pm7, pmnew7, Convert.ToSingle(tp.Item1["angle"]), Convert.ToSingle(tp.Item1["angle2"]));
                pc7.Rect = pm7.Rect = pmnew7.Rect = GetRect(pm7.OutModel.ExpandPoint, pmnew7.OutModel.ExpandPoint);
                pc.Add(pc7);
            }
            if (Convert.ToSingle(tp.Item4["area"].ToString()) > 0)
            {
                PlateModel pm8    = co.CopyPlate(pm);
                PlateModel pmnew8 = co.CopyPlate(pmnew);
                Move(pmnew8, Convert.ToSingle(tp.Item4["movex"]), Convert.ToSingle(tp.Item4["movey"]));
                RotateAndMove(pm8, pmnew8, Convert.ToSingle(tp.Item4["angle2"]));
                PlateCombine pc8 = new PlateCombine(pm8, pmnew8, Convert.ToSingle(tp.Item1["angle"]), Convert.ToSingle(tp.Item1["angle2"]));
                pc8.Rect = pm8.Rect = pmnew8.Rect = GetRect(pm8.OutModel.ExpandPoint, pmnew8.OutModel.ExpandPoint);
                pc.Add(pc8);
            }

            return(pc);
        }
 private void Awake( )
 {
     _model = GetComponent <PlateModel> ( );
     _view  = GetComponent <PlateView> ( );
 }
Exemplo n.º 18
0
 public bool MatchesPlate(PlateModel plate)
 {
     return(HasLettuce == plate.HasLettuce &&
            HasTomato == plate.HasTomato &&
            HasMushroom == plate.HasMushroom);
 }
Exemplo n.º 19
0
        /// <summary>
        /// 将读取初来的线分成一个一个的model先存放在InnerModel中
        /// </summary>
        /// <param name="plate"></param>
        /// <returns></returns>
        public PlateModel baseShapeSort(PlateModel plate)
        {
            List <BaseModel> listModel = new List <BaseModel>();

            while (plate.OutModel.ListShape.Count > 0)
            {
                BaseModel newModel = new BaseModel();
                BaseShape shape    = plate.OutModel.ListShape[0];
                if ("Circle".Equals(shape.ShapeClass) || ("Ellipse".Equals(shape.ShapeClass) && ((Ellipse)shape).Complete))
                {
                    #region 单个自成循环
                    newModel.ListShape.Add(shape);
                    newModel.IsArc = true;
                    plate.OutModel.ListShape.RemoveAt(0);
                    newModel.ListPoint.Add(shape.StartPoint);
                    if ("Circle".Equals(shape.ShapeClass))
                    {
                        newModel.ListPoint.AddRange(((Circle)shape).ListPoint);
                    }
                    else
                    {
                        newModel.ListPoint.AddRange(((Ellipse)shape).ListPoint);
                    }
                    #endregion
                }
                else if (plate.OutModel.ListShape.Count > 1)
                {
                    #region 多段线形成循环
                    newModel.ListShape.Add(shape);
                    PointF signSp = new PointF(shape.StartPoint.X, shape.StartPoint.Y);
                    PointF signEp = new PointF(shape.EndPoint.X, shape.EndPoint.Y);
                    newModel.ListPoint.Add(signEp);
                    bool endLoop    = false;
                    bool reSetOrder = false;                //判断是否需要重置起点和终点
                    while (!endLoop)
                    {
                        int sign = -99;
                        if (plate.OutModel.ListShape.Count > 1)
                        {
                            #region 剩下的线段数量大于1进行判断
                            for (int i = 1; i < plate.OutModel.ListShape.Count; i++)
                            {
                                BaseShape getShape = plate.OutModel.ListShape[i];
                                if (pointToPoint(signEp, getShape.StartPoint) < 0.1)
                                {
                                    newModel.ListShape.Add(getShape);
                                    signEp = new PointF(getShape.EndPoint.X, getShape.EndPoint.Y);
                                    sign   = i;
                                    if ("Arc".Equals(getShape.ShapeClass) || "Ellipse".Equals(getShape.ShapeClass))
                                    {
                                        if ("Arc".Equals(getShape.ShapeClass))
                                        {
                                            newModel.ListPoint.AddRange(((Arc)getShape).ListPoint);
                                        }
                                        else
                                        {
                                            newModel.ListPoint.AddRange(((Ellipse)getShape).ListPoint);
                                        }
                                        newModel.ListPoint.Add(signEp);
                                    }
                                    else
                                    {
                                        newModel.ListPoint.Add(signEp);
                                    }
                                    break;
                                }
                                else if (pointToPoint(signEp, getShape.EndPoint) < 0.1)
                                {
                                    newModel.ListShape.Add(getShape);
                                    signEp     = new PointF(getShape.StartPoint.X, getShape.StartPoint.Y);
                                    sign       = i;
                                    reSetOrder = true;
                                    break;
                                }
                            }
                            #endregion
                        }

                        #region 没有找到线段,跳出while循环
                        if (sign == -99)
                        {
                            endLoop = true;
                            break;
                        }
                        else
                        {
                            plate.OutModel.ListShape.RemoveAt(sign);
                        }
                        #endregion

                        #region 如果线段已经和起始线段相交,则直接退出本次循环
                        if (pointToPoint(signSp, signEp) < 0.1)
                        {
                            endLoop = true;
                            break;
                        }
                        #endregion
                    }
                    plate.OutModel.ListShape.RemoveAt(0);

                    if (reSetOrder)
                    {
                        newModel.ListPoint.Clear();
                        newModel = reSetSpEpOrder(newModel);
                    }
                    #endregion
                }
                newModel.ModelId           = CADInterface.globalModelID;
                CADInterface.globalModelID = CADInterface.globalModelID + 1;
                listModel.Add(newModel);
            }
            plate.InnerModel.AddRange(listModel);
            return(plate);
        }
Exemplo n.º 20
0
        /// <summary>
        /// 整版复制
        /// </summary>
        /// <param name="plate"></param>
        /// <returns></returns>
        public PlateModel CopyPlate(PlateModel plate)
        {
            PlateModel copyPlate   = new PlateModel();
            BaseModel  newOutModel = new BaseModel();

            for (int i = 0; i < plate.OutModel.ListShape.Count; i++)
            {
                newOutModel.ListShape.Add(copy(plate.OutModel.ListShape[i]));
            }
            for (int i = 0; i < plate.OutModel.ExpandShape.Count; i++)
            {
                newOutModel.ExpandShape.Add(copy(plate.OutModel.ExpandShape[i]));
            }
            newOutModel.ListPoint.AddRange(plate.OutModel.ListPoint);
            newOutModel.ExpandPoint.AddRange(plate.OutModel.ExpandPoint);
            newOutModel.IsArc          = plate.OutModel.IsArc;
            newOutModel.IsInner        = plate.OutModel.IsInner;
            newOutModel.Area           = plate.OutModel.Area;
            newOutModel.Bound          = plate.OutModel.Bound;
            newOutModel.ModelId        = CADInterface.globalModelID;
            CADInterface.globalModelID = CADInterface.globalModelID + 1;
            //CADInterface .currentPlates .Add(newOutModel);
            //newOutModel.Draw(CADInterface.bGrp.Graphics);
            copyPlate.OutModel = newOutModel;

            if (plate.InnerModel.Count > 0)
            {
                for (int i = 0; i < plate.InnerModel.Count; i++)
                {
                    BaseModel newInnerModel = new BaseModel();
                    for (int j = 0; j < plate.InnerModel[i].ListShape.Count; j++)
                    {
                        newInnerModel.ListShape.Add(copy(plate.InnerModel[i].ListShape[i]));
                    }
                    newInnerModel.ListPoint.AddRange(plate.InnerModel[i].ListPoint);
                    newInnerModel.IsArc   = plate.InnerModel[i].IsArc;
                    newInnerModel.IsInner = plate.InnerModel[i].IsInner;
                    newInnerModel.Area    = plate.InnerModel[i].Area;
                    newInnerModel.Bound   = plate.InnerModel[i].Bound;
                    //newInnerModel.Draw(CADInterface.bGrp.Graphics);
                    newInnerModel.ModelId      = CADInterface.globalModelID;
                    CADInterface.globalModelID = CADInterface.globalModelID + 1;
                    //CADInterface .currentPlates .Add(newInnerModel);
                    copyPlate.InnerModel.Add(newInnerModel);
                }
            }

            copyPlate.RotateCenter = plate.RotateCenter;
            copyPlate.PowCenter    = plate.PowCenter;
            copyPlate.IsArc        = plate.IsArc;
            copyPlate.PlateCode    = plate.PlateCode;
            copyPlate.PlateName    = plate.PlateName;
            copyPlate.PlateNum     = plate.PlateNum;
            copyPlate.Area         = plate.Area;
            copyPlate.Bound        = plate.Bound;
            copyPlate.Rect         = plate.Rect;

            copyPlate.GridValue  = plate.GridValue == null ? null : plate.GridValue.ToList();
            copyPlate.id         = plate.id;
            copyPlate.GridLen    = plate.GridLen;
            copyPlate.GridWid    = plate.GridWid;
            copyPlate.Rect       = plate.Rect;
            copyPlate.Combine    = plate.Combine;
            copyPlate.PlateCount = plate.PlateCount;

            return(copyPlate);
        }