예제 #1
0
파일: Decomposer.cs 프로젝트: prepare/box2c
        public void Parse()
        {
            int     polychains = int.Parse(NextToken());
            BoundsF bounds     = new BoundsF();

            VertCount = 0;

            for (int i = 0; i < polychains; ++i)
            {
                var chain = new PolyChain();

                int verts = int.Parse(NextToken());
                VertCount += verts;
                chain.In   = (NextToken() == "in");

                for (int x = 0; x < verts; ++x)
                {
                    var vert = new PointF(float.Parse(NextToken()), float.Parse(NextToken()));
                    chain.Vertices.Add(vert);

                    bounds.Merge(vert);
                }

                for (int x = 0; x < verts; ++x)
                {
                    var vert = chain.Vertices[x];
                    vert.X -= bounds.Mins.X;
                    vert.Y -= bounds.Mins.Y;

                    vert.X /= bounds.Maxs.X - bounds.Mins.X;
                    vert.Y /= bounds.Maxs.Y - bounds.Mins.X;

                    if (vert.X < 0 || vert.Y < 0 || vert.X > 1 || vert.X > 1)
                    {
                        throw new Exception();
                    }
                    chain.Vertices[x] = vert;
                    chain.Connections.Add(int.Parse(NextToken()));
                }

                PolyChains.Add(chain);
            }
        }
예제 #2
0
        public void Parse()
        {
            int polychains = int.Parse(NextToken());
            BoundsF bounds = new BoundsF();
            VertCount = 0;

            for (int i = 0; i < polychains; ++i)
            {
                var chain = new PolyChain();

                int verts = int.Parse(NextToken());
                VertCount += verts;
                chain.In = (NextToken() == "in");

                for (int x = 0; x < verts; ++x)
                {
                    var vert = new PointF(float.Parse(NextToken()), float.Parse(NextToken()));
                    chain.Vertices.Add(vert);

                    bounds.Merge(vert);
                }

                for (int x = 0; x < verts; ++x)
                {
                    var vert = chain.Vertices[x];
                    vert.X -= bounds.Mins.X;
                    vert.Y -= bounds.Mins.Y;

                    vert.X /= bounds.Maxs.X - bounds.Mins.X;
                    vert.Y /= bounds.Maxs.Y - bounds.Mins.X;

                    if (vert.X < 0 || vert.Y < 0 || vert.X > 1 || vert.X > 1)
                        throw new Exception();
                    chain.Vertices[x] = vert;
                    chain.Connections.Add(int.Parse(NextToken()));
                }

                PolyChains.Add(chain);
            }
        }