コード例 #1
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);
        }