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