Пример #1
0
        public void BBoxToCurves()
        {
            Name = "BBoxToCurves";
            var star     = Polygon.Star(10, 4, 5);
            var flatbbox = new BBox3(star.Vertices);
            var bbox     = new BBox3(new Vector3(4, 2, 5), new Vector3(10, 8, 14));
            var crvs     = bbox.ToModelCurves();

            Model.AddElements(crvs);
            var flatCrvs = flatbbox.ToModelCurves();

            Model.AddElements(flatCrvs);
        }
Пример #2
0
        public void BBoxesForElements()
        {
            Name = nameof(BBoxesForElements);

            var elements = new List <Element>();

            // mass with weird transform
            elements.Add(new Mass(Polygon.Star(5, 3, 5), 1, null, new Transform(new Vector3(4, 3, 2), new Vector3(1, 1, 1))));

            // element instances
            var contentJson = @"
            {
            ""discriminator"": ""Elements.ContentElement"",
            ""gltfLocation"": ""https://hypar-content-catalogs.s3-us-west-2.amazonaws.com/2290ea5e-98aa-429d-8fab-1f260458bf57/Steelcase+-+Convene+-+Conference+Table+Top+-+Boat+Shape+-+Flat+Profile+-+72D+x+216W.glb"",
            ""Bounding Box"": {
                ""discriminator"": ""Elements.Geometry.BBox3"",
                ""Min"": {
                    ""X"": -2.7432066856384281,
                    ""Y"": -0.91380708560943613,
                    ""Z"": 0.68884799709320077
                },
                ""Max"": {
                    ""X"": 2.7432066856384281,
                    ""Y"": 0.91380701293945321,
                    ""Z"": 0.73660002422332771
                }
            },
            ""Gltf Scale to Meters"": 1.0,
            ""SourceDirection"": {
                ""X"": 0.0,
                ""Y"": 1.0,
                ""Z"": 0.0
            },
            ""Transform"": {
                ""Matrix"": {
                    ""Components"": [
                        1.0,
                        0.0,
                        0.0,
                        0.0,
                        0.0,
                        1.0,
                        0.0,
                        0.0,
                        0.0,
                        0.0,
                        1.0,
                        0.0
                    ]
                }
            },
            ""Material"": {
                ""discriminator"": ""Elements.Material"",
                ""Color"": {
                    ""Red"": 1.0,
                    ""Green"": 1.0,
                    ""Blue"": 1.0,
                    ""Alpha"": 1.0
                },
                ""SpecularFactor"": 0.0,
                ""GlossinessFactor"": 0.0,
                ""Unlit"": false,
                ""DoubleSided"": false,
                ""Id"": ""9babb829-9b96-4e73-97f4-9658d4d6c31c"",
                ""Name"": ""default""
            },
            ""Representation"": null,
            ""IsElementDefinition"": true,
            ""Id"": ""8032b381-13c9-4870-803d-c4127c201b47"",
            ""Name"": ""Steelcase - Convene - Conference Table Top - Boat Shape - Flat Profile - 72D x 216W"",
            ""Elevation from Level"": 6.4392935428259079E-14,
            ""Host"": ""Level : Level 1"",
            ""Offset from Host"": 6.4392935428259079E-14,
            ""Moves With Nearby Elements"": 0,
            ""Opaque"": 1
        }";

            var contentElement = JsonConvert.DeserializeObject <ContentElement>(contentJson);

            elements.Add(contentElement.CreateInstance(new Transform(-6, 0, 0), null));
            elements.Add(contentElement.CreateInstance(new Transform(new Vector3(-8, 0, 0), 45), null));

            // mesh
            var meshElem = ConstructExampleMesh();

            elements.Add(meshElem);

            // model curves
            var polygon = new Circle(4).ToPolygon(10).TransformedPolygon(new Transform(new Vector3(8, 8, 8), new Vector3(1, 0, 2)));

            elements.Add(new ModelCurve(polygon));

            // model points
            var random      = new System.Random();
            var points      = Enumerable.Range(0, 20).Select((i) => new Vector3(random.Next(15, 20), random.Next(15, 20), random.Next(15, 20))).ToList();
            var modelPoints = new ModelPoints(points, BuiltInMaterials.XAxis);

            elements.Add(modelPoints);

            // profile
            var profile   = new Profile(new Circle(7).ToPolygon(10).TransformedPolygon(new Transform(new Vector3(8, 8, 8), new Vector3(1, 0, 2))));
            var xzProfile = new Profile(new Circle(7).ToPolygon(10).TransformedPolygon(new Transform(new Vector3(-8, 8, 8), new Vector3(0, 1, 0))));

            elements.Add(profile);
            elements.Add(xzProfile);
            Model.AddElements(profile.ToModelCurves());
            Model.AddElements(xzProfile.ToModelCurves());

            // non-geometric element
            var invalidBBox = new BBox3(new Material("Red", Colors.Red));

            Assert.False(invalidBBox.IsValid());

            Model.AddElements(elements);
            foreach (var element in elements)
            {
                var bbox = new BBox3(element);
                Model.AddElements(bbox.ToModelCurves());
            }
        }