Пример #1
0
        public void Example()
        {
            this.Name = "Elements_ModelPoints";

            // <example>
            // Create some point locations.
            var pts = new List <Vector3>();

            for (var x = 0; x < 25; x++)
            {
                for (var y = 0; y < 25; y++)
                {
                    for (var z = 0; z < 25; z++)
                    {
                        // Add points to the object.
                        pts.Add(new Vector3(x, y, z));
                    }
                }
            }

            // Create a model points object.
            var pink        = new Material("pink", Colors.Pink);
            var modelPoints = new ModelPoints(pts, pink);

            // </example>

            this.Model.AddElement(modelPoints);
        }
Пример #2
0
        public async Task <IActionResult> Post([FromBody] ModelPoints modelPoints)
        {
            try
            {
                this.aIValuationsContext.ModelPoints.Add(modelPoints);
                await this.aIValuationsContext.SaveChangesAsync().ConfigureAwait(false);

                return(this.CreatedAtAction("GetMarkovState", new { id = modelPoints.ID }, modelPoints));
            }
            catch (Exception ex)
            {
                return(this.BadRequest(ex.Message));
            }
        }
Пример #3
0
        public static double ClosestPointDist(Vector3 origin, ModelPoints points)
        {
            double min       = double.MaxValue;
            var    locations = points.Locations;

            foreach (var p in locations)
            {
                var dist = p.DistanceTo(origin);
                if (dist < min)
                {
                    min = dist;
                }
            }

            return(min);
        }
Пример #4
0
        public void RayIntersectsTopography()
        {
            this.Name = "RayIntersectTopo";

            var elevations = new double[25];

            int e = 0;

            for (var x = 0; x < 5; x++)
            {
                for (var y = 0; y < 5; y++)
                {
                    elevations[e] = Math.Sin(((double)x / 5.0) * Math.PI) * 10;
                    e++;
                }
            }
            var topo = new Topography(Vector3.Origin, 4, elevations);

            this.Model.AddElement(topo);

            var modelPoints = new ModelPoints(new List <Vector3>(), new Material("begin", Colors.Blue));

            this.Model.AddElement(modelPoints);
            foreach (var t in topo.Mesh.Triangles)
            {
                var c = Center(t);
                var o = new Vector3(c.X, c.Y);
                modelPoints.Locations.Add(o);

                var ray = new Ray(o, Vector3.ZAxis);

                Vector3 xsect;
                if (ray.Intersects(t, out xsect))
                {
                    try
                    {
                        var l  = new Line(o, xsect);
                        var ml = new ModelCurve(l);
                        this.Model.AddElement(ml);
                    }
                    catch
                    {
                        continue;
                    }
                }
            }
        }
Пример #5
0
        public void ModelPoints()
        {
            this.Name = "ModelPoints";

            var modelPoints = new ModelPoints();

            for (var x = 0; x < 25; x++)
            {
                for (var y = 0; y < 25; y++)
                {
                    for (var z = 0; z < 25; z++)
                    {
                        modelPoints.Locations.Add(new Vector3(x, y, z));
                    }
                }
            }

            this.Model.AddElement(modelPoints);
        }
Пример #6
0
        public void RaysIntersectTopography()
        {
            this.Name = "RayTopographyIntersection";
            var topo = CreateTopoFromMapboxElevations(new Vector3(10000000, 10000000));
            var mp   = new ModelPoints(new List <Vector3>(), new Material("xsect", Colors.Black));

            foreach (var t in topo.Mesh.Triangles)
            {
                var o = t.Vertices[0].Position;
                var c = new[] { t.Vertices[0].Position, t.Vertices[1].Position, t.Vertices[2].Position }.Average();
                var r = new Ray(new Vector3(c.X, c.Y), Vector3.ZAxis);
                if (r.Intersects(t, out Vector3 result))
                {
                    mp.Locations.Add(result);
                }
            }
            this.Model.AddElement(topo);
            if (mp.Locations.Count > 0)
            {
                this.Model.AddElement(mp);
            }
        }
Пример #7
0
        public void BoxFromPoints()
        {
            Name = nameof(BoxFromPoints);
            var points = new List <Vector3>();
            var random = new Random(10);

            for (int i = 0; i < 100; i++)
            {
                points.Add(random.NextVector(new BBox3((4, 4, 4), (9, 9, 9))));
            }
            var modelPoints = new ModelPoints(points);

            Model.AddElement(modelPoints);
            for (int i = 0; i < 10; i++)
            {
                var transform   = new Transform(random.NextVector(), random.NextVector());
                var box         = new Box(points, transform);
                var mat         = random.NextMaterial();
                var modelCurves = box.ToModelCurves(mat);
                Model.AddElements(modelCurves);
            }
        }
Пример #8
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());
            }
        }
Пример #9
0
 public async Task <IActionResult> Put(int id, [FromBody] ModelPoints value)
 {
     return(this.Ok());
 }
        public static List <int> IndecesToConnectWith(Vector3 origin, double threshold, ModelPoints points)
        {
            List <int> connectionIndeces = new List <int>();
            var        locations         = points.Locations;
            int        count             = 0;

            foreach (var p in locations)
            {
                var dist = p.DistanceTo(origin);
                if (dist < threshold && dist > 1.0)
                {
                    connectionIndeces.Add(count);
                }

                count++;
            }

            return(connectionIndeces);
        }