Beispiel #1
0
        public void TestValidSolids()
        {
            var idg    = new IDGenerator();
            var box    = new Box(Coordinate.One * -100, Coordinate.One * 100);
            var planes = new CylinderBrush().Create(idg, box, null, 2).OfType <Solid>().SelectMany(x => x.Faces).Select(x => x.Plane).ToList();
            var solid  = Solid.CreateFromIntersectingPlanes(planes, idg);

            Assert.IsTrue(solid.IsValid());
        }
Beispiel #2
0
        public void BenchmarkSolidConstruction()
        {
            var idg       = new IDGenerator();
            var box       = new Box(Coordinate.One * -100, Coordinate.One * 100);
            var planes    = new CylinderBrush().Create(idg, box, null, 2).OfType <Solid>().SelectMany(x => x.Faces).Select(x => x.Plane).ToList();
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            for (var b = 0; b < 1000; b++)
            {
                Solid.CreateFromIntersectingPlanes(planes, idg);
            }
            stopwatch.Stop();
            Debug.WriteLine(stopwatch.Elapsed);
            stopwatch.Restart();
            for (var b = 0; b < 1000; b++)
            {
                var polys = new List <Polygon>();
                for (var i = 0; i < planes.Count; i++)
                {
                    var poly = new Polygon(planes[i]);
                    for (var j = 0; j < planes.Count; j++)
                    {
                        if (i != j)
                        {
                            poly.Split(planes[j]);
                        }
                    }
                    polys.Add(poly);
                }
                var solid = new Solid(idg.GetNextObjectID());
                foreach (var polygon in polys)
                {
                    var face = new Face(idg.GetNextFaceID())
                    {
                        Plane = polygon.Plane
                    };
                    face.Vertices.AddRange(polygon.Vertices.Select(x => new Vertex(x, face)));
                    face.UpdateBoundingBox();
                    face.AlignTextureToWorld();
                    solid.Faces.Add(face);
                }
                solid.UpdateBoundingBox();
            }
            stopwatch.Stop();
            Debug.WriteLine(stopwatch.Elapsed);
        }