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); }
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()); } }