From 90e22d9f0a994b72d3360c1fbd3c36b55c1c32b5 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Wed, 19 Oct 2022 10:03:43 +0100 Subject: [PATCH 01/44] Initial implementation --- Geometry_Engine/Compute/Rationalise.cs | 192 +++++++++++++++++++++++++ Geometry_Engine/Query/Centroid.cs | 16 +++ Geometry_Engine/Query/GeometryHash.cs | 157 ++++++++++++++++++++ 3 files changed, 365 insertions(+) create mode 100644 Geometry_Engine/Compute/Rationalise.cs create mode 100644 Geometry_Engine/Query/GeometryHash.cs diff --git a/Geometry_Engine/Compute/Rationalise.cs b/Geometry_Engine/Compute/Rationalise.cs new file mode 100644 index 000000000..4bbac3518 --- /dev/null +++ b/Geometry_Engine/Compute/Rationalise.cs @@ -0,0 +1,192 @@ +/* + * This file is part of the Buildings and Habitats object Model (BHoM) + * Copyright (c) 2015 - 2022, the respective contributors. All rights reserved. + * + * Each contributor holds copyright over their respective contributions. + * The project versioning (Git) records all such contribution source information. + * + * + * The BHoM is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3.0 of the License, or + * (at your option) any later version. + * + * The BHoM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this code. If not, see . + */ + +using BH.oM.Geometry; +using BH.oM.Base.Attributes; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System; + +namespace BH.Engine.Geometry +{ + public static partial class Compute + { + /***************************************************/ + /**** Public Methods ****/ + /***************************************************/ + + [Description("Rationalises an ICurve into a Polyline. The number of subdivisions is automatically derived depending on the type.")] + [Input("minSubdivisions", "Minimum numbers of subdivisions (segments) to perform on the input ICurve.")] + [Input("refinement", "(Optional, defaults to 1) When the number of subdivisions is derived for a specific type, it gets multiplied by this factor.")] + public static Polyline IRationalise(this ICurve curve, int minSubdivisions = 3, int refinement = 1) + { + if (curve is Polyline) // no need to rationalise + return curve as Polyline; + + if (curve is Line) // no need to rationalise + return new Polyline() { ControlPoints = (curve as Line).ControlPoints() }; + + return Rationalise(curve as dynamic, refinement, minSubdivisions); + } + + /***************************************************/ + + [Description("Rationalises the Polycurve into a Polyline. Currently limited functionality.")] + public static Polyline Rationalise(this PolyCurve curve, int minSubdivisions = 3, int refinement = 1) + { + if (curve == null) + { + BH.Engine.Base.Compute.RecordError($"Cannot rationalise a null {nameof(PolyCurve)}."); + return null; + } + + EnforceMinimumValues(ref minSubdivisions, ref refinement); + + if (curve.Curves.Count == 0) + return new Polyline(); + + Polyline polyline = new Polyline(); + polyline.ControlPoints.Add(curve.SubParts()[0].IStartPoint()); + + foreach (ICurve c in curve.SubParts()) + { + Line line = c as Line; + if (line != null) + { + polyline.ControlPoints.Add(line.End); + continue; + } + + Polyline rationalised = IRationalise(c, minSubdivisions, refinement); + + List points = rationalised.ControlPoints.Skip(1).ToList(); + + polyline.ControlPoints.AddRange(points); + } + + if (polyline == null || polyline.ControlPoints.Count < 2) + BH.Engine.Base.Compute.RecordError("Rationalisation of curves currently only supports Arcs."); + + return polyline; + } + + /***************************************************/ + + [Description("Rationalises the Arc into a Polyline.")] + public static Polyline Rationalise(this Arc arc, int minSubdivisions = 3, int refinement = 1) + { + EnforceMinimumValues(ref minSubdivisions, ref refinement); + + Polyline polyline = new Polyline(); + + List controlPoints = new List { arc.IStartPoint() }; + + double arcAngle = Math.Round(Math.Abs(Math.Abs(arc.StartAngle - arc.EndAngle)), 4); + + double minRadiusForSubdivision = 0.02; + double minAngleForSubdivision = 0.1; + + minRadiusForSubdivision = minRadiusForSubdivision / refinement; + minAngleForSubdivision = minAngleForSubdivision / refinement; + + double length = arc.Length(); + + if (arc.Radius < minRadiusForSubdivision || arcAngle < minAngleForSubdivision) // a very small arc should not be subdivided. + controlPoints.Add(arc.IEndPoint()); + else + { + // If not, subdivide the arc. + int numSubdivisions = (int)Math.Abs(Math.Ceiling(1.5708 / (arcAngle) * refinement * length / 2) - 1); + + // Scale the number of subdivisions based on the refinement + numSubdivisions = (int)Math.Ceiling((double)(numSubdivisions * refinement)); + + // Check the number of subdivisions is over the minimum acceptable + numSubdivisions = numSubdivisions < minSubdivisions ? minSubdivisions : numSubdivisions; + + List pointParams = Enumerable.Range(0, numSubdivisions).Select(i => (double)((double)i / (double)numSubdivisions)).ToList(); + + controlPoints.AddRange(pointParams.Select(par => arc.IPointAtParameter(par))); + + controlPoints.Add(arc.IEndPoint()); + } + + polyline.ControlPoints = controlPoints; + + return polyline; + } + + /***************************************************/ + + [Description("Rationalises the Circle into a Polyline.")] + public static Polyline Rationalise(this Circle circle, int minSubdivisions = 3, int refinement = 1) + { + EnforceMinimumValues(ref minSubdivisions, ref refinement); + + Polyline polyline = new Polyline(); + + List controlPoints = new List { circle.IStartPoint() }; + + // Subdivide the circle. + // Empyrical formula to extract a reasonable amount of segments + int numSubdvision = (int)(Math.Ceiling(circle.Radius * 10)); + + // Scale the number of subdivisions based on the Options + numSubdvision = (int)Math.Ceiling((double)numSubdvision * refinement); + + // Check the number of subdivisions is over the minimum acceptable + numSubdvision = numSubdvision < minSubdivisions ? minSubdivisions : numSubdvision; + + List pointParams = Enumerable.Range(0, numSubdvision).Select(i => (double)((double)i / (double)numSubdvision)).ToList(); + pointParams.Add(1); + + controlPoints.AddRange(pointParams.Select(par => circle.IPointAtParameter(par))); + + polyline.ControlPoints = controlPoints; + + return polyline; + } + + /***************************************************/ + /**** Private Methods ****/ + /***************************************************/ + + // Fallback + private static Polyline Rationalise(this ICurve curve, int minSubdivisions = 3, int refinement = 1) + { + BH.Engine.Base.Compute.RecordError($"Could not find a method to rationalise the curve {curve.GetType().Name}." + + $"The method {nameof(Rationalise)} currently only supports ICurves composed of Arc and/or Circle and/or straight lines."); + return null; + } + + /***************************************************/ + + private static void EnforceMinimumValues(ref int minSubdivisions, ref int refinement) + { + refinement = refinement < 1 ? 1 : refinement; + minSubdivisions = minSubdivisions < 3 ? 3 : minSubdivisions; + } + } +} + + diff --git a/Geometry_Engine/Query/Centroid.cs b/Geometry_Engine/Query/Centroid.cs index 868935319..613e5389b 100644 --- a/Geometry_Engine/Query/Centroid.cs +++ b/Geometry_Engine/Query/Centroid.cs @@ -34,6 +34,15 @@ namespace BH.Engine.Geometry { public static partial class Query { + [Description("Queries the centroid for the given IGeometry.")] + [Input("surface", "The PlanarSurface to get the centre of area of.")] + [Input("tolerance", "Distance tolerance used in geometry processing, default set to BH.oM.Geometry.Tolerance.Distance.", typeof(Length))] + [Output("centroid", "The Point at the centre of given PlanarSurface.")] + public static Point ICentroid(this IGeometry igeom, double tolerance = Tolerance.Distance) + { + return Centroid(igeom as dynamic, tolerance); + } + /***************************************************/ /**** Public Methods - Surfaces ****/ /***************************************************/ @@ -393,6 +402,13 @@ private static Point CurveListCentroid(this IEnumerable boundaryCurves, } /***************************************************/ + + // Fallback + private static Point Centroid(this object obj, double tolerance = Tolerance.Distance) + { + BH.Engine.Base.Compute.RecordWarning($"Could not compute Centroid for {obj.GetType().Name}."); + return null; + } } } diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs new file mode 100644 index 000000000..530d38ede --- /dev/null +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -0,0 +1,157 @@ +/* + * This file is part of the Buildings and Habitats object Model (BHoM) + * Copyright (c) 2015 - 2022, the respective contributors. All rights reserved. + * + * Each contributor holds copyright over their respective contributions. + * The project versioning (Git) records all such contribution source information. + * + * + * The BHoM is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3.0 of the License, or + * (at your option) any later version. + * + * The BHoM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this code. If not, see . + */ + +using BH.Engine.Base; +using BH.oM.Base; +using BH.oM.Geometry; +using System.Collections.Generic; +using System.Linq; + +namespace BH.Engine.Geometry +{ + public static partial class Query + { + /***************************************************/ + /**** Public Methods ****/ + /***************************************************/ + + public static double[] IGeometryHash(this IBHoMObject bhomObj) + { + IGeometry igeom = bhomObj.IGeometry(); + + return GeometryHash(igeom as dynamic); + } + + /***************************************************/ + /**** Private Methods ****/ + /***************************************************/ + + private static double[] GeometryHash(this ICurve curve) + { + Polyline polyLine = curve.IRationalise(); + + return polyLine.ControlPoints.SelectMany(p => p.GeometryHash()).ToArray(); + } + + /***************************************************/ + + private static double[] GeometryHash(this IEnumerable curves) + { + return curves.SelectMany(c => c.GeometryHash()).ToArray(); + } + + /***************************************************/ + + private static double[] GeometryHash(this Point obj, double typeTranslationFactor = 0) + { + return obj.ToDoubleArray(typeTranslationFactor); + } + + /***************************************************/ + + private static double[] GeometryHash(this Plane obj, double typeTranslationFactor = 3) + { + return obj.Origin.ToDoubleArray(typeTranslationFactor); + } + + /***************************************************/ + + private static double[] GeometryHash(this ISurface obj, double typeTranslationFactor = 3) + { + return GeometryHash(obj as dynamic, typeTranslationFactor); + } + + /***************************************************/ + + private static double[] GeometryHash(this PlanarSurface obj, double typeTranslationFactor = 3) + { + return obj.ExternalBoundary.GeometryHash().Concat(obj.InternalBoundaries.SelectMany(ib => ib.GeometryHash())).ToArray(); + } + + /***************************************************/ + + private static double[] GeometryHash(this Extrusion obj, double typeTranslationFactor = 3) + { + return obj.Curve.GeometryHash(); + } + + /***************************************************/ + + private static double[] GeometryHash(this Loft obj, double typeTranslationFactor = 3) + { + return obj.Curves.GeometryHash(); + } + + /***************************************************/ + + private static double[] GeometryHash(this NurbsSurface obj, double typeTranslationFactor = 3) + { + return obj.ControlPoints.ToDoubleArray(typeTranslationFactor); + } + + /***************************************************/ + + private static double[] GeometryHash(this Pipe obj, double typeTranslationFactor = 3) + { + return obj.Centreline.GeometryHash(); + } + + /***************************************************/ + + private static double[] GeometryHash(this PolySurface obj, double typeTranslationFactor = 3) + { + return obj.Surfaces.SelectMany(s => s.GeometryHash()).ToArray(); + } + + /***************************************************/ + + private static double[] GeometryHash(this SurfaceTrim obj, double typeTranslationFactor = 3) + { + return obj.Curve3d.GeometryHash().Concat(obj.Curve2d.GeometryHash()).ToArray(); + } + + /***************************************************/ + + private static double[] GeometryHash(this object obj) + { + BH.Engine.Base.Compute.RecordError($"Could not find a {nameof(GeometryHash)} method for type {obj.GetType().FullName}."); + return new double[] { }; + } + + /***************************************************/ + + private static double[] ToDoubleArray(this Point p, double typeTranslationFactor) + { + return new double[] { p.X + typeTranslationFactor, p.Y + typeTranslationFactor, p.Z + typeTranslationFactor }; + } + + /***************************************************/ + + private static double[] ToDoubleArray(this IEnumerable points, double typeTranslationFactor) + { + return points.SelectMany(p => p.ToDoubleArray(typeTranslationFactor)).ToArray(); + } + } +} + + + From a082ead6d242289db4842c8bec1bfb2285c0586d Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Wed, 19 Oct 2022 16:35:54 +0100 Subject: [PATCH 02/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 102 +++++++++++++++++++++++--- 1 file changed, 90 insertions(+), 12 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 530d38ede..c05ef55c8 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -45,36 +45,72 @@ public static double[] IGeometryHash(this IBHoMObject bhomObj) /**** Private Methods ****/ /***************************************************/ + /***************************************************/ + /**** Curves ****/ + /***************************************************/ + private static double[] GeometryHash(this ICurve curve) { - Polyline polyLine = curve.IRationalise(); + IEnumerable subParts = curve.ISubParts(); - return polyLine.ControlPoints.SelectMany(p => p.GeometryHash()).ToArray(); + return subParts.GeometryHash(); } /***************************************************/ private static double[] GeometryHash(this IEnumerable curves) { - return curves.SelectMany(c => c.GeometryHash()).ToArray(); + return curves.SelectMany(c => (double[])GeometryHash(c as dynamic)).ToArray(); } /***************************************************/ - private static double[] GeometryHash(this Point obj, double typeTranslationFactor = 0) + private static double[] GeometryHash(this Arc curve, double typeTranslationFactor = 1) { - return obj.ToDoubleArray(typeTranslationFactor); + return curve.StartPoint().ToDoubleArray(typeTranslationFactor) + .Concat(curve.EndPoint().ToDoubleArray(typeTranslationFactor)) + .Concat(curve.PointAtParameter(0.5).ToDoubleArray(typeTranslationFactor)) + .ToArray(); } /***************************************************/ - private static double[] GeometryHash(this Plane obj, double typeTranslationFactor = 3) + private static double[] GeometryHash(this Circle curve, double typeTranslationFactor = 1) { - return obj.Origin.ToDoubleArray(typeTranslationFactor); + return curve.Centre.ToDoubleArray(typeTranslationFactor + curve.Radius); + } + + /***************************************************/ + + private static double[] GeometryHash(this Ellipse curve, double typeTranslationFactor = 1) + { + return curve.StartPoint().ToDoubleArray(typeTranslationFactor) + .Concat(curve.PointAtParameter(0.33).ToDoubleArray(typeTranslationFactor)) + .Concat(curve.PointAtParameter(0.66).ToDoubleArray(typeTranslationFactor)) + .ToArray(); + } + + /***************************************************/ + + private static double[] GeometryHash(this Line curve, double typeTranslationFactor = 1) + { + return curve.StartPoint().ToDoubleArray(typeTranslationFactor) + .Concat(curve.EndPoint().ToDoubleArray(typeTranslationFactor)) + .ToArray(); } /***************************************************/ + private static double[] GeometryHash(this NurbsCurve curve, double typeTranslationFactor = 1) + { + double[] translationArray = curve.Weights.Zip(curve.Knots, (w, n) => w * n).ToArray(); + return curve.ControlPoints.ToDoubleArray(typeTranslationFactor, translationArray); + } + + /***************************************************/ + /**** Surfaces ****/ + /***************************************************/ + private static double[] GeometryHash(this ISurface obj, double typeTranslationFactor = 3) { return GeometryHash(obj as dynamic, typeTranslationFactor); @@ -112,7 +148,7 @@ private static double[] GeometryHash(this NurbsSurface obj, double typeTranslati private static double[] GeometryHash(this Pipe obj, double typeTranslationFactor = 3) { - return obj.Centreline.GeometryHash(); + return obj.Centreline.GeometryHash(); // radius } /***************************************************/ @@ -129,6 +165,43 @@ private static double[] GeometryHash(this SurfaceTrim obj, double typeTranslatio return obj.Curve3d.GeometryHash().Concat(obj.Curve2d.GeometryHash()).ToArray(); } + + /***************************************************/ + /**** Mesh ****/ + /***************************************************/ + + private static double[] GeometryHash(this Mesh obj, double typeTranslationFactor = 3) + { + // TODO faces? + return obj.Vertices.SelectMany(v => v.ToDoubleArray(typeTranslationFactor)).ToArray(); + } + + /***************************************************/ + + private static double[] GeometryHash(this Mesh3D obj, double typeTranslationFactor = 3) + { + // TODO faces? + return obj.Vertices.SelectMany(v => v.ToDoubleArray(typeTranslationFactor)).ToArray(); + } + + /***************************************************/ + /**** Vector ****/ + /***************************************************/ + + private static double[] GeometryHash(this Point obj, double typeTranslationFactor = 0) + { + return obj.ToDoubleArray(typeTranslationFactor); + } + + /***************************************************/ + + private static double[] GeometryHash(this Plane obj, double typeTranslationFactor = 3) + { + return obj.Origin.ToDoubleArray(typeTranslationFactor); + } + + /***************************************************/ + /**** Other methods ****/ /***************************************************/ private static double[] GeometryHash(this object obj) @@ -139,16 +212,21 @@ private static double[] GeometryHash(this object obj) /***************************************************/ - private static double[] ToDoubleArray(this Point p, double typeTranslationFactor) + private static double[] ToDoubleArray(this Point p, double typeTranslationFactor, double[] translationArray = null) { - return new double[] { p.X + typeTranslationFactor, p.Y + typeTranslationFactor, p.Z + typeTranslationFactor }; + return new double[] + { + p.X + typeTranslationFactor + translationArray?.ElementAtOrDefault(0) ?? 0, + p.Y + typeTranslationFactor + translationArray?.ElementAtOrDefault(1) ?? 0, + p.Z + typeTranslationFactor + translationArray?.ElementAtOrDefault(2) ?? 0 + }; } /***************************************************/ - private static double[] ToDoubleArray(this IEnumerable points, double typeTranslationFactor) + private static double[] ToDoubleArray(this IEnumerable points, double typeTranslationFactor, double[] translationArray = null) { - return points.SelectMany(p => p.ToDoubleArray(typeTranslationFactor)).ToArray(); + return points.SelectMany(p => p.ToDoubleArray(typeTranslationFactor, translationArray)).ToArray(); } } } From 1102abec93f612266c234ee8df94176583eb5896 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Tue, 25 Oct 2022 14:41:17 +0100 Subject: [PATCH 03/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index c05ef55c8..5fa63ee85 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -77,7 +77,10 @@ private static double[] GeometryHash(this Arc curve, double typeTranslationFacto private static double[] GeometryHash(this Circle curve, double typeTranslationFactor = 1) { - return curve.Centre.ToDoubleArray(typeTranslationFactor + curve.Radius); + return curve.StartPoint().ToDoubleArray(typeTranslationFactor) + .Concat(curve.PointAtParameter(0.33).ToDoubleArray(typeTranslationFactor)) + .Concat(curve.PointAtParameter(0.66).ToDoubleArray(typeTranslationFactor)) + .ToArray(); } /***************************************************/ @@ -104,7 +107,23 @@ private static double[] GeometryHash(this Line curve, double typeTranslationFact private static double[] GeometryHash(this NurbsCurve curve, double typeTranslationFactor = 1) { double[] translationArray = curve.Weights.Zip(curve.Knots, (w, n) => w * n).ToArray(); - return curve.ControlPoints.ToDoubleArray(typeTranslationFactor, translationArray); + int curveDegree = curve.Degree(); + + List pointWeights = curve.ControlPoints.Zip(curve.Weights, (p, w) => p * w).ToList(); + List concatenated = new List(); + for (int i = 0; i < pointWeights.Count(); i++) + { + double avg = curve.Knots.GetRange(i, curveDegree).Average(); + double[] doubles = pointWeights[i].GeometryHash(avg + typeTranslationFactor); + concatenated.AddRange(doubles); + } + + return concatenated.ToArray(); + + // Simpler: + //return curve.Knots.Take(pointWeights.Count()) + // .Zip(curve.ControlPoints, (k, p) => new double[]{ p.X + k, p.Y + k, p.Z + k }) + // .SelectMany(arr => arr).ToArray(); } /***************************************************/ @@ -127,7 +146,7 @@ private static double[] GeometryHash(this PlanarSurface obj, double typeTranslat private static double[] GeometryHash(this Extrusion obj, double typeTranslationFactor = 3) { - return obj.Curve.GeometryHash(); + return obj.Curve.ITranslate(obj.Direction).GeometryHash().Concat(obj.Curve.GeometryHash()).ToArray(); } /***************************************************/ From 8b774aa8241658ab06c367b7fe94d431bacc8c93 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Tue, 25 Oct 2022 14:43:07 +0100 Subject: [PATCH 04/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 5fa63ee85..b10079c8e 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -216,7 +216,7 @@ private static double[] GeometryHash(this Point obj, double typeTranslationFacto private static double[] GeometryHash(this Plane obj, double typeTranslationFactor = 3) { - return obj.Origin.ToDoubleArray(typeTranslationFactor); + return obj.Origin.Translate(obj.Normal).ToDoubleArray(typeTranslationFactor); } /***************************************************/ From 3d9bd06c690522b776635ecb59c7ae2f988c3780 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Wed, 26 Oct 2022 09:47:08 +0100 Subject: [PATCH 05/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index b10079c8e..d3213d179 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -25,6 +25,7 @@ using BH.oM.Geometry; using System.Collections.Generic; using System.Linq; +using System.Security.Cryptography.Xml; namespace BH.Engine.Geometry { @@ -192,7 +193,22 @@ private static double[] GeometryHash(this SurfaceTrim obj, double typeTranslatio private static double[] GeometryHash(this Mesh obj, double typeTranslationFactor = 3) { // TODO faces? - return obj.Vertices.SelectMany(v => v.ToDoubleArray(typeTranslationFactor)).ToArray(); + Dictionary asd = obj.Faces.SelectMany(f => new List { f.A, f.B, f.C, f.D }) + .GroupBy(i => i) + .ToDictionary(g => g.Key, g => g.Count()); + + List all = new List(); + + for (int i = 0; i < obj.Vertices.Count; i++) + { + int pointTranslationFactor; + if (!asd.TryGetValue(i, out pointTranslationFactor)) + pointTranslationFactor = 0; + + all.AddRange(obj.Vertices[i].ToDoubleArray(pointTranslationFactor + typeTranslationFactor)); + } + + return all.ToArray(); } /***************************************************/ @@ -233,10 +249,10 @@ private static double[] GeometryHash(this object obj) private static double[] ToDoubleArray(this Point p, double typeTranslationFactor, double[] translationArray = null) { - return new double[] - { - p.X + typeTranslationFactor + translationArray?.ElementAtOrDefault(0) ?? 0, - p.Y + typeTranslationFactor + translationArray?.ElementAtOrDefault(1) ?? 0, + return new double[] + { + p.X + typeTranslationFactor + translationArray?.ElementAtOrDefault(0) ?? 0, + p.Y + typeTranslationFactor + translationArray?.ElementAtOrDefault(1) ?? 0, p.Z + typeTranslationFactor + translationArray?.ElementAtOrDefault(2) ?? 0 }; } From b817c2e2eb5cf4355eba60b25e08f22df1086771 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Wed, 26 Oct 2022 09:51:03 +0100 Subject: [PATCH 06/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 30 ++++++++++++++++++++------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index d3213d179..b565c24b3 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -192,31 +192,45 @@ private static double[] GeometryHash(this SurfaceTrim obj, double typeTranslatio private static double[] GeometryHash(this Mesh obj, double typeTranslationFactor = 3) { - // TODO faces? - Dictionary asd = obj.Faces.SelectMany(f => new List { f.A, f.B, f.C, f.D }) + Dictionary facesPerPointCount = obj.Faces.SelectMany(f => new List { f.A, f.B, f.C, f.D }) .GroupBy(i => i) .ToDictionary(g => g.Key, g => g.Count()); - List all = new List(); + List result = new List(); for (int i = 0; i < obj.Vertices.Count; i++) { int pointTranslationFactor; - if (!asd.TryGetValue(i, out pointTranslationFactor)) + if (!facesPerPointCount.TryGetValue(i, out pointTranslationFactor)) pointTranslationFactor = 0; - all.AddRange(obj.Vertices[i].ToDoubleArray(pointTranslationFactor + typeTranslationFactor)); + result.AddRange(obj.Vertices[i].ToDoubleArray(pointTranslationFactor + typeTranslationFactor)); } - return all.ToArray(); + return result.ToArray(); } /***************************************************/ private static double[] GeometryHash(this Mesh3D obj, double typeTranslationFactor = 3) { - // TODO faces? - return obj.Vertices.SelectMany(v => v.ToDoubleArray(typeTranslationFactor)).ToArray(); + // TODO: CellRelation? + Dictionary facesPerPointCount = obj.Faces.SelectMany(f => new List { f.A, f.B, f.C, f.D }) + .GroupBy(i => i) + .ToDictionary(g => g.Key, g => g.Count()); + + List result = new List(); + + for (int i = 0; i < obj.Vertices.Count; i++) + { + int pointTranslationFactor; + if (!facesPerPointCount.TryGetValue(i, out pointTranslationFactor)) + pointTranslationFactor = 0; + + result.AddRange(obj.Vertices[i].ToDoubleArray(pointTranslationFactor + typeTranslationFactor)); + } + + return result.ToArray(); } /***************************************************/ From ca1d296d127a0e22eec84ef70f49dc64cd58ec04 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Wed, 26 Oct 2022 11:51:19 +0100 Subject: [PATCH 07/44] Adding last methods --- Geometry_Engine/Compute/Rationalise.cs | 192 ------------------------- Geometry_Engine/Query/Centroid.cs | 16 --- Geometry_Engine/Query/FaceIndices.cs | 56 ++++++++ Geometry_Engine/Query/GeometryHash.cs | 182 +++++++++++++++-------- 4 files changed, 181 insertions(+), 265 deletions(-) delete mode 100644 Geometry_Engine/Compute/Rationalise.cs create mode 100644 Geometry_Engine/Query/FaceIndices.cs diff --git a/Geometry_Engine/Compute/Rationalise.cs b/Geometry_Engine/Compute/Rationalise.cs deleted file mode 100644 index 4bbac3518..000000000 --- a/Geometry_Engine/Compute/Rationalise.cs +++ /dev/null @@ -1,192 +0,0 @@ -/* - * This file is part of the Buildings and Habitats object Model (BHoM) - * Copyright (c) 2015 - 2022, the respective contributors. All rights reserved. - * - * Each contributor holds copyright over their respective contributions. - * The project versioning (Git) records all such contribution source information. - * - * - * The BHoM is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3.0 of the License, or - * (at your option) any later version. - * - * The BHoM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this code. If not, see . - */ - -using BH.oM.Geometry; -using BH.oM.Base.Attributes; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System; - -namespace BH.Engine.Geometry -{ - public static partial class Compute - { - /***************************************************/ - /**** Public Methods ****/ - /***************************************************/ - - [Description("Rationalises an ICurve into a Polyline. The number of subdivisions is automatically derived depending on the type.")] - [Input("minSubdivisions", "Minimum numbers of subdivisions (segments) to perform on the input ICurve.")] - [Input("refinement", "(Optional, defaults to 1) When the number of subdivisions is derived for a specific type, it gets multiplied by this factor.")] - public static Polyline IRationalise(this ICurve curve, int minSubdivisions = 3, int refinement = 1) - { - if (curve is Polyline) // no need to rationalise - return curve as Polyline; - - if (curve is Line) // no need to rationalise - return new Polyline() { ControlPoints = (curve as Line).ControlPoints() }; - - return Rationalise(curve as dynamic, refinement, minSubdivisions); - } - - /***************************************************/ - - [Description("Rationalises the Polycurve into a Polyline. Currently limited functionality.")] - public static Polyline Rationalise(this PolyCurve curve, int minSubdivisions = 3, int refinement = 1) - { - if (curve == null) - { - BH.Engine.Base.Compute.RecordError($"Cannot rationalise a null {nameof(PolyCurve)}."); - return null; - } - - EnforceMinimumValues(ref minSubdivisions, ref refinement); - - if (curve.Curves.Count == 0) - return new Polyline(); - - Polyline polyline = new Polyline(); - polyline.ControlPoints.Add(curve.SubParts()[0].IStartPoint()); - - foreach (ICurve c in curve.SubParts()) - { - Line line = c as Line; - if (line != null) - { - polyline.ControlPoints.Add(line.End); - continue; - } - - Polyline rationalised = IRationalise(c, minSubdivisions, refinement); - - List points = rationalised.ControlPoints.Skip(1).ToList(); - - polyline.ControlPoints.AddRange(points); - } - - if (polyline == null || polyline.ControlPoints.Count < 2) - BH.Engine.Base.Compute.RecordError("Rationalisation of curves currently only supports Arcs."); - - return polyline; - } - - /***************************************************/ - - [Description("Rationalises the Arc into a Polyline.")] - public static Polyline Rationalise(this Arc arc, int minSubdivisions = 3, int refinement = 1) - { - EnforceMinimumValues(ref minSubdivisions, ref refinement); - - Polyline polyline = new Polyline(); - - List controlPoints = new List { arc.IStartPoint() }; - - double arcAngle = Math.Round(Math.Abs(Math.Abs(arc.StartAngle - arc.EndAngle)), 4); - - double minRadiusForSubdivision = 0.02; - double minAngleForSubdivision = 0.1; - - minRadiusForSubdivision = minRadiusForSubdivision / refinement; - minAngleForSubdivision = minAngleForSubdivision / refinement; - - double length = arc.Length(); - - if (arc.Radius < minRadiusForSubdivision || arcAngle < minAngleForSubdivision) // a very small arc should not be subdivided. - controlPoints.Add(arc.IEndPoint()); - else - { - // If not, subdivide the arc. - int numSubdivisions = (int)Math.Abs(Math.Ceiling(1.5708 / (arcAngle) * refinement * length / 2) - 1); - - // Scale the number of subdivisions based on the refinement - numSubdivisions = (int)Math.Ceiling((double)(numSubdivisions * refinement)); - - // Check the number of subdivisions is over the minimum acceptable - numSubdivisions = numSubdivisions < minSubdivisions ? minSubdivisions : numSubdivisions; - - List pointParams = Enumerable.Range(0, numSubdivisions).Select(i => (double)((double)i / (double)numSubdivisions)).ToList(); - - controlPoints.AddRange(pointParams.Select(par => arc.IPointAtParameter(par))); - - controlPoints.Add(arc.IEndPoint()); - } - - polyline.ControlPoints = controlPoints; - - return polyline; - } - - /***************************************************/ - - [Description("Rationalises the Circle into a Polyline.")] - public static Polyline Rationalise(this Circle circle, int minSubdivisions = 3, int refinement = 1) - { - EnforceMinimumValues(ref minSubdivisions, ref refinement); - - Polyline polyline = new Polyline(); - - List controlPoints = new List { circle.IStartPoint() }; - - // Subdivide the circle. - // Empyrical formula to extract a reasonable amount of segments - int numSubdvision = (int)(Math.Ceiling(circle.Radius * 10)); - - // Scale the number of subdivisions based on the Options - numSubdvision = (int)Math.Ceiling((double)numSubdvision * refinement); - - // Check the number of subdivisions is over the minimum acceptable - numSubdvision = numSubdvision < minSubdivisions ? minSubdivisions : numSubdvision; - - List pointParams = Enumerable.Range(0, numSubdvision).Select(i => (double)((double)i / (double)numSubdvision)).ToList(); - pointParams.Add(1); - - controlPoints.AddRange(pointParams.Select(par => circle.IPointAtParameter(par))); - - polyline.ControlPoints = controlPoints; - - return polyline; - } - - /***************************************************/ - /**** Private Methods ****/ - /***************************************************/ - - // Fallback - private static Polyline Rationalise(this ICurve curve, int minSubdivisions = 3, int refinement = 1) - { - BH.Engine.Base.Compute.RecordError($"Could not find a method to rationalise the curve {curve.GetType().Name}." + - $"The method {nameof(Rationalise)} currently only supports ICurves composed of Arc and/or Circle and/or straight lines."); - return null; - } - - /***************************************************/ - - private static void EnforceMinimumValues(ref int minSubdivisions, ref int refinement) - { - refinement = refinement < 1 ? 1 : refinement; - minSubdivisions = minSubdivisions < 3 ? 3 : minSubdivisions; - } - } -} - - diff --git a/Geometry_Engine/Query/Centroid.cs b/Geometry_Engine/Query/Centroid.cs index 613e5389b..868935319 100644 --- a/Geometry_Engine/Query/Centroid.cs +++ b/Geometry_Engine/Query/Centroid.cs @@ -34,15 +34,6 @@ namespace BH.Engine.Geometry { public static partial class Query { - [Description("Queries the centroid for the given IGeometry.")] - [Input("surface", "The PlanarSurface to get the centre of area of.")] - [Input("tolerance", "Distance tolerance used in geometry processing, default set to BH.oM.Geometry.Tolerance.Distance.", typeof(Length))] - [Output("centroid", "The Point at the centre of given PlanarSurface.")] - public static Point ICentroid(this IGeometry igeom, double tolerance = Tolerance.Distance) - { - return Centroid(igeom as dynamic, tolerance); - } - /***************************************************/ /**** Public Methods - Surfaces ****/ /***************************************************/ @@ -402,13 +393,6 @@ private static Point CurveListCentroid(this IEnumerable boundaryCurves, } /***************************************************/ - - // Fallback - private static Point Centroid(this object obj, double tolerance = Tolerance.Distance) - { - BH.Engine.Base.Compute.RecordWarning($"Could not compute Centroid for {obj.GetType().Name}."); - return null; - } } } diff --git a/Geometry_Engine/Query/FaceIndices.cs b/Geometry_Engine/Query/FaceIndices.cs new file mode 100644 index 000000000..521420ec5 --- /dev/null +++ b/Geometry_Engine/Query/FaceIndices.cs @@ -0,0 +1,56 @@ +/* + * This file is part of the Buildings and Habitats object Model (BHoM) + * Copyright (c) 2015 - 2022, the respective contributors. All rights reserved. + * + * Each contributor holds copyright over their respective contributions. + * The project versioning (Git) records all such contribution source information. + * + * + * The BHoM is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3.0 of the License, or + * (at your option) any later version. + * + * The BHoM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this code. If not, see . + */ + +using BH.oM.Geometry; +using System; +using System.ComponentModel; + +using BH.oM.Base.Attributes; +using System.Collections.Generic; + +namespace BH.Engine.Geometry +{ + public static partial class Query + { + /***************************************************/ + /**** Public Methods ****/ + /***************************************************/ + + [Description("Return the list of face indeces for an input face. The last face index (D) is not added if it's equal to -1.")] + [Input("meshFace", "Mesh face to query the indices for.")] + [Output("indices", "List of indices.")] + public static List FaceIndices(this Face meshFace) + { + List result = new List() { meshFace.A, meshFace.B, meshFace.C }; + + if (meshFace.D != -1) + result.Add(meshFace.D); + + return result; + } + + /***************************************************/ + + } +} + + diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index b565c24b3..51fa293e8 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -24,6 +24,7 @@ using BH.oM.Base; using BH.oM.Geometry; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Security.Cryptography.Xml; @@ -35,11 +36,12 @@ public static partial class Query /**** Public Methods ****/ /***************************************************/ + [Description("All geometry hash methods are implemented to be translational.")] public static double[] IGeometryHash(this IBHoMObject bhomObj) { IGeometry igeom = bhomObj.IGeometry(); - return GeometryHash(igeom as dynamic); + return GeometryHash(igeom as dynamic, 0); } /***************************************************/ @@ -50,79 +52,93 @@ public static double[] IGeometryHash(this IBHoMObject bhomObj) /**** Curves ****/ /***************************************************/ - private static double[] GeometryHash(this ICurve curve) + private static double[] GeometryHash(this ICurve curve, double translationFactor) { IEnumerable subParts = curve.ISubParts(); - return subParts.GeometryHash(); + return subParts.GeometryHash(translationFactor); } /***************************************************/ - private static double[] GeometryHash(this IEnumerable curves) + private static double[] GeometryHash(this IEnumerable curves, double translationFactor) { - return curves.SelectMany(c => (double[])GeometryHash(c as dynamic)).ToArray(); + translationFactor += 1; + + return curves.SelectMany(c => (double[])GeometryHash(c as dynamic, translationFactor)).ToArray(); } /***************************************************/ - private static double[] GeometryHash(this Arc curve, double typeTranslationFactor = 1) + private static double[] GeometryHash(this Arc curve, double translationFactor) { - return curve.StartPoint().ToDoubleArray(typeTranslationFactor) - .Concat(curve.EndPoint().ToDoubleArray(typeTranslationFactor)) - .Concat(curve.PointAtParameter(0.5).ToDoubleArray(typeTranslationFactor)) + translationFactor += 1; + + return curve.StartPoint().ToDoubleArray(translationFactor) + .Concat(curve.EndPoint().ToDoubleArray(translationFactor)) + .Concat(curve.PointAtParameter(0.5).ToDoubleArray(translationFactor)) .ToArray(); } /***************************************************/ - private static double[] GeometryHash(this Circle curve, double typeTranslationFactor = 1) + private static double[] GeometryHash(this Circle curve, double translationFactor) { - return curve.StartPoint().ToDoubleArray(typeTranslationFactor) - .Concat(curve.PointAtParameter(0.33).ToDoubleArray(typeTranslationFactor)) - .Concat(curve.PointAtParameter(0.66).ToDoubleArray(typeTranslationFactor)) + translationFactor += 1; + + return curve.StartPoint().ToDoubleArray(translationFactor) + .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)) + .Concat(curve.PointAtParameter(0.66).ToDoubleArray(translationFactor)) .ToArray(); } /***************************************************/ - private static double[] GeometryHash(this Ellipse curve, double typeTranslationFactor = 1) + private static double[] GeometryHash(this Ellipse curve, double translationFactor) { - return curve.StartPoint().ToDoubleArray(typeTranslationFactor) - .Concat(curve.PointAtParameter(0.33).ToDoubleArray(typeTranslationFactor)) - .Concat(curve.PointAtParameter(0.66).ToDoubleArray(typeTranslationFactor)) + translationFactor += 1; + + return curve.StartPoint().ToDoubleArray(translationFactor) + .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)) + .Concat(curve.PointAtParameter(0.66).ToDoubleArray(translationFactor)) .ToArray(); } /***************************************************/ - private static double[] GeometryHash(this Line curve, double typeTranslationFactor = 1) + [Description("")] + private static double[] GeometryHash(this Line curve, double translationFactor) { - return curve.StartPoint().ToDoubleArray(typeTranslationFactor) - .Concat(curve.EndPoint().ToDoubleArray(typeTranslationFactor)) + translationFactor += 1; + + return curve.StartPoint().ToDoubleArray(translationFactor) + .Concat(curve.EndPoint().ToDoubleArray(translationFactor)) .ToArray(); } /***************************************************/ - private static double[] GeometryHash(this NurbsCurve curve, double typeTranslationFactor = 1) + [Description("Moving control points by a translation factor composed by the weights " + + "and a subarray of the knot vector. " + + "The subarray is made by picking as many elements from the knot vector as the curve degree value.")] + private static double[] GeometryHash(this NurbsCurve curve, double translationFactor) { - double[] translationArray = curve.Weights.Zip(curve.Knots, (w, n) => w * n).ToArray(); + translationFactor += 1; + int curveDegree = curve.Degree(); - List pointWeights = curve.ControlPoints.Zip(curve.Weights, (p, w) => p * w).ToList(); List concatenated = new List(); - for (int i = 0; i < pointWeights.Count(); i++) + for (int i = 0; i < curve.ControlPoints.Count(); i++) { - double avg = curve.Knots.GetRange(i, curveDegree).Average(); - double[] doubles = pointWeights[i].GeometryHash(avg + typeTranslationFactor); + double sum = curve.Knots.GetRange(i, curveDegree).Sum(); + double[] doubles = curve.ControlPoints[i].GeometryHash(sum + curve.Weights[i] + translationFactor); concatenated.AddRange(doubles); } return concatenated.ToArray(); - // Simpler: - //return curve.Knots.Take(pointWeights.Count()) + // Simpler & faster but potentially less reliable: + // return curve.Knots.Take(pointWeights.Count()) // .Zip(curve.ControlPoints, (k, p) => new double[]{ p.X + k, p.Y + k, p.Z + k }) // .SelectMany(arr => arr).ToArray(); } @@ -131,58 +147,95 @@ private static double[] GeometryHash(this NurbsCurve curve, double typeTranslati /**** Surfaces ****/ /***************************************************/ - private static double[] GeometryHash(this ISurface obj, double typeTranslationFactor = 3) + private static double[] GeometryHash(this ISurface obj, double translationFactor) { - return GeometryHash(obj as dynamic, typeTranslationFactor); + translationFactor += 1; + + return GeometryHash(obj as dynamic, translationFactor); } /***************************************************/ - private static double[] GeometryHash(this PlanarSurface obj, double typeTranslationFactor = 3) + private static double[] GeometryHash(this PlanarSurface obj, double translationFactor) { - return obj.ExternalBoundary.GeometryHash().Concat(obj.InternalBoundaries.SelectMany(ib => ib.GeometryHash())).ToArray(); + translationFactor += 1; + + return obj.ExternalBoundary.GeometryHash(translationFactor) + .Concat(obj.InternalBoundaries.SelectMany(ib => ib.GeometryHash(translationFactor))).ToArray(); } /***************************************************/ - private static double[] GeometryHash(this Extrusion obj, double typeTranslationFactor = 3) + private static double[] GeometryHash(this Extrusion obj, double translationFactor) { - return obj.Curve.ITranslate(obj.Direction).GeometryHash().Concat(obj.Curve.GeometryHash()).ToArray(); + translationFactor += 1; + + return obj.Curve.ITranslate(obj.Direction).GeometryHash(translationFactor) + .Concat(obj.Curve.GeometryHash(translationFactor)).ToArray(); } /***************************************************/ - private static double[] GeometryHash(this Loft obj, double typeTranslationFactor = 3) + private static double[] GeometryHash(this Loft obj, double translationFactor) { - return obj.Curves.GeometryHash(); + translationFactor += 1; + + return obj.Curves.GeometryHash(translationFactor); } /***************************************************/ - private static double[] GeometryHash(this NurbsSurface obj, double typeTranslationFactor = 3) + [Description("Moving control points by a translation factor composed by the weights " + + "and a subarray of the knot vector. " + + "The subarray is made by picking as many elements from the knot vector as the curve degree value.")] + private static double[] GeometryHash(this NurbsSurface obj, double translationFactor) { - return obj.ControlPoints.ToDoubleArray(typeTranslationFactor); + translationFactor += 1; + + List concatenated = new List(); + for (int i = 0; i < obj.ControlPoints.Count(); i++) + { + double UKnotsSum = obj.UKnots.en.GetRange(i, obj.UDegree).Sum(); + double VKnotsSum = obj.VKnots.ToList().GetRange(i, obj.VDegree).Sum(); + + double[] doubles = obj.ControlPoints[i].GeometryHash(UKnotsSum + VKnotsSum + obj.Weights[i] + translationFactor); + concatenated.AddRange(doubles); + } + + return obj.ControlPoints.ToDoubleArray(translationFactor); } /***************************************************/ - private static double[] GeometryHash(this Pipe obj, double typeTranslationFactor = 3) + private static double[] GeometryHash(this Pipe obj, double translationFactor) { - return obj.Centreline.GeometryHash(); // radius + translationFactor += 1; + + double[] result = obj.Centreline.GeometryHash(translationFactor + obj.Radius); + + if (obj.Capped) + result.Concat(obj.Centreline.StartPoint().GeometryHash(translationFactor + obj.Radius)); + + return result; } /***************************************************/ - private static double[] GeometryHash(this PolySurface obj, double typeTranslationFactor = 3) + private static double[] GeometryHash(this PolySurface obj, double translationFactor) { - return obj.Surfaces.SelectMany(s => s.GeometryHash()).ToArray(); + translationFactor += 1; + + return obj.Surfaces.SelectMany(s => s.GeometryHash(translationFactor)).ToArray(); } /***************************************************/ - private static double[] GeometryHash(this SurfaceTrim obj, double typeTranslationFactor = 3) + private static double[] GeometryHash(this SurfaceTrim obj, double translationFactor) { - return obj.Curve3d.GeometryHash().Concat(obj.Curve2d.GeometryHash()).ToArray(); + translationFactor += 1; + + return obj.Curve3d.GeometryHash(translationFactor) + .Concat(obj.Curve2d.GeometryHash(translationFactor)).ToArray(); } @@ -190,21 +243,34 @@ private static double[] GeometryHash(this SurfaceTrim obj, double typeTranslatio /**** Mesh ****/ /***************************************************/ - private static double[] GeometryHash(this Mesh obj, double typeTranslationFactor = 3) + [Description("Get the number of faces that are attached to each control point, " + + "and use that count as a translation factor for control points.")] + private static double[] GeometryHash(this Mesh obj, double translationFactor) { - Dictionary facesPerPointCount = obj.Faces.SelectMany(f => new List { f.A, f.B, f.C, f.D }) - .GroupBy(i => i) - .ToDictionary(g => g.Key, g => g.Count()); + translationFactor += 1; + + var dic = new Dictionary(); + + for (int i = 0; i < obj.Faces.Count; i++) + { + foreach (var faceIndex in obj.Faces[i].FaceIndices()) + { + if (dic.ContainsKey(faceIndex)) + dic[faceIndex] += i; + else + dic[faceIndex] = i; + } + } List result = new List(); for (int i = 0; i < obj.Vertices.Count; i++) { int pointTranslationFactor; - if (!facesPerPointCount.TryGetValue(i, out pointTranslationFactor)) + if (!dic.TryGetValue(i, out pointTranslationFactor)) pointTranslationFactor = 0; - result.AddRange(obj.Vertices[i].ToDoubleArray(pointTranslationFactor + typeTranslationFactor)); + result.AddRange(obj.Vertices[i].ToDoubleArray(pointTranslationFactor + translationFactor)); } return result.ToArray(); @@ -212,8 +278,10 @@ private static double[] GeometryHash(this Mesh obj, double typeTranslationFactor /***************************************************/ - private static double[] GeometryHash(this Mesh3D obj, double typeTranslationFactor = 3) + private static double[] GeometryHash(this Mesh3D obj, double translationFactor) { + translationFactor += 1; + // TODO: CellRelation? Dictionary facesPerPointCount = obj.Faces.SelectMany(f => new List { f.A, f.B, f.C, f.D }) .GroupBy(i => i) @@ -227,7 +295,7 @@ private static double[] GeometryHash(this Mesh3D obj, double typeTranslationFact if (!facesPerPointCount.TryGetValue(i, out pointTranslationFactor)) pointTranslationFactor = 0; - result.AddRange(obj.Vertices[i].ToDoubleArray(pointTranslationFactor + typeTranslationFactor)); + result.AddRange(obj.Vertices[i].ToDoubleArray(pointTranslationFactor + translationFactor)); } return result.ToArray(); @@ -237,23 +305,23 @@ private static double[] GeometryHash(this Mesh3D obj, double typeTranslationFact /**** Vector ****/ /***************************************************/ - private static double[] GeometryHash(this Point obj, double typeTranslationFactor = 0) + private static double[] GeometryHash(this Point obj, double translationFactor) { - return obj.ToDoubleArray(typeTranslationFactor); + return obj.ToDoubleArray(translationFactor); } /***************************************************/ - private static double[] GeometryHash(this Plane obj, double typeTranslationFactor = 3) + private static double[] GeometryHash(this Plane obj, double translationFactor) { - return obj.Origin.Translate(obj.Normal).ToDoubleArray(typeTranslationFactor); + return obj.Origin.Translate(obj.Normal).ToDoubleArray(translationFactor); } /***************************************************/ /**** Other methods ****/ /***************************************************/ - private static double[] GeometryHash(this object obj) + private static double[] GeometryHash(this object obj, double translationFactor) { BH.Engine.Base.Compute.RecordError($"Could not find a {nameof(GeometryHash)} method for type {obj.GetType().FullName}."); return new double[] { }; From 47d1fd8637965e64818bdee53cd5b46d64b32846 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Wed, 26 Oct 2022 12:08:22 +0100 Subject: [PATCH 08/44] Adding translationFactors --- Geometry_Engine/Query/GeometryHash.cs | 79 ++++++++++++++++++--------- 1 file changed, 54 insertions(+), 25 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 51fa293e8..5db370c47 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -44,6 +44,26 @@ public static double[] IGeometryHash(this IBHoMObject bhomObj) return GeometryHash(igeom as dynamic, 0); } + private enum TypeTranslationFactor + { + Point = 0, + Arc, + Circle, + Ellipse, + Line, + NurbsCurve, + PlanarSurface, + Extrusion, + Loft, + Pipe, + PolySurface, + NurbsSurface, + SurfaceTrim, + Mesh, + Mesh3D, + Plane + } + /***************************************************/ /**** Private Methods ****/ /***************************************************/ @@ -63,8 +83,6 @@ private static double[] GeometryHash(this ICurve curve, double translationFactor private static double[] GeometryHash(this IEnumerable curves, double translationFactor) { - translationFactor += 1; - return curves.SelectMany(c => (double[])GeometryHash(c as dynamic, translationFactor)).ToArray(); } @@ -72,7 +90,7 @@ private static double[] GeometryHash(this IEnumerable curves, double tra private static double[] GeometryHash(this Arc curve, double translationFactor) { - translationFactor += 1; + translationFactor += (int)TypeTranslationFactor.Arc; return curve.StartPoint().ToDoubleArray(translationFactor) .Concat(curve.EndPoint().ToDoubleArray(translationFactor)) @@ -84,7 +102,7 @@ private static double[] GeometryHash(this Arc curve, double translationFactor) private static double[] GeometryHash(this Circle curve, double translationFactor) { - translationFactor += 1; + translationFactor += (int)TypeTranslationFactor.Circle; return curve.StartPoint().ToDoubleArray(translationFactor) .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)) @@ -96,7 +114,7 @@ private static double[] GeometryHash(this Circle curve, double translationFactor private static double[] GeometryHash(this Ellipse curve, double translationFactor) { - translationFactor += 1; + translationFactor += (int)TypeTranslationFactor.Ellipse; return curve.StartPoint().ToDoubleArray(translationFactor) .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)) @@ -109,7 +127,7 @@ private static double[] GeometryHash(this Ellipse curve, double translationFacto [Description("")] private static double[] GeometryHash(this Line curve, double translationFactor) { - translationFactor += 1; + translationFactor += (int)TypeTranslationFactor.Line; return curve.StartPoint().ToDoubleArray(translationFactor) .Concat(curve.EndPoint().ToDoubleArray(translationFactor)) @@ -123,10 +141,13 @@ private static double[] GeometryHash(this Line curve, double translationFactor) "The subarray is made by picking as many elements from the knot vector as the curve degree value.")] private static double[] GeometryHash(this NurbsCurve curve, double translationFactor) { - translationFactor += 1; - int curveDegree = curve.Degree(); + if (curveDegree == 1) + return BH.Engine.Geometry.Create.Polyline(curve.ControlPoints).GeometryHash(translationFactor); + + translationFactor += (int)TypeTranslationFactor.NurbsCurve; + List concatenated = new List(); for (int i = 0; i < curve.ControlPoints.Count(); i++) { @@ -149,8 +170,6 @@ private static double[] GeometryHash(this NurbsCurve curve, double translationFa private static double[] GeometryHash(this ISurface obj, double translationFactor) { - translationFactor += 1; - return GeometryHash(obj as dynamic, translationFactor); } @@ -158,7 +177,7 @@ private static double[] GeometryHash(this ISurface obj, double translationFactor private static double[] GeometryHash(this PlanarSurface obj, double translationFactor) { - translationFactor += 1; + translationFactor += (int)TypeTranslationFactor.PlanarSurface; return obj.ExternalBoundary.GeometryHash(translationFactor) .Concat(obj.InternalBoundaries.SelectMany(ib => ib.GeometryHash(translationFactor))).ToArray(); @@ -168,7 +187,7 @@ private static double[] GeometryHash(this PlanarSurface obj, double translationF private static double[] GeometryHash(this Extrusion obj, double translationFactor) { - translationFactor += 1; + translationFactor += (int)TypeTranslationFactor.Extrusion; return obj.Curve.ITranslate(obj.Direction).GeometryHash(translationFactor) .Concat(obj.Curve.GeometryHash(translationFactor)).ToArray(); @@ -178,7 +197,7 @@ private static double[] GeometryHash(this Extrusion obj, double translationFacto private static double[] GeometryHash(this Loft obj, double translationFactor) { - translationFactor += 1; + translationFactor += (int)TypeTranslationFactor.Loft; return obj.Curves.GeometryHash(translationFactor); } @@ -190,12 +209,12 @@ private static double[] GeometryHash(this Loft obj, double translationFactor) "The subarray is made by picking as many elements from the knot vector as the curve degree value.")] private static double[] GeometryHash(this NurbsSurface obj, double translationFactor) { - translationFactor += 1; + translationFactor += (int)TypeTranslationFactor.NurbsSurface; List concatenated = new List(); for (int i = 0; i < obj.ControlPoints.Count(); i++) { - double UKnotsSum = obj.UKnots.en.GetRange(i, obj.UDegree).Sum(); + double UKnotsSum = obj.UKnots.ToList().GetRange(i, obj.UDegree).Sum(); double VKnotsSum = obj.VKnots.ToList().GetRange(i, obj.VDegree).Sum(); double[] doubles = obj.ControlPoints[i].GeometryHash(UKnotsSum + VKnotsSum + obj.Weights[i] + translationFactor); @@ -209,7 +228,7 @@ private static double[] GeometryHash(this NurbsSurface obj, double translationFa private static double[] GeometryHash(this Pipe obj, double translationFactor) { - translationFactor += 1; + translationFactor += (int)TypeTranslationFactor.Pipe; double[] result = obj.Centreline.GeometryHash(translationFactor + obj.Radius); @@ -223,7 +242,7 @@ private static double[] GeometryHash(this Pipe obj, double translationFactor) private static double[] GeometryHash(this PolySurface obj, double translationFactor) { - translationFactor += 1; + translationFactor += (int)TypeTranslationFactor.PolySurface; return obj.Surfaces.SelectMany(s => s.GeometryHash(translationFactor)).ToArray(); } @@ -232,7 +251,7 @@ private static double[] GeometryHash(this PolySurface obj, double translationFac private static double[] GeometryHash(this SurfaceTrim obj, double translationFactor) { - translationFactor += 1; + translationFactor += (int)TypeTranslationFactor.SurfaceTrim; return obj.Curve3d.GeometryHash(translationFactor) .Concat(obj.Curve2d.GeometryHash(translationFactor)).ToArray(); @@ -247,7 +266,7 @@ private static double[] GeometryHash(this SurfaceTrim obj, double translationFac "and use that count as a translation factor for control points.")] private static double[] GeometryHash(this Mesh obj, double translationFactor) { - translationFactor += 1; + translationFactor += (int)TypeTranslationFactor.Mesh; var dic = new Dictionary(); @@ -280,19 +299,27 @@ private static double[] GeometryHash(this Mesh obj, double translationFactor) private static double[] GeometryHash(this Mesh3D obj, double translationFactor) { - translationFactor += 1; + translationFactor += (int)TypeTranslationFactor.Mesh3D; - // TODO: CellRelation? - Dictionary facesPerPointCount = obj.Faces.SelectMany(f => new List { f.A, f.B, f.C, f.D }) - .GroupBy(i => i) - .ToDictionary(g => g.Key, g => g.Count()); + var dic = new Dictionary(); + + for (int i = 0; i < obj.Faces.Count; i++) + { + foreach (var faceIndex in obj.Faces[i].FaceIndices()) + { + if (dic.ContainsKey(faceIndex)) + dic[faceIndex] += i; + else + dic[faceIndex] = i; + } + } List result = new List(); for (int i = 0; i < obj.Vertices.Count; i++) { int pointTranslationFactor; - if (!facesPerPointCount.TryGetValue(i, out pointTranslationFactor)) + if (!dic.TryGetValue(i, out pointTranslationFactor)) pointTranslationFactor = 0; result.AddRange(obj.Vertices[i].ToDoubleArray(pointTranslationFactor + translationFactor)); @@ -314,6 +341,8 @@ private static double[] GeometryHash(this Point obj, double translationFactor) private static double[] GeometryHash(this Plane obj, double translationFactor) { + translationFactor += (int)TypeTranslationFactor.Plane; + return obj.Origin.Translate(obj.Normal).ToDoubleArray(translationFactor); } From f2acf90c1bae20e051fc5b8093cb2d401efc3595 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Thu, 27 Oct 2022 08:24:28 +0100 Subject: [PATCH 09/44] Update Geometry_Engine/Query/GeometryHash.cs Co-authored-by: Al Fisher --- Geometry_Engine/Query/GeometryHash.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 5db370c47..6aca5c069 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -242,8 +242,6 @@ private static double[] GeometryHash(this Pipe obj, double translationFactor) private static double[] GeometryHash(this PolySurface obj, double translationFactor) { - translationFactor += (int)TypeTranslationFactor.PolySurface; - return obj.Surfaces.SelectMany(s => s.GeometryHash(translationFactor)).ToArray(); } From 400bfc7d6168679337a47454b20669a200d58ab5 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Thu, 27 Oct 2022 08:28:28 +0100 Subject: [PATCH 10/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 47 ++++++++++++++++----------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 6aca5c069..fa0e85759 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -44,30 +44,12 @@ public static double[] IGeometryHash(this IBHoMObject bhomObj) return GeometryHash(igeom as dynamic, 0); } - private enum TypeTranslationFactor - { - Point = 0, - Arc, - Circle, - Ellipse, - Line, - NurbsCurve, - PlanarSurface, - Extrusion, - Loft, - Pipe, - PolySurface, - NurbsSurface, - SurfaceTrim, - Mesh, - Mesh3D, - Plane - } /***************************************************/ /**** Private Methods ****/ /***************************************************/ + /***************************************************/ /**** Curves ****/ /***************************************************/ @@ -164,6 +146,7 @@ private static double[] GeometryHash(this NurbsCurve curve, double translationFa // .SelectMany(arr => arr).ToArray(); } + /***************************************************/ /**** Surfaces ****/ /***************************************************/ @@ -326,6 +309,7 @@ private static double[] GeometryHash(this Mesh3D obj, double translationFactor) return result.ToArray(); } + /***************************************************/ /**** Vector ****/ /***************************************************/ @@ -344,6 +328,7 @@ private static double[] GeometryHash(this Plane obj, double translationFactor) return obj.Origin.Translate(obj.Normal).ToDoubleArray(translationFactor); } + /***************************************************/ /**** Other methods ****/ /***************************************************/ @@ -372,6 +357,30 @@ private static double[] ToDoubleArray(this IEnumerable points, double typ { return points.SelectMany(p => p.ToDoubleArray(typeTranslationFactor, translationArray)).ToArray(); } + + + /***************************************************/ + /**** Private enum ****/ + /***************************************************/ + + private enum TypeTranslationFactor + { + Point = 0, + Plane, + Line, + Arc, + Circle, + Ellipse, + NurbsCurve, + PlanarSurface, + Pipe, + Extrusion, + Loft, + NurbsSurface, + SurfaceTrim, + Mesh, + Mesh3D + } } } From 1a09fa1d6d699b44d8bb7ce247e182e691fb7317 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Thu, 27 Oct 2022 08:47:14 +0100 Subject: [PATCH 11/44] Adding missing description attributes --- Geometry_Engine/Query/GeometryHash.cs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index fa0e85759..a7339ba0b 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -54,6 +54,9 @@ public static double[] IGeometryHash(this IBHoMObject bhomObj) /**** Curves ****/ /***************************************************/ + [Description("The geometry hash of a Curve is obtained by first retrieving any Sub-part of the curve, if present." + + "The ISubParts() methods is able to return the 'primitive' curves that a curve is composed of. " + + "The GeometryHashes are then calculated for the individual parts and concatenated.")] private static double[] GeometryHash(this ICurve curve, double translationFactor) { IEnumerable subParts = curve.ISubParts(); @@ -63,6 +66,7 @@ private static double[] GeometryHash(this ICurve curve, double translationFactor /***************************************************/ + [Description("The GeometryHashes are calculated for all of the input curves and then concatenated.")] private static double[] GeometryHash(this IEnumerable curves, double translationFactor) { return curves.SelectMany(c => (double[])GeometryHash(c as dynamic, translationFactor)).ToArray(); @@ -70,6 +74,7 @@ private static double[] GeometryHash(this IEnumerable curves, double tra /***************************************************/ + [Description("The GeometryHash for an Arc is calculated as the GeometryHash of the start, end and middle point of the Arc.")] private static double[] GeometryHash(this Arc curve, double translationFactor) { translationFactor += (int)TypeTranslationFactor.Arc; @@ -82,6 +87,7 @@ private static double[] GeometryHash(this Arc curve, double translationFactor) /***************************************************/ + [Description("The GeometryHash for an Circle is calculated as the GeometryHash of the start, 1/3rd and 2/3rd points of the Circle.")] private static double[] GeometryHash(this Circle curve, double translationFactor) { translationFactor += (int)TypeTranslationFactor.Circle; @@ -94,6 +100,7 @@ private static double[] GeometryHash(this Circle curve, double translationFactor /***************************************************/ + [Description("The GeometryHash for an Ellipse is calculated as the GeometryHash of the start, 1/3rd and 2/3rd points of the Ellipse.")] private static double[] GeometryHash(this Ellipse curve, double translationFactor) { translationFactor += (int)TypeTranslationFactor.Ellipse; @@ -106,7 +113,7 @@ private static double[] GeometryHash(this Ellipse curve, double translationFacto /***************************************************/ - [Description("")] + [Description("The GeometryHash for a Line is calculated as the GeometryHash of the start and end point of the Line.")] private static double[] GeometryHash(this Line curve, double translationFactor) { translationFactor += (int)TypeTranslationFactor.Line; @@ -158,6 +165,7 @@ private static double[] GeometryHash(this ISurface obj, double translationFactor /***************************************************/ + [Description("The GeometryHash for a Line is calculated as the GeometryHash of the External and Internal boundary curves, then concatenated.")] private static double[] GeometryHash(this PlanarSurface obj, double translationFactor) { translationFactor += (int)TypeTranslationFactor.PlanarSurface; @@ -168,6 +176,9 @@ private static double[] GeometryHash(this PlanarSurface obj, double translationF /***************************************************/ + [Description("The GeometryHash for an Extrusion is calculated by translating the extrusion curve with the extrusion direction vector." + + "A first GeometryHash is calculated for this translated curve. " + + "Then, the GeometryHash of the (non-translated) extrusion curve is concatenated to the first hash to make it more reliable.")] private static double[] GeometryHash(this Extrusion obj, double translationFactor) { translationFactor += (int)TypeTranslationFactor.Extrusion; @@ -178,6 +189,7 @@ private static double[] GeometryHash(this Extrusion obj, double translationFacto /***************************************************/ + [Description("The GeometryHash for a Loft is calculated as the GeometryHash of its curves.")] private static double[] GeometryHash(this Loft obj, double translationFactor) { translationFactor += (int)TypeTranslationFactor.Loft; @@ -209,6 +221,8 @@ private static double[] GeometryHash(this NurbsSurface obj, double translationFa /***************************************************/ + [Description("The GeometryHash for a Pipe is calculated as the GeometryHash of its centreline translated by its radius," + + "then concatenated with the GeometryHash of its centreline's StartPoint for extra reliability.")] private static double[] GeometryHash(this Pipe obj, double translationFactor) { translationFactor += (int)TypeTranslationFactor.Pipe; @@ -223,6 +237,7 @@ private static double[] GeometryHash(this Pipe obj, double translationFactor) /***************************************************/ + [Description("The GeometryHash for a PolySurface is calculated as the GeometryHash of the individual surfaces.")] private static double[] GeometryHash(this PolySurface obj, double translationFactor) { return obj.Surfaces.SelectMany(s => s.GeometryHash(translationFactor)).ToArray(); @@ -230,6 +245,7 @@ private static double[] GeometryHash(this PolySurface obj, double translationFac /***************************************************/ + [Description("The GeometryHash for a PolySurface is calculated as the GeometryHash of its Curve3d and Curve2d, concatenated.")] private static double[] GeometryHash(this SurfaceTrim obj, double translationFactor) { translationFactor += (int)TypeTranslationFactor.SurfaceTrim; @@ -278,6 +294,8 @@ private static double[] GeometryHash(this Mesh obj, double translationFactor) /***************************************************/ + [Description("Get the number of faces that are attached to each control point, " + + "and use that count as a translation factor for control points.")] private static double[] GeometryHash(this Mesh3D obj, double translationFactor) { translationFactor += (int)TypeTranslationFactor.Mesh3D; @@ -314,6 +332,7 @@ private static double[] GeometryHash(this Mesh3D obj, double translationFactor) /**** Vector ****/ /***************************************************/ + [Description("The GeometryHash for a Point is simply an array of 3 numbers composed by the Point X, Y and Z coordinates.")] private static double[] GeometryHash(this Point obj, double translationFactor) { return obj.ToDoubleArray(translationFactor); @@ -321,6 +340,7 @@ private static double[] GeometryHash(this Point obj, double translationFactor) /***************************************************/ + [Description("The GeometryHash for a Plane is the GeometryHash of its Origin point translated by its Normal vector.")] private static double[] GeometryHash(this Plane obj, double translationFactor) { translationFactor += (int)TypeTranslationFactor.Plane; @@ -333,6 +353,7 @@ private static double[] GeometryHash(this Plane obj, double translationFactor) /**** Other methods ****/ /***************************************************/ + // Fallback private static double[] GeometryHash(this object obj, double translationFactor) { BH.Engine.Base.Compute.RecordError($"Could not find a {nameof(GeometryHash)} method for type {obj.GetType().FullName}."); From 5b8e77a691c736972624c3fdde719ca4436b48b9 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Thu, 27 Oct 2022 16:10:30 +0100 Subject: [PATCH 12/44] Update Geometry_Engine/Query/GeometryHash.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Isak Näslund --- Geometry_Engine/Query/GeometryHash.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index a7339ba0b..a536a65a8 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -245,7 +245,7 @@ private static double[] GeometryHash(this PolySurface obj, double translationFac /***************************************************/ - [Description("The GeometryHash for a PolySurface is calculated as the GeometryHash of its Curve3d and Curve2d, concatenated.")] + [Description("The GeometryHash for a SurfaceTrim is calculated as the GeometryHash of its Curve3d and Curve2d, concatenated.")] private static double[] GeometryHash(this SurfaceTrim obj, double translationFactor) { translationFactor += (int)TypeTranslationFactor.SurfaceTrim; From fa9157ed7be7108fbc408edfa8f832ecefc81c7e Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Thu, 27 Oct 2022 16:13:16 +0100 Subject: [PATCH 13/44] Update Geometry_Engine/Query/GeometryHash.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Isak Näslund --- Geometry_Engine/Query/GeometryHash.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index a536a65a8..2db174bc1 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -165,7 +165,7 @@ private static double[] GeometryHash(this ISurface obj, double translationFactor /***************************************************/ - [Description("The GeometryHash for a Line is calculated as the GeometryHash of the External and Internal boundary curves, then concatenated.")] + [Description("The GeometryHash for a PlanarSurface is calculated as the GeometryHash of the External and Internal boundary curves, then concatenated.")] private static double[] GeometryHash(this PlanarSurface obj, double translationFactor) { translationFactor += (int)TypeTranslationFactor.PlanarSurface; From df650ea5e2c23d88b63098386dc428926d8a1774 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Thu, 27 Oct 2022 16:16:35 +0100 Subject: [PATCH 14/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index a7339ba0b..9f1ffb8f6 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -216,7 +216,9 @@ private static double[] GeometryHash(this NurbsSurface obj, double translationFa concatenated.AddRange(doubles); } - return obj.ControlPoints.ToDoubleArray(translationFactor); + return obj.ControlPoints.ToDoubleArray(translationFactor) + .Concat(obj.InnerTrims.SelectMany(it => it.GeometryHash(translationFactor))) + .Concat(obj.OuterTrims.SelectMany(it => it.GeometryHash(translationFactor))).ToArray(); } /***************************************************/ From 12c51001c129c331d8d13905b90cd2053a81d1a5 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Thu, 27 Oct 2022 16:20:54 +0100 Subject: [PATCH 15/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index dee04d9a5..020f52489 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -358,6 +358,10 @@ private static double[] GeometryHash(this Plane obj, double translationFactor) // Fallback private static double[] GeometryHash(this object obj, double translationFactor) { + object extensionMethodResult = null; + if (BH.Engine.Base.Compute.TryRunExtensionMethod(obj, "GeometryHash", out extensionMethodResult)) + return (double[])extensionMethodResult; + BH.Engine.Base.Compute.RecordError($"Could not find a {nameof(GeometryHash)} method for type {obj.GetType().FullName}."); return new double[] { }; } From a4f99ab6f2c68dde68236831c8f8c8dc29242efe Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Thu, 27 Oct 2022 16:21:58 +0100 Subject: [PATCH 16/44] Update Geometry_Engine/Query/GeometryHash.cs Co-authored-by: Al Fisher --- Geometry_Engine/Query/GeometryHash.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 020f52489..dd484b86d 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -36,7 +36,9 @@ public static partial class Query /**** Public Methods ****/ /***************************************************/ - [Description("All geometry hash methods are implemented to be translational.")] + [Description("Returns the geometrical identity of any geometry primitive, useful for comparisons and diffing. " + + "Any transformations of underlying geometry performed in methods as part of the calculation of the Geometry Hash " + + "are implemented to be translational only to ensure validity of any geometrical tolerance checking between two hashes downstream.")] public static double[] IGeometryHash(this IBHoMObject bhomObj) { IGeometry igeom = bhomObj.IGeometry(); From 68eafaa5acaea21e9e523dd1477b706542845c9b Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Thu, 27 Oct 2022 16:26:17 +0100 Subject: [PATCH 17/44] Removed translationArray --- Geometry_Engine/Query/GeometryHash.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 020f52489..27825dd85 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -368,21 +368,21 @@ private static double[] GeometryHash(this object obj, double translationFactor) /***************************************************/ - private static double[] ToDoubleArray(this Point p, double typeTranslationFactor, double[] translationArray = null) + private static double[] ToDoubleArray(this Point p, double typeTranslationFactor) { return new double[] { - p.X + typeTranslationFactor + translationArray?.ElementAtOrDefault(0) ?? 0, - p.Y + typeTranslationFactor + translationArray?.ElementAtOrDefault(1) ?? 0, - p.Z + typeTranslationFactor + translationArray?.ElementAtOrDefault(2) ?? 0 + p.X + typeTranslationFactor, + p.Y + typeTranslationFactor, + p.Z + typeTranslationFactor }; } /***************************************************/ - private static double[] ToDoubleArray(this IEnumerable points, double typeTranslationFactor, double[] translationArray = null) + private static double[] ToDoubleArray(this IEnumerable points, double typeTranslationFactor) { - return points.SelectMany(p => p.ToDoubleArray(typeTranslationFactor, translationArray)).ToArray(); + return points.SelectMany(p => p.ToDoubleArray(typeTranslationFactor)).ToArray(); } From 5e0d65a9a10556d99b29a891682e8a5d6496865b Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Thu, 27 Oct 2022 16:28:52 +0100 Subject: [PATCH 18/44] Update FaceIndices.cs --- Geometry_Engine/Query/FaceIndices.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/FaceIndices.cs b/Geometry_Engine/Query/FaceIndices.cs index 521420ec5..87efca57b 100644 --- a/Geometry_Engine/Query/FaceIndices.cs +++ b/Geometry_Engine/Query/FaceIndices.cs @@ -35,7 +35,7 @@ public static partial class Query /**** Public Methods ****/ /***************************************************/ - [Description("Return the list of face indeces for an input face. The last face index (D) is not added if it's equal to -1.")] + [Description("Return the list of face indices for an input face. The last face index (D) is not added if it's equal to -1.")] [Input("meshFace", "Mesh face to query the indices for.")] [Output("indices", "List of indices.")] public static List FaceIndices(this Face meshFace) From f06f929dac2663056ee25a70b087402c2a485c10 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Tue, 1 Nov 2022 15:23:21 +0000 Subject: [PATCH 19/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 41 +++++++++++++++++++-------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 8e02f70de..f0f2f0b43 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -23,8 +23,10 @@ using BH.Engine.Base; using BH.oM.Base; using BH.oM.Geometry; +using BH.oM.Geometry.CoordinateSystem; using System.Collections.Generic; using System.ComponentModel; +using System.Drawing.Drawing2D; using System.Linq; using System.Security.Cryptography.Xml; @@ -36,9 +38,10 @@ public static partial class Query /**** Public Methods ****/ /***************************************************/ - [Description("Returns the geometrical identity of any geometry primitive, useful for comparisons and diffing. " + - "Any transformations of underlying geometry performed in methods as part of the calculation of the Geometry Hash " + - "are implemented to be translational only to ensure validity of any geometrical tolerance checking between two hashes downstream.")] + [Description("Returns the geometrical identity of any IBHoMObject, useful for comparisons and diffing. " + + "The geometrical identity is computed by extracting the geometry of the object via the IGeometry() method." + + "Then the Any transformations of underlying geometry performed in methods as part of the calculation of the GeometryHash " + + "are implemented to be translational only, in order to support geometrical tolerance (numerical distance) when comparing GeometryHashes downstream.")] public static double[] IGeometryHash(this IBHoMObject bhomObj) { IGeometry igeom = bhomObj.IGeometry(); @@ -127,8 +130,8 @@ private static double[] GeometryHash(this Line curve, double translationFactor) /***************************************************/ - [Description("Moving control points by a translation factor composed by the weights " + - "and a subarray of the knot vector. " + + [Description("The GeometryHash for a NurbsCurve is obtained by getting moving the control points " + + "by a translation factor composed by the weights and a subarray of the knot vector. " + "The subarray is made by picking as many elements from the knot vector as the curve degree value.")] private static double[] GeometryHash(this NurbsCurve curve, double translationFactor) { @@ -263,7 +266,7 @@ private static double[] GeometryHash(this SurfaceTrim obj, double translationFac /**** Mesh ****/ /***************************************************/ - [Description("Get the number of faces that are attached to each control point, " + + [Description("The GeometryHash for a Mesh is obtained by getting the number of faces that are attached to each control point, " + "and use that count as a translation factor for control points.")] private static double[] GeometryHash(this Mesh obj, double translationFactor) { @@ -298,8 +301,8 @@ private static double[] GeometryHash(this Mesh obj, double translationFactor) /***************************************************/ - [Description("Get the number of faces that are attached to each control point, " + - "and use that count as a translation factor for control points.")] + [Description("The GeometryHash for a Mesh3D is obtained by getting the number of faces that are attached to each control point, " + + "and using that count as a translation factor for control points.")] private static double[] GeometryHash(this Mesh3D obj, double translationFactor) { translationFactor += (int)TypeTranslationFactor.Mesh3D; @@ -342,16 +345,30 @@ private static double[] GeometryHash(this Point obj, double translationFactor) return obj.ToDoubleArray(translationFactor); } + /***************************************************/ - [Description("The GeometryHash for a Plane is the GeometryHash of its Origin point translated by its Normal vector.")] - private static double[] GeometryHash(this Plane obj, double translationFactor) + private static double[] GeometryHash(this Vector obj, double translationFactor) { - translationFactor += (int)TypeTranslationFactor.Plane; + BH.Engine.Base.Compute.RecordWarning($"The GeometryHash for a {nameof(Vector)} cannot be computed."); + return new double[] {}; + } + + /***************************************************/ - return obj.Origin.Translate(obj.Normal).ToDoubleArray(translationFactor); + private static double[] GeometryHash(this Plane obj, double translationFactor) + { + BH.Engine.Base.Compute.RecordWarning($"The GeometryHash for a {nameof(Plane)} cannot be computed."); + return new double[] { }; } + /***************************************************/ + + private static double[] GeometryHash(this Cartesian obj, double translationFactor) + { + BH.Engine.Base.Compute.RecordWarning($"The GeometryHash for a {nameof(BH.oM.Geometry.CoordinateSystem)}.{nameof(Cartesian)} object cannot be computed."); + return new double[] { }; + } /***************************************************/ /**** Other methods ****/ From d646efeaf6a35faa416d6283576592761a8603e8 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Tue, 1 Nov 2022 15:26:27 +0000 Subject: [PATCH 20/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index f0f2f0b43..a1ebf7a74 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -381,7 +381,11 @@ private static double[] GeometryHash(this object obj, double translationFactor) if (BH.Engine.Base.Compute.TryRunExtensionMethod(obj, "GeometryHash", out extensionMethodResult)) return (double[])extensionMethodResult; - BH.Engine.Base.Compute.RecordError($"Could not find a {nameof(GeometryHash)} method for type {obj.GetType().FullName}."); + if (!(obj is IGeometry)) + BH.Engine.Base.Compute.RecordError($"Could not find a {nameof(GeometryHash)} method for type {obj.GetType().FullName}."); + else + BH.Engine.Base.Compute.RecordError($"The GeometryHash cannot be computed for a geometry object of type {obj.GetType().FullName}."); + return new double[] { }; } From 21a3cbce409ec187b72b66767da4a637a97fba39 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Fri, 4 Nov 2022 14:53:41 +0000 Subject: [PATCH 21/44] Moved GeometryHash with IBHoMObject to BHoM_Engine --- BHoM_Engine/Query/GeometryHash.cs | 65 ++++++++++++++++++++++++ Geometry_Engine/Query/GeometryHash.cs | 71 +++++++++------------------ 2 files changed, 88 insertions(+), 48 deletions(-) create mode 100644 BHoM_Engine/Query/GeometryHash.cs diff --git a/BHoM_Engine/Query/GeometryHash.cs b/BHoM_Engine/Query/GeometryHash.cs new file mode 100644 index 000000000..dd12fbcee --- /dev/null +++ b/BHoM_Engine/Query/GeometryHash.cs @@ -0,0 +1,65 @@ +/* + * This file is part of the Buildings and Habitats object Model (BHoM) + * Copyright (c) 2015 - 2022, the respective contributors. All rights reserved. + * + * Each contributor holds copyright over their respective contributions. + * The project versioning (Git) records all such contribution source information. + * + * + * The BHoM is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3.0 of the License, or + * (at your option) any later version. + * + * The BHoM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this code. If not, see . + */ + +using BH.oM.Base; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Security.Cryptography; +using System.Reflection; +using BH.oM.Base.Attributes; +using System.ComponentModel; +using BH.Engine.Base; +using System.Collections; +using System.Data; +using BH.oM.Geometry; + +namespace BH.Engine.Base +{ + public static partial class Query + { + /***************************************************/ + /**** Public Methods ****/ + /***************************************************/ + + [Description("Returns the geometrical identity of any IBHoMObject, useful for comparisons and diffing. " + + "The geometrical identity is computed by extracting the geometry of the object via the IGeometry() method." + + "Then the Any transformations of underlying geometry performed in methods as part of the calculation of the GeometryHash " + + "are implemented to be translational only, in order to support geometrical tolerance (numerical distance) when comparing GeometryHashes downstream.")] + public static double[] IGeometryHash(this IBHoMObject bhomObj, double tolerance = Tolerance.Distance) + { + IGeometry igeom = bhomObj.IGeometry(); + + if (igeom == null) + return null; + System.Reflection.MethodInfo mi = Query.ExtensionMethodToCall(bhomObj, "GeometryHash"); + if (mi != null) + return (double[])Compute.RunExtensionMethod(bhomObj, "GeometryHash"); + else + return null; + } + } +} + + diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index a1ebf7a74..46fa26346 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -38,18 +38,15 @@ public static partial class Query /**** Public Methods ****/ /***************************************************/ - [Description("Returns the geometrical identity of any IBHoMObject, useful for comparisons and diffing. " + + [Description("Returns the geometrical identity of any IBHoMObject, useful for comparisons and diffing. " + "The geometrical identity is computed by extracting the geometry of the object via the IGeometry() method." + "Then the Any transformations of underlying geometry performed in methods as part of the calculation of the GeometryHash " + "are implemented to be translational only, in order to support geometrical tolerance (numerical distance) when comparing GeometryHashes downstream.")] - public static double[] IGeometryHash(this IBHoMObject bhomObj) + public static double[] IGeometryHash(this IGeometry igeometry, double tolerance = Tolerance.Distance) { - IGeometry igeom = bhomObj.IGeometry(); - - return GeometryHash(igeom as dynamic, 0); + return GeometryHash(igeometry as dynamic, 0); } - /***************************************************/ /**** Private Methods ****/ /***************************************************/ @@ -346,30 +343,6 @@ private static double[] GeometryHash(this Point obj, double translationFactor) } - /***************************************************/ - - private static double[] GeometryHash(this Vector obj, double translationFactor) - { - BH.Engine.Base.Compute.RecordWarning($"The GeometryHash for a {nameof(Vector)} cannot be computed."); - return new double[] {}; - } - - /***************************************************/ - - private static double[] GeometryHash(this Plane obj, double translationFactor) - { - BH.Engine.Base.Compute.RecordWarning($"The GeometryHash for a {nameof(Plane)} cannot be computed."); - return new double[] { }; - } - - /***************************************************/ - - private static double[] GeometryHash(this Cartesian obj, double translationFactor) - { - BH.Engine.Base.Compute.RecordWarning($"The GeometryHash for a {nameof(BH.oM.Geometry.CoordinateSystem)}.{nameof(Cartesian)} object cannot be computed."); - return new double[] { }; - } - /***************************************************/ /**** Other methods ****/ /***************************************************/ @@ -381,10 +354,7 @@ private static double[] GeometryHash(this object obj, double translationFactor) if (BH.Engine.Base.Compute.TryRunExtensionMethod(obj, "GeometryHash", out extensionMethodResult)) return (double[])extensionMethodResult; - if (!(obj is IGeometry)) - BH.Engine.Base.Compute.RecordError($"Could not find a {nameof(GeometryHash)} method for type {obj.GetType().FullName}."); - else - BH.Engine.Base.Compute.RecordError($"The GeometryHash cannot be computed for a geometry object of type {obj.GetType().FullName}."); + BH.Engine.Base.Compute.RecordError($"Could not find a {nameof(GeometryHash)} method for type {obj.GetType().FullName}."); return new double[] { }; } @@ -413,23 +383,28 @@ private static double[] ToDoubleArray(this IEnumerable points, double typ /**** Private enum ****/ /***************************************************/ + [Description("Multiplier used to define the TypeTranslationFactors.")] + private const int m_ToleranceMultiplier = (int)(1e9 * Tolerance.Distance); + + [Description("Translation factors per each type of geometry." + + "The translation is proportional ")] private enum TypeTranslationFactor { Point = 0, - Plane, - Line, - Arc, - Circle, - Ellipse, - NurbsCurve, - PlanarSurface, - Pipe, - Extrusion, - Loft, - NurbsSurface, - SurfaceTrim, - Mesh, - Mesh3D + Plane = 1 * m_ToleranceMultiplier, + Line = 2 * m_ToleranceMultiplier, + Arc = 3 * m_ToleranceMultiplier, + Circle = 4 * m_ToleranceMultiplier, + Ellipse = 5 * m_ToleranceMultiplier, + NurbsCurve = 6 * m_ToleranceMultiplier, + PlanarSurface = 7 * m_ToleranceMultiplier, + Pipe = 8 * m_ToleranceMultiplier, + Extrusion = 9 * m_ToleranceMultiplier, + Loft = 10 * m_ToleranceMultiplier, + NurbsSurface = 11 * m_ToleranceMultiplier, + SurfaceTrim = 12 * m_ToleranceMultiplier, + Mesh = 13 * m_ToleranceMultiplier, + Mesh3D = 14 * m_ToleranceMultiplier } } } From 5dfa9f4a605a987699a28424dd02def5dc8ea2b4 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Fri, 4 Nov 2022 17:23:28 +0000 Subject: [PATCH 22/44] Update GeometryHash.cs --- BHoM_Engine/Query/GeometryHash.cs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/BHoM_Engine/Query/GeometryHash.cs b/BHoM_Engine/Query/GeometryHash.cs index dd12fbcee..de5182cd1 100644 --- a/BHoM_Engine/Query/GeometryHash.cs +++ b/BHoM_Engine/Query/GeometryHash.cs @@ -43,22 +43,31 @@ public static partial class Query /**** Public Methods ****/ /***************************************************/ - [Description("Returns the geometrical identity of any IBHoMObject, useful for comparisons and diffing. " + - "The geometrical identity is computed by extracting the geometry of the object via the IGeometry() method." + - "Then the Any transformations of underlying geometry performed in methods as part of the calculation of the GeometryHash " + - "are implemented to be translational only, in order to support geometrical tolerance (numerical distance) when comparing GeometryHashes downstream.")] - public static double[] IGeometryHash(this IBHoMObject bhomObj, double tolerance = Tolerance.Distance) + [Description("Returns the geometrical identity of any IBHoMObject, useful for distance-based comparisons and diffing. " + + "\nThe geometrical identity is computed by extracting the geometry of the object via the IGeometry() method." + + "\nThen, the hash is computed as an array representing the coordinate of significant points taken on the geometry." + + "\nThe number of points is reduced to the minimum essential to determine uniquely any geometry." + + "\nAdditionally, the resulting points are transformed based on the source geometry type, to remove or minimize collisions." + + "\n(Any transformation so performed is translational only, in order to support geometrical tolerance, i.e. numerical distance, when comparing GeometryHashes downstream).")] + [Input("bhomObj", "Input BHoMObject whose geometry will be queried by IGeometry() and which will be used for computing a Geometry Hash.")] + [Output("geomHash","Array of numbers representing a unique signature of the input object's geometry.")] + public static double[] GeometryHash(this IBHoMObject bhomObj) { IGeometry igeom = bhomObj.IGeometry(); if (igeom == null) return null; - System.Reflection.MethodInfo mi = Query.ExtensionMethodToCall(bhomObj, "GeometryHash"); - if (mi != null) - return (double[])Compute.RunExtensionMethod(bhomObj, "GeometryHash"); - else - return null; + + if (m_GeomHashFunc == null) + { + MethodInfo mi = Query.ExtensionMethodToCall(igeom, "IGeometryHash"); + m_GeomHashFunc = (Func)Delegate.CreateDelegate(typeof(Func), mi); + } + + return m_GeomHashFunc(igeom); } + + private static Func m_GeomHashFunc = null; } } From 29a464f6f39a3b3445f709fd2aef0917899f871e Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Fri, 4 Nov 2022 17:23:30 +0000 Subject: [PATCH 23/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 76 ++++++++++++++++----------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 46fa26346..02357eecc 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -22,6 +22,7 @@ using BH.Engine.Base; using BH.oM.Base; +using BH.oM.Base.Attributes; using BH.oM.Geometry; using BH.oM.Geometry.CoordinateSystem; using System.Collections.Generic; @@ -38,11 +39,13 @@ public static partial class Query /**** Public Methods ****/ /***************************************************/ - [Description("Returns the geometrical identity of any IBHoMObject, useful for comparisons and diffing. " + - "The geometrical identity is computed by extracting the geometry of the object via the IGeometry() method." + - "Then the Any transformations of underlying geometry performed in methods as part of the calculation of the GeometryHash " + - "are implemented to be translational only, in order to support geometrical tolerance (numerical distance) when comparing GeometryHashes downstream.")] - public static double[] IGeometryHash(this IGeometry igeometry, double tolerance = Tolerance.Distance) + [Description("Returns a signature of the input geometry, useful for distance-based comparisons and diffing." + + "\nThe hash is computed as an array representing the coordinate of significant points taken on the geometry." + + "\nThe number of points is reduced to the minimum essential to determine uniquely any geometry." + + "\nAdditionally, the resulting points are transformed based on the source geometry type, to remove or minimize collisions." + + "\n(Any transformation so performed is translational only, in order to support geometrical tolerance, i.e. numerical distance, when comparing GeometryHashes downstream).")] + [Output("geomHash", "Array of numbers representing a unique signature of the input geometry.")] + public static double[] IGeometryHash(this IGeometry igeometry) { return GeometryHash(igeometry as dynamic, 0); } @@ -63,63 +66,69 @@ private static double[] GeometryHash(this ICurve curve, double translationFactor { IEnumerable subParts = curve.ISubParts(); - return subParts.GeometryHash(translationFactor); - } - - /***************************************************/ + bool isMultipleCurves = subParts.Count() != 1; - [Description("The GeometryHashes are calculated for all of the input curves and then concatenated.")] - private static double[] GeometryHash(this IEnumerable curves, double translationFactor) - { - return curves.SelectMany(c => (double[])GeometryHash(c as dynamic, translationFactor)).ToArray(); + return subParts.SelectMany(c => (double[])GeometryHash(c as dynamic, translationFactor, isMultipleCurves)).ToArray(); } /***************************************************/ [Description("The GeometryHash for an Arc is calculated as the GeometryHash of the start, end and middle point of the Arc.")] - private static double[] GeometryHash(this Arc curve, double translationFactor) + private static double[] GeometryHash(this Arc curve, double translationFactor, bool skipLastPoint = false) { translationFactor += (int)TypeTranslationFactor.Arc; - return curve.StartPoint().ToDoubleArray(translationFactor) - .Concat(curve.EndPoint().ToDoubleArray(translationFactor)) - .Concat(curve.PointAtParameter(0.5).ToDoubleArray(translationFactor)) - .ToArray(); + IEnumerable hash = curve.StartPoint().ToDoubleArray(translationFactor) + .Concat(curve.PointAtParameter(0.5).ToDoubleArray(translationFactor)); + + if (!skipLastPoint) + hash = hash.Concat(curve.EndPoint().ToDoubleArray(translationFactor)); + + return hash.ToArray(); } /***************************************************/ [Description("The GeometryHash for an Circle is calculated as the GeometryHash of the start, 1/3rd and 2/3rd points of the Circle.")] - private static double[] GeometryHash(this Circle curve, double translationFactor) + private static double[] GeometryHash(this Circle curve, double translationFactor, bool skipLastPoint = false) { translationFactor += (int)TypeTranslationFactor.Circle; - return curve.StartPoint().ToDoubleArray(translationFactor) - .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)) - .Concat(curve.PointAtParameter(0.66).ToDoubleArray(translationFactor)) - .ToArray(); + IEnumerable hash = curve.StartPoint().ToDoubleArray(translationFactor) + .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)); + + if (!skipLastPoint) + hash = hash.Concat(curve.PointAtParameter(0.66).ToDoubleArray(translationFactor)); + + return hash.ToArray(); } /***************************************************/ [Description("The GeometryHash for an Ellipse is calculated as the GeometryHash of the start, 1/3rd and 2/3rd points of the Ellipse.")] - private static double[] GeometryHash(this Ellipse curve, double translationFactor) + private static double[] GeometryHash(this Ellipse curve, double translationFactor, bool skipLastPoint = false) { translationFactor += (int)TypeTranslationFactor.Ellipse; - return curve.StartPoint().ToDoubleArray(translationFactor) - .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)) - .Concat(curve.PointAtParameter(0.66).ToDoubleArray(translationFactor)) - .ToArray(); + IEnumerable hash = curve.StartPoint().ToDoubleArray(translationFactor) + .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)); + + if (!skipLastPoint) + hash = hash.Concat(curve.PointAtParameter(0.66).ToDoubleArray(translationFactor)); + + return hash.ToArray(); } /***************************************************/ [Description("The GeometryHash for a Line is calculated as the GeometryHash of the start and end point of the Line.")] - private static double[] GeometryHash(this Line curve, double translationFactor) + private static double[] GeometryHash(this Line curve, double translationFactor, bool skipLastPoint = false) { translationFactor += (int)TypeTranslationFactor.Line; + if (skipLastPoint) + return curve.StartPoint().ToDoubleArray(translationFactor); + return curve.StartPoint().ToDoubleArray(translationFactor) .Concat(curve.EndPoint().ToDoubleArray(translationFactor)) .ToArray(); @@ -130,7 +139,7 @@ private static double[] GeometryHash(this Line curve, double translationFactor) [Description("The GeometryHash for a NurbsCurve is obtained by getting moving the control points " + "by a translation factor composed by the weights and a subarray of the knot vector. " + "The subarray is made by picking as many elements from the knot vector as the curve degree value.")] - private static double[] GeometryHash(this NurbsCurve curve, double translationFactor) + private static double[] GeometryHash(this NurbsCurve curve, double translationFactor, bool skipLastPoint = false) { int curveDegree = curve.Degree(); @@ -140,7 +149,12 @@ private static double[] GeometryHash(this NurbsCurve curve, double translationFa translationFactor += (int)TypeTranslationFactor.NurbsCurve; List concatenated = new List(); - for (int i = 0; i < curve.ControlPoints.Count(); i++) + + int controlPointsCount = curve.ControlPoints.Count(); + if (skipLastPoint) + controlPointsCount--; + + for (int i = 0; i < controlPointsCount; i++) { double sum = curve.Knots.GetRange(i, curveDegree).Sum(); double[] doubles = curve.ControlPoints[i].GeometryHash(sum + curve.Weights[i] + translationFactor); From 3f6438ba9231625b036cde26b718b7a78bc32c15 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Fri, 4 Nov 2022 17:23:38 +0000 Subject: [PATCH 24/44] Adding unit tests --- .ci/Datasets/BHoM_Engine/Query/GeometryHash.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 .ci/Datasets/BHoM_Engine/Query/GeometryHash.json diff --git a/.ci/Datasets/BHoM_Engine/Query/GeometryHash.json b/.ci/Datasets/BHoM_Engine/Query/GeometryHash.json new file mode 100644 index 000000000..966a0a0e7 --- /dev/null +++ b/.ci/Datasets/BHoM_Engine/Query/GeometryHash.json @@ -0,0 +1 @@ +{ "_t" : "BH.oM.Data.Library.Dataset", "BHoM_Guid" : "8afaad02-d2a6-41f1-93e3-26d9e9140fb5", "Name" : "GeometryHash", "Fragments" : [], "Tags" : [], "CustomData" : { }, "SourceInformation" : { "_t" : "BH.oM.Data.Library.Source", "BHoM_Guid" : "8beedef0-2f90-4a2e-af19-8e48f45930d9", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "SourceLink" : "", "Title" : "GeometryHash", "Author" : "Alessio Lombardi", "ItemReference" : "", "Version" : "", "Publisher" : "", "Schema" : "", "Language" : "", "Location" : "", "Copyright" : "", "Contributors" : "", "Confidence" : "Undefined" }, "TimeOfCreation" : { "$date" : 1667581766017 }, "Data" : [{ "_t" : "BH.oM.Test.UnitTests.UnitTest", "BHoM_Guid" : "662623df-a803-4bca-9240-743563a35cec", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Method" : { "_t" : "System.Reflection.MethodBase", "TypeName" : "{ \"_t\" : \"System.Type\", \"Name\" : \"BH.Engine.Base.Query, BHoM_Engine, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null\", \"_bhomVersion\" : \"6.0\" }", "MethodName" : "GeometryHash", "Parameters" : ["{ \"_t\" : \"System.Type\", \"Name\" : \"BH.oM.Base.IBHoMObject\", \"_bhomVersion\" : \"6.0\" }"], "_bhomVersion" : "6.0" }, "Data" : [{ "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "626867bb-e2ac-4b0d-ab23-517b7369d406", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "_t" : "BH.oM.Structure.Elements.Bar", "BHoM_Guid" : "2d595478-ee14-4c2c-8217-1b3632d99878", "Name" : "kukf40hob25", "Fragments" : [], "Tags" : [], "CustomData" : { "3xedng5oioh" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.67219245884203938, "Y" : 0.37923656794207011, "Z" : 0.86616781953078126 }, "1zp2pvzll1f" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.78663488607231291, "Y" : 0.51996000880373638, "Z" : 0.82963650712260817 }, "so5eys3xbfs" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.52251069877413603, "Y" : 0.16290920375050474, "Z" : 0.63418533961949186 }, "dwupgmadnpp" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.31461000783117954, "Y" : 0.24995057156772846, "Z" : 0.80063021453126815 }, "1qavhmmt43s" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.92160075852721968, "Y" : 0.33739710288932412, "Z" : 0.19225228260841792 } }, "StartNode" : { "_t" : "BH.oM.Structure.Elements.Node", "BHoM_Guid" : "be665092-48c1-4569-b707-e54cf7d175b7", "Name" : "zum25tljmnf", "Fragments" : [], "Tags" : [], "CustomData" : { "wwm1vb04a2s" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34314184465591879, "Y" : 0.95745516566441169, "Z" : 0.50512921274878508 }, "knnxwn2txye" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.1189577291342233, "Y" : 0.27345148347013232, "Z" : 0.90709795006881377 }, "e1kh1cm0lz4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.3371603392703274, "Y" : 0.45720878776964208, "Z" : 0.14682504029331031 }, "c5bf10qef1g" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.41007327959410533, "Y" : 0.71872683275431715, "Z" : 0.61983028362497239 }, "gwljh1c5cei" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.19491343674944409, "Y" : 0.87819148687561577, "Z" : 0.82542318423531169 }, "cvpnu4tt4gy" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.85821920766412241, "Y" : 0.67974901137861843, "Z" : 0.62486613570939109 } }, "Position" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.72624326996795985, "Y" : 0.81732535959096875, "Z" : 0.76802268939466345 }, "Orientation" : { "_t" : "BH.oM.Geometry.Basis", "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.5581611914365372, "Y" : 0.2060331540210327, "Z" : 0.55888479461841511 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.90602706601192573, "Y" : 0.44217787331071584, "Z" : 0.97754975314137982 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27370445768987034, "Y" : 0.29190628476995334, "Z" : 0.46731470034798361 } }, "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "e056100b-0985-48b2-ad90-17c515eb2cb2", "Name" : "fcp3mpxseb2", "Fragments" : [], "Tags" : [], "CustomData" : { "f25lpoud5r2" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.5262841426424143, "Y" : 0.93401865890902402, "Z" : 0.68762028249335483 }, "cvgygnuze3w" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.081109949891041005, "Y" : 0.18712457417842213, "Z" : 0.45332718521977178 }, "npjtzsurk0x" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.98854377911823976, "Y" : 0.64269747289023249, "Z" : 0.76296358823914245 } }, "TranslationalStiffnessX" : 0.63265907281667877, "TranslationalStiffnessY" : 0.46951187842968473, "TranslationalStiffnessZ" : 0.98215125314060192, "RotationalStiffnessX" : 0.030366990729406004, "RotationalStiffnessY" : 0.86237015382497118, "RotationalStiffnessZ" : 0.99534708121574811, "TranslationX" : "SpringRelativeNegative", "TranslationY" : "Spring", "TranslationZ" : "NonLinear", "RotationX" : "Friction", "RotationY" : "Damped", "RotationZ" : "Free" } }, "EndNode" : { "_t" : "BH.oM.Structure.Elements.Node", "BHoM_Guid" : "787278ed-9e8f-42df-bf4d-dcb90d76648f", "Name" : "t5tmtr2kf3a", "Fragments" : [], "Tags" : [], "CustomData" : { "eltf40rxh45" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.62462275923445021, "Y" : 0.6930450455718884, "Z" : 0.63039438223018984 }, "oauyop5nptc" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.22134204172591773, "Y" : 0.92870763266864587, "Z" : 0.066521596194487803 }, "zko03ghhxi4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.67850547222350976, "Y" : 0.093978040429753273, "Z" : 0.149097432917495 } }, "Position" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.89536243905097357, "Y" : 0.89643980325033878, "Z" : 0.086579883511448227 }, "Orientation" : { "_t" : "BH.oM.Geometry.Basis", "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.83857909955018162, "Y" : 0.17014283461968546, "Z" : 0.64411529369843901 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.82681440553945229, "Y" : 0.21918766490145944, "Z" : 0.99997269781305109 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.48136564692545947, "Y" : 0.65220523655982932, "Z" : 0.71972598355250716 } }, "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "665a417c-8680-44a7-b6ca-514c73806cbe", "Name" : "x45vs30bajz", "Fragments" : [], "Tags" : [], "CustomData" : { "2cld3nvjdad" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.80920381322931678, "Y" : 0.7936303423687957, "Z" : 0.76450598601461672 }, "ygvxfckzx2m" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.29499680190114158, "Y" : 0.52278529923538919, "Z" : 0.66339283327730036 }, "p3j1awnvzr1" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.28672242923021429, "Y" : 0.82061007331153846, "Z" : 0.2225179258838845 } }, "TranslationalStiffnessX" : 0.80946258027547158, "TranslationalStiffnessY" : 0.10093539631969081, "TranslationalStiffnessZ" : 0.72909405395812077, "RotationalStiffnessX" : 0.71845069188552479, "RotationalStiffnessY" : 0.12552724831063639, "RotationalStiffnessZ" : 0.90517638991827909, "TranslationX" : "FixedNegative", "TranslationY" : "SpringPositive", "TranslationZ" : "SpringRelative", "RotationX" : "Spring", "RotationY" : "SpringRelativeNegative", "RotationZ" : "SpringPositive" } }, "SectionProperty" : { "_t" : "BH.oM.Structure.SectionProperties.AluminiumSection", "BHoM_Guid" : "16788a41-9193-4763-b5ef-2e2d35a47127", "Name" : null, "Fragments" : [], "Tags" : [], "CustomData" : { }, "Material" : null, "SectionProfile" : { "_t" : "BH.oM.Spatial.ShapeProfiles.AngleProfile", "BHoM_Guid" : "03decf14-9a59-496f-89b6-161565a5521a", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Shape" : "Angle", "Height" : 0.6098702427045769, "Width" : 0.95304281774584332, "WebThickness" : 0.49062520800653159, "FlangeThickness" : 0.14805626457000909, "RootRadius" : 0.6776115413185263, "ToeRadius" : 0.5698617443302002, "MirrorAboutLocalZ" : false, "MirrorAboutLocalY" : true, "Edges" : [] }, "Area" : 0.36093902139036871, "Rgy" : 0.8504849513296433, "Rgz" : 0.062308419524835616, "J" : 0.28164726089762859, "Iy" : 0.70497589591190957, "Iz" : 0.95858034769007017, "Iw" : 0.98881240328252895, "Wely" : 0.38713695359748646, "Welz" : 0.52274015104525728, "Wply" : 0.28032532300815233, "Wplz" : 0.50657612807423624, "CentreZ" : 0.53157909192684061, "CentreY" : 0.057008397792004235, "Vz" : 0.28055363068382888, "Vpz" : 0.4960787578001985, "Vy" : 0.84641548890919216, "Vpy" : 0.61315786680819362, "Asy" : 0.10415865299485561, "Asz" : 0.74232903762828983 }, "OrientationAngle" : 0.40187614522961718, "Release" : { "_t" : "BH.oM.Structure.Constraints.BarRelease", "BHoM_Guid" : "839a36cf-4f44-4a46-81f9-b38f19a4c1f8", "Name" : "sk4lmodwje3", "Fragments" : [], "Tags" : [], "CustomData" : { "fnui4ziduaj" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.12118609627764025, "Y" : 0.19491076525063755, "Z" : 0.49651680909866319 }, "mtici05zjv1" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.26166441490019876, "Y" : 0.31036315826250388, "Z" : 0.24213605804468322 }, "zwqnvnegipn" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.13305996969950384, "Y" : 0.61250376636744652, "Z" : 0.55929009968381849 }, "lnyh03ydgzz" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34102778664837952, "Y" : 0.023311249456978985, "Z" : 0.097285922196361202 }, "0dgsdhhaaio" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.71087234267539923, "Y" : 0.89213904454006765, "Z" : 0.65126434138569256 } }, "StartRelease" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "1ed64b43-fd17-47d0-9c2d-51b923824127", "Name" : "huwoisbafu2", "Fragments" : [], "Tags" : [], "CustomData" : { "x041ffah355" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.063436652563249998, "Y" : 0.2636837378440815, "Z" : 0.84256009424224498 }, "y15gyksfsnh" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.64599011449422228, "Y" : 0.51636614581400819, "Z" : 0.9701272849785757 } }, "TranslationalStiffnessX" : 0.93339260152233416, "TranslationalStiffnessY" : 0.13069834100580696, "TranslationalStiffnessZ" : 0.69965230193904238, "RotationalStiffnessX" : 0.61540855309712172, "RotationalStiffnessY" : 0.83056791165404387, "RotationalStiffnessZ" : 0.68512655919656462, "TranslationX" : "SpringRelative", "TranslationY" : "FixedNegative", "TranslationZ" : "FixedNegative", "RotationX" : "SpringRelative", "RotationY" : "FixedPositive", "RotationZ" : "Damped" }, "EndRelease" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "18a58e97-7987-4875-8963-1e505f89994f", "Name" : "dzm4bor2dzb", "Fragments" : [], "Tags" : [], "CustomData" : { "hcvbiqm15bp" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.071689596433047953, "Y" : 0.23024068038456175, "Z" : 0.15083264939060093 }, "ezjztjywlrv" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.45107934924358473, "Y" : 0.019849336715344962, "Z" : 0.3888378662005243 }, "31x5acvdoa2" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.20260418821247489, "Y" : 0.91362926313356929, "Z" : 0.029576994026814119 }, "ftkc2napnpo" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.96288963405549977, "Y" : 0.99357174522875424, "Z" : 0.016869892839747432 }, "tlpubsygzzj" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.27832952620383794, "Y" : 0.96716775231397145, "Z" : 0.58779250718084741 }, "c3me10jpdkk" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.3241669523176583, "Y" : 0.42042525504735545, "Z" : 0.97493301982755443 }, "0oa41zw0b0v" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.97288724825386297, "Y" : 0.25517451123109763, "Z" : 0.13226471428399195 }, "rerky2oxyre" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.17822117506443577, "Y" : 0.88289198972419458, "Z" : 0.54465721340135542 }, "ozpmp4qoakk" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.51404069760536808, "Y" : 0.3523834610136149, "Z" : 0.99174705613020209 } }, "TranslationalStiffnessX" : 0.51296734647497877, "TranslationalStiffnessY" : 0.15576532117825248, "TranslationalStiffnessZ" : 0.81365271742160095, "RotationalStiffnessX" : 0.64252130484325876, "RotationalStiffnessY" : 0.57539340042294629, "RotationalStiffnessZ" : 0.55286184491257273, "TranslationX" : "SpringRelativeNegative", "TranslationY" : "Damped", "TranslationZ" : "FixedPositive", "RotationX" : "Free", "RotationY" : "SpringPositive", "RotationZ" : "SpringPositive" } }, "FEAType" : "Flexural", "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint4DOF", "BHoM_Guid" : "8f448f83-7220-49fd-bbf0-69849e94ff47", "Name" : "olzkryit5yx", "Fragments" : [], "Tags" : [], "CustomData" : { "yeicrpg1w20" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.61050617304188481, "Y" : 0.0018246890985521903, "Z" : 0.98342683538022768 }, "qouoknrjnep" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.1571434299261977, "Y" : 0.7722569870633339, "Z" : 0.091275698082184276 }, "dh5huekita0" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.06250253741745955, "Y" : 0.11006209678485156, "Z" : 0.73279696178287124 } }, "TranslationX" : "SpringPositive", "TranslationY" : "FixedNegative", "TranslationZ" : "Friction", "RotationX" : "SpringPositive", "TranslationalStiffnessX" : 0.63782360294732432, "TranslationalStiffnessY" : 0.31971219848828025, "TranslationalStiffnessZ" : 0.36897204973221387, "RotationalStiffnessX" : 0.24453175638082053 }, "Offset" : { "_t" : "BH.oM.Structure.Offsets.Offset", "BHoM_Guid" : "1fa571c0-76f6-4928-bc25-c15163bb082e", "Name" : "frokcsann0f", "Fragments" : [], "Tags" : [], "CustomData" : { "2l2sf3m4csn" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.90713465349149647, "Y" : 0.80316835492996885, "Z" : 0.46024441647354719 }, "ncs1xrtdasl" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77813539690251243, "Y" : 0.42689437997848467, "Z" : 0.64717347810378922 }, "w2vqqznd1px" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.60893218666731019, "Y" : 0.089704847005058472, "Z" : 0.62384081195287444 }, "oqkc0wgj41w" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.87316400831246932, "Y" : 0.53954396701396623, "Z" : 0.13763933216111704 } }, "Start" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.83982727855435912, "Y" : 0.64267074486365106, "Z" : 0.57297461460017352 }, "End" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.24163400020526443, "Y" : 0.83719338841605628, "Z" : 0.85958074026721565 } } }], "Outputs" : [[2000.7262432699679, 2000.817325359591, 2000.7680226893947, 2000.895362439051, 2000.8964398032504, 2000.0865798835114]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "f94d78e4-f0c5-43fd-a8e3-5def7f762f7f", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "BHoM_Guid" : "728beb00-9be7-486a-b3a2-5355dce6bcb8" }], "Outputs" : [[3000.7787120751814, 3000.4051314348089, 3000.1643999787289, 3000.7788009561323, 3000.4051117688214, 3000.1648889798003, 3000.7788583765132, 3000.4050923871605, 3000.1653826759343]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "225f6117-bbb7-44e0-8e1f-743c75b59bf5", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Circle", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "Normal" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Radius" : 0.80214046118880644 }, "BHoM_Guid" : "32c6c230-8ed0-4c6d-b162-50c03ae989ab" }], "Outputs" : [[4000.7710938983464, 4001.1599801248626, 3999.8973554484319, 4000.5505632580807, 4000.2635726973858, 4000.9243060202639, 4000.9835767907457, 3999.7838044638934, 3999.7040071884289]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "42cf2b58-822b-488a-9dce-2a01a65ecd98", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Infinite" : true }, "BHoM_Guid" : "5d43c0ba-5fc6-42f8-b75d-38f42e9539d5" }], "Outputs" : [[2000.7710938983462, 2000.4041625947712, 2000.1659986703498, 2000.9850470526073, 2000.1090046335519, 2000.3066804079835]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "4152ee5e-2984-4721-94db-21218306e19c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.NurbsCurve", "ControlPoints" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Weights" : [0.38209498458639485, 0.70308829411076768, 0.73132192191263745], "Knots" : [0.33872517819456999, 0.73131695703198996, 0.81265016357072173, 0.92683620188703586] }, "BHoM_Guid" : "654cb62b-df1f-4928-aea9-a47bb9beaf7d" }], "Outputs" : [[6001.8562997145837, 6001.6181357901623, 6002.4371841724196, 6002.5537358226966, 6003.0491958759021, 6002.6926020936535, 6002.4820149403449, 6003.2361756280234, 6002.4995518780779]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "2086f50e-df47-4bce-8cb9-a0640edc25f6", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.PlanarSurface", "ExternalBoundary" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "InternalBoundaries" : [{ "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.70308829411076768, "Y" : 0.23534573532424202, "Z" : 0.73132192191263745 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.089001557831187531, "Y" : 0.082648985126357988, "Z" : 0.33872517819456999 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.32991219606712097, "Y" : 0.73131695703198996, "Z" : 0.89595341072229362 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.81265016357072173, "Y" : 0.6535485864866285, "Z" : 0.92683620188703586 } }, "Radius" : 0.099241426260788662, "StartAngle" : 0.69182913130700086, "EndAngle" : 0.92548005745070061 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.10141979861139311, "Y" : 0.038685026130958006, "Z" : 0.34105472003158865 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.84963962149323879, "Y" : 0.68709290525274958, "Z" : 0.74400214280188182 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.68564566256741322, "Y" : 0.093061322855326034, "Z" : 0.040521103907619184 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27162018756923273, "Y" : 0.26325112640077769, "Z" : 0.49977948493313951 } }, "Radius" : 0.96156990526317143, "StartAngle" : 0.55604546636158858, "EndAngle" : 0.017603008084745617 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34221245876616446, "Y" : 0.48565348167235661, "Z" : 0.642432012894392 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.62012774107052371, "Y" : 0.073345340822518493, "Z" : 0.89542187652337457 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.59537276280828411, "Y" : 0.43236872015165573, "Z" : 0.074250398703967407 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.43468171331783834, "Y" : 0.089093641885134231, "Z" : 0.29635446998120957 } }, "Radius" : 0.65313182149693916, "StartAngle" : 0.87530425930177058, "EndAngle" : 0.34630525267976581 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.085726595523639856, "Y" : 0.78522651120332376, "Z" : 0.92732379209591254 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.96887616439204483, "Y" : 0.16896769691676261, "Z" : 0.53245536309315611 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.59231587806358743, "Y" : 0.95908615130888586, "Z" : 0.54970007275682875 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.63826059905731147, "Y" : 0.04848045392356834, "Z" : 0.8110287975571252 } }, "Radius" : 0.07547405179379231, "StartAngle" : 0.83013271113398146, "EndAngle" : 0.76974705176881841 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.79504715548597604, "Y" : 0.16500800902257115, "Z" : 0.5846237431208714 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.61358794458843202, "Y" : 0.049397118412608798, "Z" : 0.30535231638017685 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.9067954886270666, "Y" : 0.20599792208801859, "Z" : 0.44331226332267387 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.90868599987993293, "Y" : 0.77538922278927136, "Z" : 0.25241119193491118 } }, "Radius" : 0.65490850091674757, "StartAngle" : 0.38929119258620365, "EndAngle" : 0.43992950135838682 }] }, "BHoM_Guid" : "313b0eae-58d1-4f49-8ece-29f10353d004" }], "Outputs" : [[10000.778712075182, 10000.405131434809, 10000.164399978728, 10000.778800956132, 10000.405111768821, 10000.1648889798, 10000.778858376512, 10000.40509238716, 10000.165382675934, 10000.720653675517, 10000.236287342963, 10000.762400354579, 10000.72228226317, 10000.235631057947, 10000.76143518093, 10000.723897868476, 10000.235170878588, 10000.76034310841, 10000.754330783582, 10000.856103825246, 10001.063081715265, 10000.842278036596, 10000.789595066704, 10001.050316597948, 10000.91437777102, 10000.705358374826, 10001.055502206224, 10000.850239797866, 10000.363035758963, 10001.127445112959, 10000.812373915058, 10000.400677466097, 10001.171669079082, 10000.779359926582, 10000.45192650311, 10001.204685668044, 10000.144606963835, 10000.819053089304, 10000.977460829932, 10000.145332461352, 10000.81857904457, 10000.976918217171, 10000.146047163445, 10000.818077904732, 10000.976385719803, 10001.232588971099, 10000.187132633697, 10000.687501933207, 10001.234073128291, 10000.187550619499, 10000.680874911099, 10001.23544807219, 10000.18810110609, 10000.674234026328]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "c3276912-ccc2-46a6-8269-9d10510c39ce", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Extrusion", "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Direction" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27940878331633695, "Y" : 0.70308829411076768, "Z" : 0.23534573532424202 }, "Capped" : true }, "BHoM_Guid" : "e7e5ab5e-a414-48f6-b766-4fde02b996c8" }], "Outputs" : [[12001.058120858497, 12001.10821972892, 12000.399745714054, 12001.058209739449, 12001.108200062932, 12000.400234715124, 12001.058267159829, 12001.108180681271, 12000.400728411259, 12000.778712075182, 12000.405131434809, 12000.164399978728, 12000.778800956132, 12000.405111768821, 12000.1648889798, 12000.778858376512, 12000.40509238716, 12000.165382675934]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "b9d9fcb5-8bc2-43ef-ae85-0c6d4847cd26", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Loft", "Curves" : [{ "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.10900463355193131, "Y" : 0.30668040798356777, "Z" : 0.80214046118880644 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.44554667894055444, "Y" : 0.22498315396950727, "Z" : 0.011206652974340437 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.76536734065290879, "Y" : 0.028743590707305627, "Z" : 0.0075611905230028508 } }, "Radius" : 0.51002241694835126, "StartAngle" : 0.38209498458639485, "EndAngle" : 0.27940878331633695 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.23534573532424202, "Y" : 0.73132192191263745, "Z" : 0.089001557831187531 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.082648985126357988, "Y" : 0.33872517819456999, "Z" : 0.32991219606712097 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.73131695703198996, "Y" : 0.89595341072229362, "Z" : 0.81265016357072173 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.6535485864866285, "Y" : 0.92683620188703586, "Z" : 0.099241426260788662 } }, "Radius" : 0.69182913130700086, "StartAngle" : 0.92548005745070061, "EndAngle" : 0.98014082944958514 }] }, "BHoM_Guid" : "64d4d724-e915-4874-9d6c-e023c107f78c" }], "Outputs" : [[]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "9241cfb4-9712-4d8b-becd-784873aab36c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.PolySurface", "Surfaces" : [{ "_t" : "BH.oM.Geometry.Extrusion", "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.10900463355193131, "Y" : 0.30668040798356777, "Z" : 0.80214046118880644 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.44554667894055444, "Y" : 0.22498315396950727, "Z" : 0.011206652974340437 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.76536734065290879, "Y" : 0.028743590707305627, "Z" : 0.0075611905230028508 } }, "Radius" : 0.51002241694835126, "StartAngle" : 0.38209498458639485, "EndAngle" : 0.27940878331633695 }, "Direction" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.70308829411076768, "Y" : 0.23534573532424202, "Z" : 0.73132192191263745 }, "Capped" : false }] }, "BHoM_Guid" : "5dbd5b62-b735-4464-b4ff-933174fc80da" }], "Outputs" : [[12001.168702396919, 12000.394432523502, 12002.153521924705, 12001.167862198594, 12000.416831767478, 12002.153419514583, 12001.167034652643, 12000.439196668336, 12002.152166945618, 12000.465614102808, 12000.159086788179, 12001.422200002791, 12000.464773904483, 12000.181486032154, 12001.422097592671, 12000.463946358532, 12000.203850933012, 12001.420845023704]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "ac83f20b-c070-47d0-9767-121dd681f76d", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.SurfaceTrim", "Curve3d" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Curve2d" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.27940878331633695, "Y" : 0.70308829411076768, "Z" : 0.23534573532424202 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.73132192191263745, "Y" : 0.089001557831187531, "Z" : 0.082648985126357988 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.33872517819456999, "Y" : 0.32991219606712097, "Z" : 0.73131695703198996 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.89595341072229362, "Y" : 0.81265016357072173, "Z" : 0.6535485864866285 } }, "Radius" : 0.92683620188703586, "StartAngle" : 0.099241426260788662, "EndAngle" : 0.69182913130700086 } }, "BHoM_Guid" : "ff740773-b696-42c4-982b-b489d7c25db4" }], "Outputs" : [[15000.778712075182, 15000.405131434809, 15000.164399978728, 15000.778800956132, 15000.405111768821, 15000.1648889798, 15000.778858376512, 15000.40509238716, 15000.165382675934, 15000.956179695089, 15000.813682085993, 15000.278434400903, 15000.933737578216, 15000.908165647621, 15000.191715537416, 15000.884193728323, 15001.011917450556, 15000.130626065018]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "aeeaafc8-7aa8-4fef-8c55-c13d8f3d259b", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Environment.Elements.Mesh", "BHoM_Guid" : "cfdd2d8c-d815-4384-8046-7085438e6df8", "Name" : "5m3u3xywz3j", "Fragments" : [], "Tags" : [], "CustomData" : { "z2ldki20cl1" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.37916821119336791, "Y" : 0.9100187881430698, "Z" : 0.23675364406628238 }, "zrt334ifzlr" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.89863010258350062, "Y" : 0.011517720302342306, "Z" : 0.82803786584550421 } }, "Mesh3D" : { "_t" : "BH.oM.Geometry.Mesh3D", "Vertices" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Faces" : [{ "_t" : "BH.oM.Geometry.Face", "A" : 820542731, "B" : 600025793, "C" : 1509870614, "D" : 505401118 }, { "_t" : "BH.oM.Geometry.Face", "A" : 191129390, "B" : 177487344, "C" : 727406781, "D" : 708481046 }, { "_t" : "BH.oM.Geometry.Face", "A" : 1924045298, "B" : 1745152937, "C" : 1403484902, "D" : 1990365587 }], "CellRelation" : [{ "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1987453289, "ToCell" : 2104836403 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 83075461, "ToCell" : 732409434 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1475520778, "ToCell" : 1597732435 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 199847669, "ToCell" : 87018408 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 565327489, "ToCell" : 1073268271 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1194098546, "ToCell" : 37802172 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 734895659, "ToCell" : 1042932910 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1331714183, "ToCell" : 157507920 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1278553272, "ToCell" : 928504756 }] }, "BounderyZones" : [{ "_t" : "BH.oM.Environment.Elements.BoundaryZone", "BHoM_Guid" : "ed522895-f105-4490-ab78-31b5d81ada3c", "Name" : "ddqzjdfkovv", "Fragments" : [], "Tags" : [], "CustomData" : { "2qs5405l3jx" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.92732379209591254, "Y" : 0.96887616439204483, "Z" : 0.16896769691676261 }, "gmttredrnxx" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.59231587806358743, "Y" : 0.95908615130888586, "Z" : 0.54970007275682875 }, "oxsus4a3jtm" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.04848045392356834, "Y" : 0.8110287975571252, "Z" : 0.07547405179379231 }, "wqq5dhhwwli" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.76974705176881841, "Y" : 0.33990794436070504, "Z" : 0.79504715548597604 } }, "FaceIndices" : [636416378, 1879701583, 1144939545] }, { "_t" : "BH.oM.Environment.Elements.BoundaryZone", "BHoM_Guid" : "b8012dcb-7dca-462e-bb5a-a0722ee0edaf", "Name" : "eb04wargvtd", "Fragments" : [], "Tags" : [], "CustomData" : { "4wt4vjuwcv4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.73009710373827119, "Y" : 0.41405288940949964, "Z" : 0.17634339405984775 }, "5duxgzkudrf" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.048726843692700771, "Y" : 0.31957288054729482, "Z" : 0.80975709567300835 }, "bhzricexkmh" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.68334586158550614, "Y" : 0.070427668313694958, "Z" : 0.43508474176520701 }, "bvi2xiv5sn4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.7843439652511589, "Y" : 0.35689466835786338, "Z" : 0.24411768756998595 }, "1mcbftm0czr" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.74918569752442921, "Y" : 0.50130731449523347, "Z" : 0.48812381247436804 } }, "FaceIndices" : [106079504, 1947328483, 952005836, 1665135676, 1406405296, 944741410] }, { "_t" : "BH.oM.Environment.Elements.BoundaryZone", "BHoM_Guid" : "7c237f40-5fb6-4977-9177-c1e85b2c7d3d", "Name" : "4ufz5m1blxv", "Fragments" : [], "Tags" : [], "CustomData" : { "wzd4zctodln" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.88571386266765828, "Y" : 0.3453769480555211, "Z" : 0.41607982172448182 }, "nskfyzizwet" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.71118627009502899, "Y" : 0.74632031179327529, "Z" : 0.84543512847527635 }, "e0csx4kbchx" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.7202503409796629, "Y" : 0.3660512568271026, "Z" : 0.23492464806648189 }, "rb2gyllwt4g" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.35905649948821239, "Y" : 0.65896829807151491, "Z" : 0.55179133152206961 }, "t4cb4rtfij2" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.5874765303858912, "Y" : 0.90572280339231848, "Z" : 0.88798387809097012 }, "bp43wpw12k3" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.87453632842494933, "Y" : 0.19259762679813319, "Z" : 0.24634019948837357 }, "jsrzh4jdx2w" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.29791237148359062, "Y" : 0.9073958042577821, "Z" : 0.52316294262332974 } }, "FaceIndices" : [1675841003, 1549035510, 558950688, 729939755, 344475447] }] }, "BHoM_Guid" : "c3749dcd-e72f-4726-85b5-81e454c159f9" }], "Outputs" : [[]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "de51757b-87a4-41b4-a34c-8f07340d2f62", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Mesh3D", "Vertices" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Faces" : [{ "_t" : "BH.oM.Geometry.Face", "A" : 820542731, "B" : 600025793, "C" : 1509870614, "D" : 505401118 }, { "_t" : "BH.oM.Geometry.Face", "A" : 191129390, "B" : 177487344, "C" : 727406781, "D" : 708481046 }, { "_t" : "BH.oM.Geometry.Face", "A" : 1924045298, "B" : 1745152937, "C" : 1403484902, "D" : 1990365587 }], "CellRelation" : [{ "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1987453289, "ToCell" : 2104836403 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 83075461, "ToCell" : 732409434 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1475520778, "ToCell" : 1597732435 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 199847669, "ToCell" : 87018408 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 565327489, "ToCell" : 1073268271 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1194098546, "ToCell" : 37802172 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 734895659, "ToCell" : 1042932910 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1331714183, "ToCell" : 157507920 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1278553272, "ToCell" : 928504756 }] }, "BHoM_Guid" : "e3988550-28f4-471d-bb2a-6480d783afba" }], "Outputs" : [[14000.40416259477, 14000.165998670349, 14000.985047052607, 14000.306680407984, 14000.802140461188, 14000.44554667894, 14000.011206652975, 14000.765367340653, 14000.028743590707]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "59e2fd46-fe4c-4224-b44a-bc7971fd024f", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "BHoM_Guid" : "52fc0951-d42e-420a-9080-208ada1b7c5b" }], "Outputs" : [[0.77109389834622566, 0.4041625947710884, 0.16599867034982829]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "111bb10c-509f-495e-ab54-5e6b3776dc01", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "_t" : "BH.oM.Structure.Elements.Panel", "BHoM_Guid" : "97f1df34-f916-4452-94b3-91d4596c3c03", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "ExternalEdges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "c06e8974-894e-4953-9050-1a4fa6a2340a", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 19.190295885418404, "Y" : -29.12686392361227, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -8.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "93387567-a13f-486a-a39a-a0022b17575e", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -8.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : -13.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "df307a33-d77b-410b-9a23-6829f749847a", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : -13.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 18.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "30624894-6dc2-42cd-aa42-411b616c64d2", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 18.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 14.0, "Y" : 12.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "d6c6fc3e-cbf9-4a34-965b-6786b621b440", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 14.0, "Y" : 12.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 21.0, "Y" : -5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "d4f981d6-7519-4248-9e61-1ccf845dc5ab", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 21.0, "Y" : -5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -12.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "cee6ce99-9be8-4bcb-8f83-a7b9e9a30a04", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 9.1850339211086016, "Y" : -23.444898236674195, "Z" : 0.0 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.86956263782751309, "Y" : -0.49382265935703812, "Z" : 0.0 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : -0.49382265935703817, "Y" : -0.8695626378275132, "Z" : 0.0 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.0, "Y" : 0.0, "Z" : -1.0 } }, "Radius" : 11.506085391739717, "StartAngle" : -2.1904515725762264, "EndAngle" : 0.0 }, "Release" : null, "Support" : null }], "Openings" : [{ "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "2a5f96f2-5ee5-47ff-936a-90ee4e4619a3", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "0b0ff473-723a-40d8-9399-2da07a3fa219", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Circle", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 2.0, "Z" : 0.0 }, "Normal" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.0, "Y" : 0.0, "Z" : 1.0 }, "Radius" : 3.6055512754639896 }, "Release" : null, "Support" : null }] }, { "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "0b8a9348-cd26-47de-b788-7dadb60044c1", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "2b11d441-d80f-40d1-ac6c-8b2cb00d4f78", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 7.0, "Y" : -9.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -1.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "52fad424-1137-4e07-a036-ed32f07e043c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -1.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : -2.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "b4eb4771-4768-4227-9985-83d20ba2207b", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : -2.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.69719224062738, "Y" : -5.4037436791634805, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "1ef9e5c3-b5b4-4171-bd44-e329c891c9e8", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.69719224062738, "Y" : -5.4037436791634805, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 7.0, "Y" : -9.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }] }, { "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "ff7f3bbc-83bb-4aaf-9520-0b95ecfc20c4", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "9623d95d-35d9-4c5d-98b7-9ee1f1f3a7ec", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "bde5adf7-8981-4bda-8af1-c90d8f26b8e2", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 7.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "3e9178ec-9eb9-41ef-9d20-9a58a61c956c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 7.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 7.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "a4a37868-8191-4ca0-90f6-81a4a8b72782", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 7.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }] }], "Property" : null, "OrientationAngle" : 0.0 }], "Outputs" : [[9019.1902958854189, 8970.8731360763886, 9000.0, 8997.0, 8992.0, 9000.0, 8987.0, 9005.0, 9000.0, 9002.0, 9018.0, 9000.0, 9014.0, 9012.0, 9000.0, 9021.0, 8995.0, 9000.0, 10008.0, 9988.0, 10000.0, 10018.817347903117, 9982.8486324412534, 10000.0, 11002.0, 11005.605551275465, 11000.0, 10998.84043133207, 11000.263012425883, 11000.0, 11005.044267628704, 11000.068049015936, 11000.0, 9007.0, 8991.0, 9000.0, 9008.0, 8999.0, 9000.0, 9012.0, 8998.0, 9000.0, 9012.6971922406283, 8994.5962563208359, 9000.0, 9006.0, 9005.0, 9000.0, 9012.0, 9005.0, 9000.0, 9012.0, 9007.0, 9000.0, 9006.0, 9007.0, 9000.0]] }] }], "_bhomVersion" : "6.0" } \ No newline at end of file From 088b886a150f5d61a6d16803f879d71475b345eb Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Mon, 7 Nov 2022 09:26:58 +0000 Subject: [PATCH 25/44] Update Geometry_Engine/Query/GeometryHash.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Isak Näslund --- Geometry_Engine/Query/GeometryHash.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 02357eecc..063f9b4d8 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -74,7 +74,7 @@ private static double[] GeometryHash(this ICurve curve, double translationFactor /***************************************************/ [Description("The GeometryHash for an Arc is calculated as the GeometryHash of the start, end and middle point of the Arc.")] - private static double[] GeometryHash(this Arc curve, double translationFactor, bool skipLastPoint = false) + private static double[] GeometryHash(this Arc curve, double translationFactor, bool skipEndPoint= false) { translationFactor += (int)TypeTranslationFactor.Arc; From d26ecf35792ad94fb5c36786225a79061cc18353 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Mon, 7 Nov 2022 09:27:07 +0000 Subject: [PATCH 26/44] Update Geometry_Engine/Query/GeometryHash.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Isak Näslund --- Geometry_Engine/Query/GeometryHash.cs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 063f9b4d8..2618a3a2f 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -64,11 +64,19 @@ public static double[] IGeometryHash(this IGeometry igeometry) "The GeometryHashes are then calculated for the individual parts and concatenated.")] private static double[] GeometryHash(this ICurve curve, double translationFactor) { - IEnumerable subParts = curve.ISubParts(); + List subParts = curve.ISubParts().ToList(); - bool isMultipleCurves = subParts.Count() != 1; + List hashes = new List(); - return subParts.SelectMany(c => (double[])GeometryHash(c as dynamic, translationFactor, isMultipleCurves)).ToArray(); + //Add hash ignoring endpoint for all but last curve + for (int i = 0; i < subParts.Count - 1; i++) + { + hashes.AddRange(GeometryHash(subParts[i] as dynamic, translationFactor, true)); + } + //Include endpoint for hasing for last curve + hashes.AddRange(GeometryHash(subParts.Last() as dynamic, translationFactor, false)); + + return hashes.ToArray(); } /***************************************************/ From ffb00af58b69e90c9d3db4b0e78a3ceaaecf8e34 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Mon, 7 Nov 2022 09:27:19 +0000 Subject: [PATCH 27/44] Update Geometry_Engine/Query/GeometryHash.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Isak Näslund --- Geometry_Engine/Query/GeometryHash.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 2618a3a2f..f299d579f 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -98,7 +98,7 @@ private static double[] GeometryHash(this Arc curve, double translationFactor, b /***************************************************/ [Description("The GeometryHash for an Circle is calculated as the GeometryHash of the start, 1/3rd and 2/3rd points of the Circle.")] - private static double[] GeometryHash(this Circle curve, double translationFactor, bool skipLastPoint = false) + private static double[] GeometryHash(this Circle curve, double translationFactor, bool skipEndPoint = false) { translationFactor += (int)TypeTranslationFactor.Circle; From 2754dcb680b5848c89f367a9869dd08c037555f4 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Mon, 7 Nov 2022 09:28:36 +0000 Subject: [PATCH 28/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index f299d579f..42b11d230 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -89,7 +89,7 @@ private static double[] GeometryHash(this Arc curve, double translationFactor, b IEnumerable hash = curve.StartPoint().ToDoubleArray(translationFactor) .Concat(curve.PointAtParameter(0.5).ToDoubleArray(translationFactor)); - if (!skipLastPoint) + if (!skipEndPoint) hash = hash.Concat(curve.EndPoint().ToDoubleArray(translationFactor)); return hash.ToArray(); @@ -105,7 +105,7 @@ private static double[] GeometryHash(this Circle curve, double translationFactor IEnumerable hash = curve.StartPoint().ToDoubleArray(translationFactor) .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)); - if (!skipLastPoint) + if (!skipEndPoint) hash = hash.Concat(curve.PointAtParameter(0.66).ToDoubleArray(translationFactor)); return hash.ToArray(); @@ -114,14 +114,14 @@ private static double[] GeometryHash(this Circle curve, double translationFactor /***************************************************/ [Description("The GeometryHash for an Ellipse is calculated as the GeometryHash of the start, 1/3rd and 2/3rd points of the Ellipse.")] - private static double[] GeometryHash(this Ellipse curve, double translationFactor, bool skipLastPoint = false) + private static double[] GeometryHash(this Ellipse curve, double translationFactor, bool skipEndPoint = false) { translationFactor += (int)TypeTranslationFactor.Ellipse; IEnumerable hash = curve.StartPoint().ToDoubleArray(translationFactor) .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)); - if (!skipLastPoint) + if (!skipEndPoint) hash = hash.Concat(curve.PointAtParameter(0.66).ToDoubleArray(translationFactor)); return hash.ToArray(); @@ -130,11 +130,11 @@ private static double[] GeometryHash(this Ellipse curve, double translationFacto /***************************************************/ [Description("The GeometryHash for a Line is calculated as the GeometryHash of the start and end point of the Line.")] - private static double[] GeometryHash(this Line curve, double translationFactor, bool skipLastPoint = false) + private static double[] GeometryHash(this Line curve, double translationFactor, bool skipEndPoint = false) { translationFactor += (int)TypeTranslationFactor.Line; - if (skipLastPoint) + if (skipEndPoint) return curve.StartPoint().ToDoubleArray(translationFactor); return curve.StartPoint().ToDoubleArray(translationFactor) @@ -147,7 +147,7 @@ private static double[] GeometryHash(this Line curve, double translationFactor, [Description("The GeometryHash for a NurbsCurve is obtained by getting moving the control points " + "by a translation factor composed by the weights and a subarray of the knot vector. " + "The subarray is made by picking as many elements from the knot vector as the curve degree value.")] - private static double[] GeometryHash(this NurbsCurve curve, double translationFactor, bool skipLastPoint = false) + private static double[] GeometryHash(this NurbsCurve curve, double translationFactor, bool skipEndPoint = false) { int curveDegree = curve.Degree(); @@ -159,7 +159,7 @@ private static double[] GeometryHash(this NurbsCurve curve, double translationFa List concatenated = new List(); int controlPointsCount = curve.ControlPoints.Count(); - if (skipLastPoint) + if (skipEndPoint) controlPointsCount--; for (int i = 0; i < controlPointsCount; i++) From c63d050f25b4b51dcc5c76be521a971e47631ebb Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Mon, 7 Nov 2022 10:59:06 +0000 Subject: [PATCH 29/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 42b11d230..c780db140 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -105,9 +105,6 @@ private static double[] GeometryHash(this Circle curve, double translationFactor IEnumerable hash = curve.StartPoint().ToDoubleArray(translationFactor) .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)); - if (!skipEndPoint) - hash = hash.Concat(curve.PointAtParameter(0.66).ToDoubleArray(translationFactor)); - return hash.ToArray(); } @@ -121,9 +118,6 @@ private static double[] GeometryHash(this Ellipse curve, double translationFacto IEnumerable hash = curve.StartPoint().ToDoubleArray(translationFactor) .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)); - if (!skipEndPoint) - hash = hash.Concat(curve.PointAtParameter(0.66).ToDoubleArray(translationFactor)); - return hash.ToArray(); } From f66beae5692251ee4b7c9abdd5593e1d08acd92f Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Mon, 7 Nov 2022 11:01:12 +0000 Subject: [PATCH 30/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index c780db140..e4c3e7332 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -103,7 +103,8 @@ private static double[] GeometryHash(this Circle curve, double translationFactor translationFactor += (int)TypeTranslationFactor.Circle; IEnumerable hash = curve.StartPoint().ToDoubleArray(translationFactor) - .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)); + .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)) + .Concat(curve.PointAtParameter(0.66).ToDoubleArray(translationFactor)); return hash.ToArray(); } @@ -116,7 +117,8 @@ private static double[] GeometryHash(this Ellipse curve, double translationFacto translationFactor += (int)TypeTranslationFactor.Ellipse; IEnumerable hash = curve.StartPoint().ToDoubleArray(translationFactor) - .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)); + .Concat(curve.PointAtParameter(0.33).ToDoubleArray(translationFactor)) + .Concat(curve.PointAtParameter(0.66).ToDoubleArray(translationFactor)); return hash.ToArray(); } From 45ea50e1107655f39bd78ee3425d5e9bffcabe0c Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Mon, 7 Nov 2022 11:06:50 +0000 Subject: [PATCH 31/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index e4c3e7332..5039a8166 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -100,6 +100,8 @@ private static double[] GeometryHash(this Arc curve, double translationFactor, b [Description("The GeometryHash for an Circle is calculated as the GeometryHash of the start, 1/3rd and 2/3rd points of the Circle.")] private static double[] GeometryHash(this Circle curve, double translationFactor, bool skipEndPoint = false) { + // The input `skipEndPoint` is not used here because Ellipses cannot be part of Polycurves. + translationFactor += (int)TypeTranslationFactor.Circle; IEnumerable hash = curve.StartPoint().ToDoubleArray(translationFactor) @@ -114,6 +116,8 @@ private static double[] GeometryHash(this Circle curve, double translationFactor [Description("The GeometryHash for an Ellipse is calculated as the GeometryHash of the start, 1/3rd and 2/3rd points of the Ellipse.")] private static double[] GeometryHash(this Ellipse curve, double translationFactor, bool skipEndPoint = false) { + // The input `skipEndPoint` is not used here because Ellipses cannot be part of Polycurves. + translationFactor += (int)TypeTranslationFactor.Ellipse; IEnumerable hash = curve.StartPoint().ToDoubleArray(translationFactor) @@ -145,6 +149,9 @@ private static double[] GeometryHash(this Line curve, double translationFactor, "The subarray is made by picking as many elements from the knot vector as the curve degree value.")] private static double[] GeometryHash(this NurbsCurve curve, double translationFactor, bool skipEndPoint = false) { + // The input `skipEndPoint` is not used here because Nurbs may well extend or end before the last ControlPoint. + // Also consider complex situations like Periodic curves. + int curveDegree = curve.Degree(); if (curveDegree == 1) @@ -155,8 +162,6 @@ private static double[] GeometryHash(this NurbsCurve curve, double translationFa List concatenated = new List(); int controlPointsCount = curve.ControlPoints.Count(); - if (skipEndPoint) - controlPointsCount--; for (int i = 0; i < controlPointsCount; i++) { From 257bee7015eae39cc145a90c9f729418dbe01233 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Mon, 7 Nov 2022 11:10:59 +0000 Subject: [PATCH 32/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 5039a8166..00b0fdb0c 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -277,8 +277,7 @@ private static double[] GeometryHash(this SurfaceTrim obj, double translationFac { translationFactor += (int)TypeTranslationFactor.SurfaceTrim; - return obj.Curve3d.GeometryHash(translationFactor) - .Concat(obj.Curve2d.GeometryHash(translationFactor)).ToArray(); + return obj.Curve3d.GeometryHash(translationFactor).ToArray(); } From 0904b2de8652f7dfab68bb161eaaa6b0c9298ad4 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Mon, 7 Nov 2022 11:11:58 +0000 Subject: [PATCH 33/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 00b0fdb0c..68cd54648 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -277,6 +277,9 @@ private static double[] GeometryHash(this SurfaceTrim obj, double translationFac { translationFactor += (int)TypeTranslationFactor.SurfaceTrim; + // We only consider the Curve3D in order to avoid being redundant with the Curve2D, + // and allow distancing comparisons. + return obj.Curve3d.GeometryHash(translationFactor).ToArray(); } From 8ce75f1a80fd7126b670762dd528c4ffa094f598 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Mon, 7 Nov 2022 11:31:33 +0000 Subject: [PATCH 34/44] Update GeometryHash.json --- .ci/Datasets/BHoM_Engine/Query/GeometryHash.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/Datasets/BHoM_Engine/Query/GeometryHash.json b/.ci/Datasets/BHoM_Engine/Query/GeometryHash.json index 966a0a0e7..4de15eeaf 100644 --- a/.ci/Datasets/BHoM_Engine/Query/GeometryHash.json +++ b/.ci/Datasets/BHoM_Engine/Query/GeometryHash.json @@ -1 +1 @@ -{ "_t" : "BH.oM.Data.Library.Dataset", "BHoM_Guid" : "8afaad02-d2a6-41f1-93e3-26d9e9140fb5", "Name" : "GeometryHash", "Fragments" : [], "Tags" : [], "CustomData" : { }, "SourceInformation" : { "_t" : "BH.oM.Data.Library.Source", "BHoM_Guid" : "8beedef0-2f90-4a2e-af19-8e48f45930d9", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "SourceLink" : "", "Title" : "GeometryHash", "Author" : "Alessio Lombardi", "ItemReference" : "", "Version" : "", "Publisher" : "", "Schema" : "", "Language" : "", "Location" : "", "Copyright" : "", "Contributors" : "", "Confidence" : "Undefined" }, "TimeOfCreation" : { "$date" : 1667581766017 }, "Data" : [{ "_t" : "BH.oM.Test.UnitTests.UnitTest", "BHoM_Guid" : "662623df-a803-4bca-9240-743563a35cec", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Method" : { "_t" : "System.Reflection.MethodBase", "TypeName" : "{ \"_t\" : \"System.Type\", \"Name\" : \"BH.Engine.Base.Query, BHoM_Engine, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null\", \"_bhomVersion\" : \"6.0\" }", "MethodName" : "GeometryHash", "Parameters" : ["{ \"_t\" : \"System.Type\", \"Name\" : \"BH.oM.Base.IBHoMObject\", \"_bhomVersion\" : \"6.0\" }"], "_bhomVersion" : "6.0" }, "Data" : [{ "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "626867bb-e2ac-4b0d-ab23-517b7369d406", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "_t" : "BH.oM.Structure.Elements.Bar", "BHoM_Guid" : "2d595478-ee14-4c2c-8217-1b3632d99878", "Name" : "kukf40hob25", "Fragments" : [], "Tags" : [], "CustomData" : { "3xedng5oioh" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.67219245884203938, "Y" : 0.37923656794207011, "Z" : 0.86616781953078126 }, "1zp2pvzll1f" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.78663488607231291, "Y" : 0.51996000880373638, "Z" : 0.82963650712260817 }, "so5eys3xbfs" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.52251069877413603, "Y" : 0.16290920375050474, "Z" : 0.63418533961949186 }, "dwupgmadnpp" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.31461000783117954, "Y" : 0.24995057156772846, "Z" : 0.80063021453126815 }, "1qavhmmt43s" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.92160075852721968, "Y" : 0.33739710288932412, "Z" : 0.19225228260841792 } }, "StartNode" : { "_t" : "BH.oM.Structure.Elements.Node", "BHoM_Guid" : "be665092-48c1-4569-b707-e54cf7d175b7", "Name" : "zum25tljmnf", "Fragments" : [], "Tags" : [], "CustomData" : { "wwm1vb04a2s" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34314184465591879, "Y" : 0.95745516566441169, "Z" : 0.50512921274878508 }, "knnxwn2txye" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.1189577291342233, "Y" : 0.27345148347013232, "Z" : 0.90709795006881377 }, "e1kh1cm0lz4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.3371603392703274, "Y" : 0.45720878776964208, "Z" : 0.14682504029331031 }, "c5bf10qef1g" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.41007327959410533, "Y" : 0.71872683275431715, "Z" : 0.61983028362497239 }, "gwljh1c5cei" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.19491343674944409, "Y" : 0.87819148687561577, "Z" : 0.82542318423531169 }, "cvpnu4tt4gy" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.85821920766412241, "Y" : 0.67974901137861843, "Z" : 0.62486613570939109 } }, "Position" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.72624326996795985, "Y" : 0.81732535959096875, "Z" : 0.76802268939466345 }, "Orientation" : { "_t" : "BH.oM.Geometry.Basis", "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.5581611914365372, "Y" : 0.2060331540210327, "Z" : 0.55888479461841511 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.90602706601192573, "Y" : 0.44217787331071584, "Z" : 0.97754975314137982 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27370445768987034, "Y" : 0.29190628476995334, "Z" : 0.46731470034798361 } }, "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "e056100b-0985-48b2-ad90-17c515eb2cb2", "Name" : "fcp3mpxseb2", "Fragments" : [], "Tags" : [], "CustomData" : { "f25lpoud5r2" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.5262841426424143, "Y" : 0.93401865890902402, "Z" : 0.68762028249335483 }, "cvgygnuze3w" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.081109949891041005, "Y" : 0.18712457417842213, "Z" : 0.45332718521977178 }, "npjtzsurk0x" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.98854377911823976, "Y" : 0.64269747289023249, "Z" : 0.76296358823914245 } }, "TranslationalStiffnessX" : 0.63265907281667877, "TranslationalStiffnessY" : 0.46951187842968473, "TranslationalStiffnessZ" : 0.98215125314060192, "RotationalStiffnessX" : 0.030366990729406004, "RotationalStiffnessY" : 0.86237015382497118, "RotationalStiffnessZ" : 0.99534708121574811, "TranslationX" : "SpringRelativeNegative", "TranslationY" : "Spring", "TranslationZ" : "NonLinear", "RotationX" : "Friction", "RotationY" : "Damped", "RotationZ" : "Free" } }, "EndNode" : { "_t" : "BH.oM.Structure.Elements.Node", "BHoM_Guid" : "787278ed-9e8f-42df-bf4d-dcb90d76648f", "Name" : "t5tmtr2kf3a", "Fragments" : [], "Tags" : [], "CustomData" : { "eltf40rxh45" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.62462275923445021, "Y" : 0.6930450455718884, "Z" : 0.63039438223018984 }, "oauyop5nptc" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.22134204172591773, "Y" : 0.92870763266864587, "Z" : 0.066521596194487803 }, "zko03ghhxi4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.67850547222350976, "Y" : 0.093978040429753273, "Z" : 0.149097432917495 } }, "Position" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.89536243905097357, "Y" : 0.89643980325033878, "Z" : 0.086579883511448227 }, "Orientation" : { "_t" : "BH.oM.Geometry.Basis", "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.83857909955018162, "Y" : 0.17014283461968546, "Z" : 0.64411529369843901 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.82681440553945229, "Y" : 0.21918766490145944, "Z" : 0.99997269781305109 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.48136564692545947, "Y" : 0.65220523655982932, "Z" : 0.71972598355250716 } }, "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "665a417c-8680-44a7-b6ca-514c73806cbe", "Name" : "x45vs30bajz", "Fragments" : [], "Tags" : [], "CustomData" : { "2cld3nvjdad" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.80920381322931678, "Y" : 0.7936303423687957, "Z" : 0.76450598601461672 }, "ygvxfckzx2m" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.29499680190114158, "Y" : 0.52278529923538919, "Z" : 0.66339283327730036 }, "p3j1awnvzr1" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.28672242923021429, "Y" : 0.82061007331153846, "Z" : 0.2225179258838845 } }, "TranslationalStiffnessX" : 0.80946258027547158, "TranslationalStiffnessY" : 0.10093539631969081, "TranslationalStiffnessZ" : 0.72909405395812077, "RotationalStiffnessX" : 0.71845069188552479, "RotationalStiffnessY" : 0.12552724831063639, "RotationalStiffnessZ" : 0.90517638991827909, "TranslationX" : "FixedNegative", "TranslationY" : "SpringPositive", "TranslationZ" : "SpringRelative", "RotationX" : "Spring", "RotationY" : "SpringRelativeNegative", "RotationZ" : "SpringPositive" } }, "SectionProperty" : { "_t" : "BH.oM.Structure.SectionProperties.AluminiumSection", "BHoM_Guid" : "16788a41-9193-4763-b5ef-2e2d35a47127", "Name" : null, "Fragments" : [], "Tags" : [], "CustomData" : { }, "Material" : null, "SectionProfile" : { "_t" : "BH.oM.Spatial.ShapeProfiles.AngleProfile", "BHoM_Guid" : "03decf14-9a59-496f-89b6-161565a5521a", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Shape" : "Angle", "Height" : 0.6098702427045769, "Width" : 0.95304281774584332, "WebThickness" : 0.49062520800653159, "FlangeThickness" : 0.14805626457000909, "RootRadius" : 0.6776115413185263, "ToeRadius" : 0.5698617443302002, "MirrorAboutLocalZ" : false, "MirrorAboutLocalY" : true, "Edges" : [] }, "Area" : 0.36093902139036871, "Rgy" : 0.8504849513296433, "Rgz" : 0.062308419524835616, "J" : 0.28164726089762859, "Iy" : 0.70497589591190957, "Iz" : 0.95858034769007017, "Iw" : 0.98881240328252895, "Wely" : 0.38713695359748646, "Welz" : 0.52274015104525728, "Wply" : 0.28032532300815233, "Wplz" : 0.50657612807423624, "CentreZ" : 0.53157909192684061, "CentreY" : 0.057008397792004235, "Vz" : 0.28055363068382888, "Vpz" : 0.4960787578001985, "Vy" : 0.84641548890919216, "Vpy" : 0.61315786680819362, "Asy" : 0.10415865299485561, "Asz" : 0.74232903762828983 }, "OrientationAngle" : 0.40187614522961718, "Release" : { "_t" : "BH.oM.Structure.Constraints.BarRelease", "BHoM_Guid" : "839a36cf-4f44-4a46-81f9-b38f19a4c1f8", "Name" : "sk4lmodwje3", "Fragments" : [], "Tags" : [], "CustomData" : { "fnui4ziduaj" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.12118609627764025, "Y" : 0.19491076525063755, "Z" : 0.49651680909866319 }, "mtici05zjv1" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.26166441490019876, "Y" : 0.31036315826250388, "Z" : 0.24213605804468322 }, "zwqnvnegipn" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.13305996969950384, "Y" : 0.61250376636744652, "Z" : 0.55929009968381849 }, "lnyh03ydgzz" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34102778664837952, "Y" : 0.023311249456978985, "Z" : 0.097285922196361202 }, "0dgsdhhaaio" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.71087234267539923, "Y" : 0.89213904454006765, "Z" : 0.65126434138569256 } }, "StartRelease" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "1ed64b43-fd17-47d0-9c2d-51b923824127", "Name" : "huwoisbafu2", "Fragments" : [], "Tags" : [], "CustomData" : { "x041ffah355" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.063436652563249998, "Y" : 0.2636837378440815, "Z" : 0.84256009424224498 }, "y15gyksfsnh" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.64599011449422228, "Y" : 0.51636614581400819, "Z" : 0.9701272849785757 } }, "TranslationalStiffnessX" : 0.93339260152233416, "TranslationalStiffnessY" : 0.13069834100580696, "TranslationalStiffnessZ" : 0.69965230193904238, "RotationalStiffnessX" : 0.61540855309712172, "RotationalStiffnessY" : 0.83056791165404387, "RotationalStiffnessZ" : 0.68512655919656462, "TranslationX" : "SpringRelative", "TranslationY" : "FixedNegative", "TranslationZ" : "FixedNegative", "RotationX" : "SpringRelative", "RotationY" : "FixedPositive", "RotationZ" : "Damped" }, "EndRelease" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "18a58e97-7987-4875-8963-1e505f89994f", "Name" : "dzm4bor2dzb", "Fragments" : [], "Tags" : [], "CustomData" : { "hcvbiqm15bp" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.071689596433047953, "Y" : 0.23024068038456175, "Z" : 0.15083264939060093 }, "ezjztjywlrv" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.45107934924358473, "Y" : 0.019849336715344962, "Z" : 0.3888378662005243 }, "31x5acvdoa2" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.20260418821247489, "Y" : 0.91362926313356929, "Z" : 0.029576994026814119 }, "ftkc2napnpo" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.96288963405549977, "Y" : 0.99357174522875424, "Z" : 0.016869892839747432 }, "tlpubsygzzj" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.27832952620383794, "Y" : 0.96716775231397145, "Z" : 0.58779250718084741 }, "c3me10jpdkk" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.3241669523176583, "Y" : 0.42042525504735545, "Z" : 0.97493301982755443 }, "0oa41zw0b0v" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.97288724825386297, "Y" : 0.25517451123109763, "Z" : 0.13226471428399195 }, "rerky2oxyre" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.17822117506443577, "Y" : 0.88289198972419458, "Z" : 0.54465721340135542 }, "ozpmp4qoakk" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.51404069760536808, "Y" : 0.3523834610136149, "Z" : 0.99174705613020209 } }, "TranslationalStiffnessX" : 0.51296734647497877, "TranslationalStiffnessY" : 0.15576532117825248, "TranslationalStiffnessZ" : 0.81365271742160095, "RotationalStiffnessX" : 0.64252130484325876, "RotationalStiffnessY" : 0.57539340042294629, "RotationalStiffnessZ" : 0.55286184491257273, "TranslationX" : "SpringRelativeNegative", "TranslationY" : "Damped", "TranslationZ" : "FixedPositive", "RotationX" : "Free", "RotationY" : "SpringPositive", "RotationZ" : "SpringPositive" } }, "FEAType" : "Flexural", "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint4DOF", "BHoM_Guid" : "8f448f83-7220-49fd-bbf0-69849e94ff47", "Name" : "olzkryit5yx", "Fragments" : [], "Tags" : [], "CustomData" : { "yeicrpg1w20" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.61050617304188481, "Y" : 0.0018246890985521903, "Z" : 0.98342683538022768 }, "qouoknrjnep" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.1571434299261977, "Y" : 0.7722569870633339, "Z" : 0.091275698082184276 }, "dh5huekita0" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.06250253741745955, "Y" : 0.11006209678485156, "Z" : 0.73279696178287124 } }, "TranslationX" : "SpringPositive", "TranslationY" : "FixedNegative", "TranslationZ" : "Friction", "RotationX" : "SpringPositive", "TranslationalStiffnessX" : 0.63782360294732432, "TranslationalStiffnessY" : 0.31971219848828025, "TranslationalStiffnessZ" : 0.36897204973221387, "RotationalStiffnessX" : 0.24453175638082053 }, "Offset" : { "_t" : "BH.oM.Structure.Offsets.Offset", "BHoM_Guid" : "1fa571c0-76f6-4928-bc25-c15163bb082e", "Name" : "frokcsann0f", "Fragments" : [], "Tags" : [], "CustomData" : { "2l2sf3m4csn" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.90713465349149647, "Y" : 0.80316835492996885, "Z" : 0.46024441647354719 }, "ncs1xrtdasl" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77813539690251243, "Y" : 0.42689437997848467, "Z" : 0.64717347810378922 }, "w2vqqznd1px" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.60893218666731019, "Y" : 0.089704847005058472, "Z" : 0.62384081195287444 }, "oqkc0wgj41w" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.87316400831246932, "Y" : 0.53954396701396623, "Z" : 0.13763933216111704 } }, "Start" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.83982727855435912, "Y" : 0.64267074486365106, "Z" : 0.57297461460017352 }, "End" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.24163400020526443, "Y" : 0.83719338841605628, "Z" : 0.85958074026721565 } } }], "Outputs" : [[2000.7262432699679, 2000.817325359591, 2000.7680226893947, 2000.895362439051, 2000.8964398032504, 2000.0865798835114]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "f94d78e4-f0c5-43fd-a8e3-5def7f762f7f", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "BHoM_Guid" : "728beb00-9be7-486a-b3a2-5355dce6bcb8" }], "Outputs" : [[3000.7787120751814, 3000.4051314348089, 3000.1643999787289, 3000.7788009561323, 3000.4051117688214, 3000.1648889798003, 3000.7788583765132, 3000.4050923871605, 3000.1653826759343]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "225f6117-bbb7-44e0-8e1f-743c75b59bf5", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Circle", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "Normal" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Radius" : 0.80214046118880644 }, "BHoM_Guid" : "32c6c230-8ed0-4c6d-b162-50c03ae989ab" }], "Outputs" : [[4000.7710938983464, 4001.1599801248626, 3999.8973554484319, 4000.5505632580807, 4000.2635726973858, 4000.9243060202639, 4000.9835767907457, 3999.7838044638934, 3999.7040071884289]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "42cf2b58-822b-488a-9dce-2a01a65ecd98", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Infinite" : true }, "BHoM_Guid" : "5d43c0ba-5fc6-42f8-b75d-38f42e9539d5" }], "Outputs" : [[2000.7710938983462, 2000.4041625947712, 2000.1659986703498, 2000.9850470526073, 2000.1090046335519, 2000.3066804079835]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "4152ee5e-2984-4721-94db-21218306e19c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.NurbsCurve", "ControlPoints" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Weights" : [0.38209498458639485, 0.70308829411076768, 0.73132192191263745], "Knots" : [0.33872517819456999, 0.73131695703198996, 0.81265016357072173, 0.92683620188703586] }, "BHoM_Guid" : "654cb62b-df1f-4928-aea9-a47bb9beaf7d" }], "Outputs" : [[6001.8562997145837, 6001.6181357901623, 6002.4371841724196, 6002.5537358226966, 6003.0491958759021, 6002.6926020936535, 6002.4820149403449, 6003.2361756280234, 6002.4995518780779]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "2086f50e-df47-4bce-8cb9-a0640edc25f6", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.PlanarSurface", "ExternalBoundary" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "InternalBoundaries" : [{ "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.70308829411076768, "Y" : 0.23534573532424202, "Z" : 0.73132192191263745 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.089001557831187531, "Y" : 0.082648985126357988, "Z" : 0.33872517819456999 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.32991219606712097, "Y" : 0.73131695703198996, "Z" : 0.89595341072229362 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.81265016357072173, "Y" : 0.6535485864866285, "Z" : 0.92683620188703586 } }, "Radius" : 0.099241426260788662, "StartAngle" : 0.69182913130700086, "EndAngle" : 0.92548005745070061 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.10141979861139311, "Y" : 0.038685026130958006, "Z" : 0.34105472003158865 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.84963962149323879, "Y" : 0.68709290525274958, "Z" : 0.74400214280188182 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.68564566256741322, "Y" : 0.093061322855326034, "Z" : 0.040521103907619184 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27162018756923273, "Y" : 0.26325112640077769, "Z" : 0.49977948493313951 } }, "Radius" : 0.96156990526317143, "StartAngle" : 0.55604546636158858, "EndAngle" : 0.017603008084745617 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34221245876616446, "Y" : 0.48565348167235661, "Z" : 0.642432012894392 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.62012774107052371, "Y" : 0.073345340822518493, "Z" : 0.89542187652337457 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.59537276280828411, "Y" : 0.43236872015165573, "Z" : 0.074250398703967407 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.43468171331783834, "Y" : 0.089093641885134231, "Z" : 0.29635446998120957 } }, "Radius" : 0.65313182149693916, "StartAngle" : 0.87530425930177058, "EndAngle" : 0.34630525267976581 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.085726595523639856, "Y" : 0.78522651120332376, "Z" : 0.92732379209591254 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.96887616439204483, "Y" : 0.16896769691676261, "Z" : 0.53245536309315611 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.59231587806358743, "Y" : 0.95908615130888586, "Z" : 0.54970007275682875 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.63826059905731147, "Y" : 0.04848045392356834, "Z" : 0.8110287975571252 } }, "Radius" : 0.07547405179379231, "StartAngle" : 0.83013271113398146, "EndAngle" : 0.76974705176881841 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.79504715548597604, "Y" : 0.16500800902257115, "Z" : 0.5846237431208714 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.61358794458843202, "Y" : 0.049397118412608798, "Z" : 0.30535231638017685 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.9067954886270666, "Y" : 0.20599792208801859, "Z" : 0.44331226332267387 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.90868599987993293, "Y" : 0.77538922278927136, "Z" : 0.25241119193491118 } }, "Radius" : 0.65490850091674757, "StartAngle" : 0.38929119258620365, "EndAngle" : 0.43992950135838682 }] }, "BHoM_Guid" : "313b0eae-58d1-4f49-8ece-29f10353d004" }], "Outputs" : [[10000.778712075182, 10000.405131434809, 10000.164399978728, 10000.778800956132, 10000.405111768821, 10000.1648889798, 10000.778858376512, 10000.40509238716, 10000.165382675934, 10000.720653675517, 10000.236287342963, 10000.762400354579, 10000.72228226317, 10000.235631057947, 10000.76143518093, 10000.723897868476, 10000.235170878588, 10000.76034310841, 10000.754330783582, 10000.856103825246, 10001.063081715265, 10000.842278036596, 10000.789595066704, 10001.050316597948, 10000.91437777102, 10000.705358374826, 10001.055502206224, 10000.850239797866, 10000.363035758963, 10001.127445112959, 10000.812373915058, 10000.400677466097, 10001.171669079082, 10000.779359926582, 10000.45192650311, 10001.204685668044, 10000.144606963835, 10000.819053089304, 10000.977460829932, 10000.145332461352, 10000.81857904457, 10000.976918217171, 10000.146047163445, 10000.818077904732, 10000.976385719803, 10001.232588971099, 10000.187132633697, 10000.687501933207, 10001.234073128291, 10000.187550619499, 10000.680874911099, 10001.23544807219, 10000.18810110609, 10000.674234026328]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "c3276912-ccc2-46a6-8269-9d10510c39ce", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Extrusion", "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Direction" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27940878331633695, "Y" : 0.70308829411076768, "Z" : 0.23534573532424202 }, "Capped" : true }, "BHoM_Guid" : "e7e5ab5e-a414-48f6-b766-4fde02b996c8" }], "Outputs" : [[12001.058120858497, 12001.10821972892, 12000.399745714054, 12001.058209739449, 12001.108200062932, 12000.400234715124, 12001.058267159829, 12001.108180681271, 12000.400728411259, 12000.778712075182, 12000.405131434809, 12000.164399978728, 12000.778800956132, 12000.405111768821, 12000.1648889798, 12000.778858376512, 12000.40509238716, 12000.165382675934]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "b9d9fcb5-8bc2-43ef-ae85-0c6d4847cd26", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Loft", "Curves" : [{ "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.10900463355193131, "Y" : 0.30668040798356777, "Z" : 0.80214046118880644 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.44554667894055444, "Y" : 0.22498315396950727, "Z" : 0.011206652974340437 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.76536734065290879, "Y" : 0.028743590707305627, "Z" : 0.0075611905230028508 } }, "Radius" : 0.51002241694835126, "StartAngle" : 0.38209498458639485, "EndAngle" : 0.27940878331633695 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.23534573532424202, "Y" : 0.73132192191263745, "Z" : 0.089001557831187531 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.082648985126357988, "Y" : 0.33872517819456999, "Z" : 0.32991219606712097 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.73131695703198996, "Y" : 0.89595341072229362, "Z" : 0.81265016357072173 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.6535485864866285, "Y" : 0.92683620188703586, "Z" : 0.099241426260788662 } }, "Radius" : 0.69182913130700086, "StartAngle" : 0.92548005745070061, "EndAngle" : 0.98014082944958514 }] }, "BHoM_Guid" : "64d4d724-e915-4874-9d6c-e023c107f78c" }], "Outputs" : [[]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "9241cfb4-9712-4d8b-becd-784873aab36c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.PolySurface", "Surfaces" : [{ "_t" : "BH.oM.Geometry.Extrusion", "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.10900463355193131, "Y" : 0.30668040798356777, "Z" : 0.80214046118880644 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.44554667894055444, "Y" : 0.22498315396950727, "Z" : 0.011206652974340437 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.76536734065290879, "Y" : 0.028743590707305627, "Z" : 0.0075611905230028508 } }, "Radius" : 0.51002241694835126, "StartAngle" : 0.38209498458639485, "EndAngle" : 0.27940878331633695 }, "Direction" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.70308829411076768, "Y" : 0.23534573532424202, "Z" : 0.73132192191263745 }, "Capped" : false }] }, "BHoM_Guid" : "5dbd5b62-b735-4464-b4ff-933174fc80da" }], "Outputs" : [[12001.168702396919, 12000.394432523502, 12002.153521924705, 12001.167862198594, 12000.416831767478, 12002.153419514583, 12001.167034652643, 12000.439196668336, 12002.152166945618, 12000.465614102808, 12000.159086788179, 12001.422200002791, 12000.464773904483, 12000.181486032154, 12001.422097592671, 12000.463946358532, 12000.203850933012, 12001.420845023704]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "ac83f20b-c070-47d0-9767-121dd681f76d", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.SurfaceTrim", "Curve3d" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Curve2d" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.27940878331633695, "Y" : 0.70308829411076768, "Z" : 0.23534573532424202 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.73132192191263745, "Y" : 0.089001557831187531, "Z" : 0.082648985126357988 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.33872517819456999, "Y" : 0.32991219606712097, "Z" : 0.73131695703198996 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.89595341072229362, "Y" : 0.81265016357072173, "Z" : 0.6535485864866285 } }, "Radius" : 0.92683620188703586, "StartAngle" : 0.099241426260788662, "EndAngle" : 0.69182913130700086 } }, "BHoM_Guid" : "ff740773-b696-42c4-982b-b489d7c25db4" }], "Outputs" : [[15000.778712075182, 15000.405131434809, 15000.164399978728, 15000.778800956132, 15000.405111768821, 15000.1648889798, 15000.778858376512, 15000.40509238716, 15000.165382675934, 15000.956179695089, 15000.813682085993, 15000.278434400903, 15000.933737578216, 15000.908165647621, 15000.191715537416, 15000.884193728323, 15001.011917450556, 15000.130626065018]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "aeeaafc8-7aa8-4fef-8c55-c13d8f3d259b", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Environment.Elements.Mesh", "BHoM_Guid" : "cfdd2d8c-d815-4384-8046-7085438e6df8", "Name" : "5m3u3xywz3j", "Fragments" : [], "Tags" : [], "CustomData" : { "z2ldki20cl1" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.37916821119336791, "Y" : 0.9100187881430698, "Z" : 0.23675364406628238 }, "zrt334ifzlr" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.89863010258350062, "Y" : 0.011517720302342306, "Z" : 0.82803786584550421 } }, "Mesh3D" : { "_t" : "BH.oM.Geometry.Mesh3D", "Vertices" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Faces" : [{ "_t" : "BH.oM.Geometry.Face", "A" : 820542731, "B" : 600025793, "C" : 1509870614, "D" : 505401118 }, { "_t" : "BH.oM.Geometry.Face", "A" : 191129390, "B" : 177487344, "C" : 727406781, "D" : 708481046 }, { "_t" : "BH.oM.Geometry.Face", "A" : 1924045298, "B" : 1745152937, "C" : 1403484902, "D" : 1990365587 }], "CellRelation" : [{ "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1987453289, "ToCell" : 2104836403 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 83075461, "ToCell" : 732409434 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1475520778, "ToCell" : 1597732435 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 199847669, "ToCell" : 87018408 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 565327489, "ToCell" : 1073268271 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1194098546, "ToCell" : 37802172 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 734895659, "ToCell" : 1042932910 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1331714183, "ToCell" : 157507920 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1278553272, "ToCell" : 928504756 }] }, "BounderyZones" : [{ "_t" : "BH.oM.Environment.Elements.BoundaryZone", "BHoM_Guid" : "ed522895-f105-4490-ab78-31b5d81ada3c", "Name" : "ddqzjdfkovv", "Fragments" : [], "Tags" : [], "CustomData" : { "2qs5405l3jx" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.92732379209591254, "Y" : 0.96887616439204483, "Z" : 0.16896769691676261 }, "gmttredrnxx" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.59231587806358743, "Y" : 0.95908615130888586, "Z" : 0.54970007275682875 }, "oxsus4a3jtm" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.04848045392356834, "Y" : 0.8110287975571252, "Z" : 0.07547405179379231 }, "wqq5dhhwwli" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.76974705176881841, "Y" : 0.33990794436070504, "Z" : 0.79504715548597604 } }, "FaceIndices" : [636416378, 1879701583, 1144939545] }, { "_t" : "BH.oM.Environment.Elements.BoundaryZone", "BHoM_Guid" : "b8012dcb-7dca-462e-bb5a-a0722ee0edaf", "Name" : "eb04wargvtd", "Fragments" : [], "Tags" : [], "CustomData" : { "4wt4vjuwcv4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.73009710373827119, "Y" : 0.41405288940949964, "Z" : 0.17634339405984775 }, "5duxgzkudrf" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.048726843692700771, "Y" : 0.31957288054729482, "Z" : 0.80975709567300835 }, "bhzricexkmh" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.68334586158550614, "Y" : 0.070427668313694958, "Z" : 0.43508474176520701 }, "bvi2xiv5sn4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.7843439652511589, "Y" : 0.35689466835786338, "Z" : 0.24411768756998595 }, "1mcbftm0czr" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.74918569752442921, "Y" : 0.50130731449523347, "Z" : 0.48812381247436804 } }, "FaceIndices" : [106079504, 1947328483, 952005836, 1665135676, 1406405296, 944741410] }, { "_t" : "BH.oM.Environment.Elements.BoundaryZone", "BHoM_Guid" : "7c237f40-5fb6-4977-9177-c1e85b2c7d3d", "Name" : "4ufz5m1blxv", "Fragments" : [], "Tags" : [], "CustomData" : { "wzd4zctodln" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.88571386266765828, "Y" : 0.3453769480555211, "Z" : 0.41607982172448182 }, "nskfyzizwet" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.71118627009502899, "Y" : 0.74632031179327529, "Z" : 0.84543512847527635 }, "e0csx4kbchx" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.7202503409796629, "Y" : 0.3660512568271026, "Z" : 0.23492464806648189 }, "rb2gyllwt4g" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.35905649948821239, "Y" : 0.65896829807151491, "Z" : 0.55179133152206961 }, "t4cb4rtfij2" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.5874765303858912, "Y" : 0.90572280339231848, "Z" : 0.88798387809097012 }, "bp43wpw12k3" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.87453632842494933, "Y" : 0.19259762679813319, "Z" : 0.24634019948837357 }, "jsrzh4jdx2w" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.29791237148359062, "Y" : 0.9073958042577821, "Z" : 0.52316294262332974 } }, "FaceIndices" : [1675841003, 1549035510, 558950688, 729939755, 344475447] }] }, "BHoM_Guid" : "c3749dcd-e72f-4726-85b5-81e454c159f9" }], "Outputs" : [[]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "de51757b-87a4-41b4-a34c-8f07340d2f62", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Mesh3D", "Vertices" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Faces" : [{ "_t" : "BH.oM.Geometry.Face", "A" : 820542731, "B" : 600025793, "C" : 1509870614, "D" : 505401118 }, { "_t" : "BH.oM.Geometry.Face", "A" : 191129390, "B" : 177487344, "C" : 727406781, "D" : 708481046 }, { "_t" : "BH.oM.Geometry.Face", "A" : 1924045298, "B" : 1745152937, "C" : 1403484902, "D" : 1990365587 }], "CellRelation" : [{ "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1987453289, "ToCell" : 2104836403 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 83075461, "ToCell" : 732409434 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1475520778, "ToCell" : 1597732435 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 199847669, "ToCell" : 87018408 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 565327489, "ToCell" : 1073268271 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1194098546, "ToCell" : 37802172 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 734895659, "ToCell" : 1042932910 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1331714183, "ToCell" : 157507920 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1278553272, "ToCell" : 928504756 }] }, "BHoM_Guid" : "e3988550-28f4-471d-bb2a-6480d783afba" }], "Outputs" : [[14000.40416259477, 14000.165998670349, 14000.985047052607, 14000.306680407984, 14000.802140461188, 14000.44554667894, 14000.011206652975, 14000.765367340653, 14000.028743590707]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "59e2fd46-fe4c-4224-b44a-bc7971fd024f", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "BHoM_Guid" : "52fc0951-d42e-420a-9080-208ada1b7c5b" }], "Outputs" : [[0.77109389834622566, 0.4041625947710884, 0.16599867034982829]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "111bb10c-509f-495e-ab54-5e6b3776dc01", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "_t" : "BH.oM.Structure.Elements.Panel", "BHoM_Guid" : "97f1df34-f916-4452-94b3-91d4596c3c03", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "ExternalEdges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "c06e8974-894e-4953-9050-1a4fa6a2340a", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 19.190295885418404, "Y" : -29.12686392361227, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -8.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "93387567-a13f-486a-a39a-a0022b17575e", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -8.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : -13.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "df307a33-d77b-410b-9a23-6829f749847a", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : -13.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 18.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "30624894-6dc2-42cd-aa42-411b616c64d2", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 18.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 14.0, "Y" : 12.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "d6c6fc3e-cbf9-4a34-965b-6786b621b440", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 14.0, "Y" : 12.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 21.0, "Y" : -5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "d4f981d6-7519-4248-9e61-1ccf845dc5ab", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 21.0, "Y" : -5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -12.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "cee6ce99-9be8-4bcb-8f83-a7b9e9a30a04", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 9.1850339211086016, "Y" : -23.444898236674195, "Z" : 0.0 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.86956263782751309, "Y" : -0.49382265935703812, "Z" : 0.0 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : -0.49382265935703817, "Y" : -0.8695626378275132, "Z" : 0.0 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.0, "Y" : 0.0, "Z" : -1.0 } }, "Radius" : 11.506085391739717, "StartAngle" : -2.1904515725762264, "EndAngle" : 0.0 }, "Release" : null, "Support" : null }], "Openings" : [{ "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "2a5f96f2-5ee5-47ff-936a-90ee4e4619a3", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "0b0ff473-723a-40d8-9399-2da07a3fa219", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Circle", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 2.0, "Z" : 0.0 }, "Normal" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.0, "Y" : 0.0, "Z" : 1.0 }, "Radius" : 3.6055512754639896 }, "Release" : null, "Support" : null }] }, { "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "0b8a9348-cd26-47de-b788-7dadb60044c1", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "2b11d441-d80f-40d1-ac6c-8b2cb00d4f78", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 7.0, "Y" : -9.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -1.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "52fad424-1137-4e07-a036-ed32f07e043c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -1.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : -2.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "b4eb4771-4768-4227-9985-83d20ba2207b", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : -2.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.69719224062738, "Y" : -5.4037436791634805, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "1ef9e5c3-b5b4-4171-bd44-e329c891c9e8", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.69719224062738, "Y" : -5.4037436791634805, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 7.0, "Y" : -9.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }] }, { "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "ff7f3bbc-83bb-4aaf-9520-0b95ecfc20c4", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "9623d95d-35d9-4c5d-98b7-9ee1f1f3a7ec", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "bde5adf7-8981-4bda-8af1-c90d8f26b8e2", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 7.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "3e9178ec-9eb9-41ef-9d20-9a58a61c956c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 7.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 7.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "a4a37868-8191-4ca0-90f6-81a4a8b72782", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 7.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }] }], "Property" : null, "OrientationAngle" : 0.0 }], "Outputs" : [[9019.1902958854189, 8970.8731360763886, 9000.0, 8997.0, 8992.0, 9000.0, 8987.0, 9005.0, 9000.0, 9002.0, 9018.0, 9000.0, 9014.0, 9012.0, 9000.0, 9021.0, 8995.0, 9000.0, 10008.0, 9988.0, 10000.0, 10018.817347903117, 9982.8486324412534, 10000.0, 11002.0, 11005.605551275465, 11000.0, 10998.84043133207, 11000.263012425883, 11000.0, 11005.044267628704, 11000.068049015936, 11000.0, 9007.0, 8991.0, 9000.0, 9008.0, 8999.0, 9000.0, 9012.0, 8998.0, 9000.0, 9012.6971922406283, 8994.5962563208359, 9000.0, 9006.0, 9005.0, 9000.0, 9012.0, 9005.0, 9000.0, 9012.0, 9007.0, 9000.0, 9006.0, 9007.0, 9000.0]] }] }], "_bhomVersion" : "6.0" } \ No newline at end of file +{ "_t" : "BH.oM.Data.Library.Dataset", "BHoM_Guid" : "037ee8b4-c262-49f9-b564-ca6ac0ac6793", "Name" : "GeometryHash", "Fragments" : [], "Tags" : [], "CustomData" : { }, "SourceInformation" : { "_t" : "BH.oM.Data.Library.Source", "BHoM_Guid" : "74131ea2-f066-4a62-b8e6-1ec7207add55", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "SourceLink" : "", "Title" : "GeometryHash", "Author" : "Alessio Lombardi", "ItemReference" : "", "Version" : "", "Publisher" : "", "Schema" : "", "Language" : "", "Location" : "", "Copyright" : "", "Contributors" : "", "Confidence" : "Undefined" }, "TimeOfCreation" : { "$date" : 1667820685882 }, "Data" : [{ "_t" : "BH.oM.Test.UnitTests.UnitTest", "BHoM_Guid" : "b1ee04f6-216f-4a0a-a1f6-c0c55ef25af6", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Method" : { "_t" : "System.Reflection.MethodBase", "TypeName" : "{ \"_t\" : \"System.Type\", \"Name\" : \"BH.Engine.Base.Query, BHoM_Engine, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null\", \"_bhomVersion\" : \"6.0\" }", "MethodName" : "GeometryHash", "Parameters" : ["{ \"_t\" : \"System.Type\", \"Name\" : \"BH.oM.Base.IBHoMObject\", \"_bhomVersion\" : \"6.0\" }"], "_bhomVersion" : "6.0" }, "Data" : [{ "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "c94d1aae-387e-4161-adc6-bdd8801ea499", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "_t" : "BH.oM.Structure.Elements.Bar", "BHoM_Guid" : "28f15ace-ebd7-422c-aac0-cacb2179c1d8", "Name" : "tylf2d3hzlz", "Fragments" : [], "Tags" : [], "CustomData" : { "in1neuk0ndi" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.67219245884203938, "Y" : 0.37923656794207011, "Z" : 0.86616781953078126 }, "nis00xkhmdo" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.78663488607231291, "Y" : 0.51996000880373638, "Z" : 0.82963650712260817 }, "gscok3p0224" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.52251069877413603, "Y" : 0.16290920375050474, "Z" : 0.63418533961949186 }, "5c3vcq1cnj4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.31461000783117954, "Y" : 0.24995057156772846, "Z" : 0.80063021453126815 }, "3k1jrldsmiw" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.92160075852721968, "Y" : 0.33739710288932412, "Z" : 0.19225228260841792 } }, "StartNode" : { "_t" : "BH.oM.Structure.Elements.Node", "BHoM_Guid" : "109ef8c9-1c90-4c90-bb6c-7ef9e92dc959", "Name" : "ln3hhsmqpwo", "Fragments" : [], "Tags" : [], "CustomData" : { "lro20ui4dbh" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34314184465591879, "Y" : 0.95745516566441169, "Z" : 0.50512921274878508 }, "3l0ixo1ws2j" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.1189577291342233, "Y" : 0.27345148347013232, "Z" : 0.90709795006881377 }, "nfex0z1kjeo" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.3371603392703274, "Y" : 0.45720878776964208, "Z" : 0.14682504029331031 }, "okh5qc0qn2h" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.41007327959410533, "Y" : 0.71872683275431715, "Z" : 0.61983028362497239 }, "p5t2ekbpy5w" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.19491343674944409, "Y" : 0.87819148687561577, "Z" : 0.82542318423531169 }, "uwjg2500i4a" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.85821920766412241, "Y" : 0.67974901137861843, "Z" : 0.62486613570939109 } }, "Position" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.72624326996795985, "Y" : 0.81732535959096875, "Z" : 0.76802268939466345 }, "Orientation" : { "_t" : "BH.oM.Geometry.Basis", "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.5581611914365372, "Y" : 0.2060331540210327, "Z" : 0.55888479461841511 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.90602706601192573, "Y" : 0.44217787331071584, "Z" : 0.97754975314137982 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27370445768987034, "Y" : 0.29190628476995334, "Z" : 0.46731470034798361 } }, "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "50b437f8-a6a8-4f96-8774-89780b43dfad", "Name" : "wxwwqmafqw4", "Fragments" : [], "Tags" : [], "CustomData" : { "3rpmsl23qjl" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.5262841426424143, "Y" : 0.93401865890902402, "Z" : 0.68762028249335483 }, "iobbt2w0d2s" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.081109949891041005, "Y" : 0.18712457417842213, "Z" : 0.45332718521977178 }, "m5g3vlqmxoy" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.98854377911823976, "Y" : 0.64269747289023249, "Z" : 0.76296358823914245 } }, "TranslationalStiffnessX" : 0.63265907281667877, "TranslationalStiffnessY" : 0.46951187842968473, "TranslationalStiffnessZ" : 0.98215125314060192, "RotationalStiffnessX" : 0.030366990729406004, "RotationalStiffnessY" : 0.86237015382497118, "RotationalStiffnessZ" : 0.99534708121574811, "TranslationX" : "SpringRelativeNegative", "TranslationY" : "Spring", "TranslationZ" : "NonLinear", "RotationX" : "Friction", "RotationY" : "Damped", "RotationZ" : "Free" } }, "EndNode" : { "_t" : "BH.oM.Structure.Elements.Node", "BHoM_Guid" : "ba2d683b-86b2-4976-97e4-e19a7ab52816", "Name" : "3fxxumrw1kv", "Fragments" : [], "Tags" : [], "CustomData" : { "r5lenaawtif" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.62462275923445021, "Y" : 0.6930450455718884, "Z" : 0.63039438223018984 }, "sbpprsdb3iz" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.22134204172591773, "Y" : 0.92870763266864587, "Z" : 0.066521596194487803 }, "ra1gkwrq5ax" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.67850547222350976, "Y" : 0.093978040429753273, "Z" : 0.149097432917495 } }, "Position" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.89536243905097357, "Y" : 0.89643980325033878, "Z" : 0.086579883511448227 }, "Orientation" : { "_t" : "BH.oM.Geometry.Basis", "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.83857909955018162, "Y" : 0.17014283461968546, "Z" : 0.64411529369843901 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.82681440553945229, "Y" : 0.21918766490145944, "Z" : 0.99997269781305109 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.48136564692545947, "Y" : 0.65220523655982932, "Z" : 0.71972598355250716 } }, "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "21a86303-c3b0-4efd-9ef1-6d482caf63bd", "Name" : "biupv0ysyac", "Fragments" : [], "Tags" : [], "CustomData" : { "gychbrjoizc" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.80920381322931678, "Y" : 0.7936303423687957, "Z" : 0.76450598601461672 }, "d3rckjr3vvr" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.29499680190114158, "Y" : 0.52278529923538919, "Z" : 0.66339283327730036 }, "kj4syxf1z3z" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.28672242923021429, "Y" : 0.82061007331153846, "Z" : 0.2225179258838845 } }, "TranslationalStiffnessX" : 0.80946258027547158, "TranslationalStiffnessY" : 0.10093539631969081, "TranslationalStiffnessZ" : 0.72909405395812077, "RotationalStiffnessX" : 0.71845069188552479, "RotationalStiffnessY" : 0.12552724831063639, "RotationalStiffnessZ" : 0.90517638991827909, "TranslationX" : "FixedNegative", "TranslationY" : "SpringPositive", "TranslationZ" : "SpringRelative", "RotationX" : "Spring", "RotationY" : "SpringRelativeNegative", "RotationZ" : "SpringPositive" } }, "SectionProperty" : { "_t" : "BH.oM.Structure.SectionProperties.AluminiumSection", "BHoM_Guid" : "b1e9cab1-11e8-48f1-9d4f-02b9fa32af76", "Name" : null, "Fragments" : [], "Tags" : [], "CustomData" : { }, "Material" : null, "SectionProfile" : { "_t" : "BH.oM.Spatial.ShapeProfiles.AngleProfile", "BHoM_Guid" : "34c1406d-8444-40ab-9eed-73d478a7a7d7", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Shape" : "Angle", "Height" : 0.6098702427045769, "Width" : 0.95304281774584332, "WebThickness" : 0.49062520800653159, "FlangeThickness" : 0.14805626457000909, "RootRadius" : 0.6776115413185263, "ToeRadius" : 0.5698617443302002, "MirrorAboutLocalZ" : false, "MirrorAboutLocalY" : true, "Edges" : [] }, "Area" : 0.36093902139036871, "Rgy" : 0.8504849513296433, "Rgz" : 0.062308419524835616, "J" : 0.28164726089762859, "Iy" : 0.70497589591190957, "Iz" : 0.95858034769007017, "Iw" : 0.98881240328252895, "Wely" : 0.38713695359748646, "Welz" : 0.52274015104525728, "Wply" : 0.28032532300815233, "Wplz" : 0.50657612807423624, "CentreZ" : 0.53157909192684061, "CentreY" : 0.057008397792004235, "Vz" : 0.28055363068382888, "Vpz" : 0.4960787578001985, "Vy" : 0.84641548890919216, "Vpy" : 0.61315786680819362, "Asy" : 0.10415865299485561, "Asz" : 0.74232903762828983 }, "OrientationAngle" : 0.40187614522961718, "Release" : { "_t" : "BH.oM.Structure.Constraints.BarRelease", "BHoM_Guid" : "fd32b3d1-eb54-4999-995d-0585373a3746", "Name" : "3zha3k40ajs", "Fragments" : [], "Tags" : [], "CustomData" : { "go4u0e2vj1z" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.12118609627764025, "Y" : 0.19491076525063755, "Z" : 0.49651680909866319 }, "xtthogsabjl" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.26166441490019876, "Y" : 0.31036315826250388, "Z" : 0.24213605804468322 }, "vj2odjsmkqu" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.13305996969950384, "Y" : 0.61250376636744652, "Z" : 0.55929009968381849 }, "rgb4isn0pad" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34102778664837952, "Y" : 0.023311249456978985, "Z" : 0.097285922196361202 }, "stqykneecya" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.71087234267539923, "Y" : 0.89213904454006765, "Z" : 0.65126434138569256 } }, "StartRelease" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "14fe3328-290f-41cd-a4a0-3bdc90e00426", "Name" : "klzpsvmoibk", "Fragments" : [], "Tags" : [], "CustomData" : { "bbugieqbvuv" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.063436652563249998, "Y" : 0.2636837378440815, "Z" : 0.84256009424224498 }, "qdux50ooza4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.64599011449422228, "Y" : 0.51636614581400819, "Z" : 0.9701272849785757 } }, "TranslationalStiffnessX" : 0.93339260152233416, "TranslationalStiffnessY" : 0.13069834100580696, "TranslationalStiffnessZ" : 0.69965230193904238, "RotationalStiffnessX" : 0.61540855309712172, "RotationalStiffnessY" : 0.83056791165404387, "RotationalStiffnessZ" : 0.68512655919656462, "TranslationX" : "SpringRelative", "TranslationY" : "FixedNegative", "TranslationZ" : "FixedNegative", "RotationX" : "SpringRelative", "RotationY" : "FixedPositive", "RotationZ" : "Damped" }, "EndRelease" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "bd451b8d-71d3-4f59-bf7a-5ae85bd95565", "Name" : "cf10j0bvwc3", "Fragments" : [], "Tags" : [], "CustomData" : { "x4rjbcp5nzt" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.071689596433047953, "Y" : 0.23024068038456175, "Z" : 0.15083264939060093 }, "l2yqkynplpx" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.45107934924358473, "Y" : 0.019849336715344962, "Z" : 0.3888378662005243 }, "0vlpo4lpjhf" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.20260418821247489, "Y" : 0.91362926313356929, "Z" : 0.029576994026814119 }, "smmechhusp5" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.96288963405549977, "Y" : 0.99357174522875424, "Z" : 0.016869892839747432 }, "iw4edemwrwq" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.27832952620383794, "Y" : 0.96716775231397145, "Z" : 0.58779250718084741 }, "1x4lbcydx02" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.3241669523176583, "Y" : 0.42042525504735545, "Z" : 0.97493301982755443 }, "fp5zep3amxc" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.97288724825386297, "Y" : 0.25517451123109763, "Z" : 0.13226471428399195 }, "sulqftlcb01" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.17822117506443577, "Y" : 0.88289198972419458, "Z" : 0.54465721340135542 }, "wppp014s52o" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.51404069760536808, "Y" : 0.3523834610136149, "Z" : 0.99174705613020209 } }, "TranslationalStiffnessX" : 0.51296734647497877, "TranslationalStiffnessY" : 0.15576532117825248, "TranslationalStiffnessZ" : 0.81365271742160095, "RotationalStiffnessX" : 0.64252130484325876, "RotationalStiffnessY" : 0.57539340042294629, "RotationalStiffnessZ" : 0.55286184491257273, "TranslationX" : "SpringRelativeNegative", "TranslationY" : "Damped", "TranslationZ" : "FixedPositive", "RotationX" : "Free", "RotationY" : "SpringPositive", "RotationZ" : "SpringPositive" } }, "FEAType" : "Flexural", "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint4DOF", "BHoM_Guid" : "2f7b1f8f-912c-47e7-b7a9-05d97caf93f0", "Name" : "ilyzp2mpkfo", "Fragments" : [], "Tags" : [], "CustomData" : { "ro5bqyzxjrm" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.61050617304188481, "Y" : 0.0018246890985521903, "Z" : 0.98342683538022768 }, "5szq1mv3lmn" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.1571434299261977, "Y" : 0.7722569870633339, "Z" : 0.091275698082184276 }, "hesgb4w3dx2" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.06250253741745955, "Y" : 0.11006209678485156, "Z" : 0.73279696178287124 } }, "TranslationX" : "SpringPositive", "TranslationY" : "FixedNegative", "TranslationZ" : "Friction", "RotationX" : "SpringPositive", "TranslationalStiffnessX" : 0.63782360294732432, "TranslationalStiffnessY" : 0.31971219848828025, "TranslationalStiffnessZ" : 0.36897204973221387, "RotationalStiffnessX" : 0.24453175638082053 }, "Offset" : { "_t" : "BH.oM.Structure.Offsets.Offset", "BHoM_Guid" : "8f266c9c-04a7-427c-b551-ed472c3f0db7", "Name" : "e11124wzo4r", "Fragments" : [], "Tags" : [], "CustomData" : { "ohcuxspwcyt" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.90713465349149647, "Y" : 0.80316835492996885, "Z" : 0.46024441647354719 }, "45d1u4sc2i3" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77813539690251243, "Y" : 0.42689437997848467, "Z" : 0.64717347810378922 }, "5fyvqoz2ez3" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.60893218666731019, "Y" : 0.089704847005058472, "Z" : 0.62384081195287444 }, "3newj04kx3z" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.87316400831246932, "Y" : 0.53954396701396623, "Z" : 0.13763933216111704 } }, "Start" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.83982727855435912, "Y" : 0.64267074486365106, "Z" : 0.57297461460017352 }, "End" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.24163400020526443, "Y" : 0.83719338841605628, "Z" : 0.85958074026721565 } } }], "Outputs" : [[2000.7262432699679, 2000.817325359591, 2000.7680226893947, 2000.895362439051, 2000.8964398032504, 2000.0865798835114]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "3887fd12-cdf4-4575-93bc-5d2158c36a83", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "BHoM_Guid" : "ab517b73-4875-4493-9abd-b0002b146e36" }], "Outputs" : [[3000.7787120751814, 3000.4051314348089, 3000.1643999787289, 3000.7788009561323, 3000.4051117688214, 3000.1648889798003, 3000.7788583765132, 3000.4050923871605, 3000.1653826759343]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "9b305058-b3b0-4c54-9aaa-605035fcbabe", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Circle", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "Normal" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Radius" : 0.80214046118880644 }, "BHoM_Guid" : "e97a38c4-e2ea-4214-ad6c-2d3930b4eb68" }], "Outputs" : [[4000.7710938983464, 4001.1599801248626, 3999.8973554484319, 4000.5505632580807, 4000.2635726973858, 4000.9243060202639, 4000.9835767907457, 3999.7838044638934, 3999.7040071884289]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "bb25c434-8d2a-4831-b595-50352e764e57", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Infinite" : true }, "BHoM_Guid" : "8c36cd3b-4a07-49e9-8db1-649289076c58" }], "Outputs" : [[2000.7710938983462, 2000.4041625947712, 2000.1659986703498, 2000.9850470526073, 2000.1090046335519, 2000.3066804079835]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "af7ec136-8899-4e77-8de7-310052ad6111", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.NurbsCurve", "ControlPoints" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Weights" : [0.38209498458639485, 0.70308829411076768, 0.73132192191263745], "Knots" : [0.33872517819456999, 0.73131695703198996, 0.81265016357072173, 0.92683620188703586] }, "BHoM_Guid" : "bf876b30-a3bb-4a89-af27-5e52e15501c6" }], "Outputs" : [[6001.8562997145837, 6001.6181357901623, 6002.4371841724196, 6002.5537358226966, 6003.0491958759021, 6002.6926020936535, 6002.4820149403449, 6003.2361756280234, 6002.4995518780779]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "3b6665c9-b036-4e84-8b04-6ee2db8c901a", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.PlanarSurface", "ExternalBoundary" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "InternalBoundaries" : [{ "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.70308829411076768, "Y" : 0.23534573532424202, "Z" : 0.73132192191263745 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.089001557831187531, "Y" : 0.082648985126357988, "Z" : 0.33872517819456999 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.32991219606712097, "Y" : 0.73131695703198996, "Z" : 0.89595341072229362 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.81265016357072173, "Y" : 0.6535485864866285, "Z" : 0.92683620188703586 } }, "Radius" : 0.099241426260788662, "StartAngle" : 0.69182913130700086, "EndAngle" : 0.92548005745070061 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.10141979861139311, "Y" : 0.038685026130958006, "Z" : 0.34105472003158865 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.84963962149323879, "Y" : 0.68709290525274958, "Z" : 0.74400214280188182 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.68564566256741322, "Y" : 0.093061322855326034, "Z" : 0.040521103907619184 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27162018756923273, "Y" : 0.26325112640077769, "Z" : 0.49977948493313951 } }, "Radius" : 0.96156990526317143, "StartAngle" : 0.55604546636158858, "EndAngle" : 0.017603008084745617 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34221245876616446, "Y" : 0.48565348167235661, "Z" : 0.642432012894392 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.62012774107052371, "Y" : 0.073345340822518493, "Z" : 0.89542187652337457 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.59537276280828411, "Y" : 0.43236872015165573, "Z" : 0.074250398703967407 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.43468171331783834, "Y" : 0.089093641885134231, "Z" : 0.29635446998120957 } }, "Radius" : 0.65313182149693916, "StartAngle" : 0.87530425930177058, "EndAngle" : 0.34630525267976581 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.085726595523639856, "Y" : 0.78522651120332376, "Z" : 0.92732379209591254 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.96887616439204483, "Y" : 0.16896769691676261, "Z" : 0.53245536309315611 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.59231587806358743, "Y" : 0.95908615130888586, "Z" : 0.54970007275682875 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.63826059905731147, "Y" : 0.04848045392356834, "Z" : 0.8110287975571252 } }, "Radius" : 0.07547405179379231, "StartAngle" : 0.83013271113398146, "EndAngle" : 0.76974705176881841 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.79504715548597604, "Y" : 0.16500800902257115, "Z" : 0.5846237431208714 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.61358794458843202, "Y" : 0.049397118412608798, "Z" : 0.30535231638017685 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.9067954886270666, "Y" : 0.20599792208801859, "Z" : 0.44331226332267387 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.90868599987993293, "Y" : 0.77538922278927136, "Z" : 0.25241119193491118 } }, "Radius" : 0.65490850091674757, "StartAngle" : 0.38929119258620365, "EndAngle" : 0.43992950135838682 }] }, "BHoM_Guid" : "1434e351-5cb8-4405-a768-b9b9fde032ff" }], "Outputs" : [[10000.778712075182, 10000.405131434809, 10000.164399978728, 10000.778800956132, 10000.405111768821, 10000.1648889798, 10000.778858376512, 10000.40509238716, 10000.165382675934, 10000.720653675517, 10000.236287342963, 10000.762400354579, 10000.72228226317, 10000.235631057947, 10000.76143518093, 10000.723897868476, 10000.235170878588, 10000.76034310841, 10000.754330783582, 10000.856103825246, 10001.063081715265, 10000.842278036596, 10000.789595066704, 10001.050316597948, 10000.91437777102, 10000.705358374826, 10001.055502206224, 10000.850239797866, 10000.363035758963, 10001.127445112959, 10000.812373915058, 10000.400677466097, 10001.171669079082, 10000.779359926582, 10000.45192650311, 10001.204685668044, 10000.144606963835, 10000.819053089304, 10000.977460829932, 10000.145332461352, 10000.81857904457, 10000.976918217171, 10000.146047163445, 10000.818077904732, 10000.976385719803, 10001.232588971099, 10000.187132633697, 10000.687501933207, 10001.234073128291, 10000.187550619499, 10000.680874911099, 10001.23544807219, 10000.18810110609, 10000.674234026328]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "a085d8fe-51da-42d8-a1e8-078e4071d702", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Extrusion", "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Direction" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27940878331633695, "Y" : 0.70308829411076768, "Z" : 0.23534573532424202 }, "Capped" : true }, "BHoM_Guid" : "d18cfa48-970d-4271-b199-5126a56da99b" }], "Outputs" : [[12001.058120858497, 12001.10821972892, 12000.399745714054, 12001.058209739449, 12001.108200062932, 12000.400234715124, 12001.058267159829, 12001.108180681271, 12000.400728411259, 12000.778712075182, 12000.405131434809, 12000.164399978728, 12000.778800956132, 12000.405111768821, 12000.1648889798, 12000.778858376512, 12000.40509238716, 12000.165382675934]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "06f6bfa1-a93e-401b-b3f3-31e8edbcfd86", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Loft", "Curves" : [{ "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.10900463355193131, "Y" : 0.30668040798356777, "Z" : 0.80214046118880644 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.44554667894055444, "Y" : 0.22498315396950727, "Z" : 0.011206652974340437 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.76536734065290879, "Y" : 0.028743590707305627, "Z" : 0.0075611905230028508 } }, "Radius" : 0.51002241694835126, "StartAngle" : 0.38209498458639485, "EndAngle" : 0.27940878331633695 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.23534573532424202, "Y" : 0.73132192191263745, "Z" : 0.089001557831187531 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.082648985126357988, "Y" : 0.33872517819456999, "Z" : 0.32991219606712097 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.73131695703198996, "Y" : 0.89595341072229362, "Z" : 0.81265016357072173 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.6535485864866285, "Y" : 0.92683620188703586, "Z" : 0.099241426260788662 } }, "Radius" : 0.69182913130700086, "StartAngle" : 0.92548005745070061, "EndAngle" : 0.98014082944958514 }] }, "BHoM_Guid" : "371d203d-7ad7-47d6-81c5-0af78d138d55" }], "Outputs" : [[]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "14c358b6-5afc-4c89-a712-8839a43d7219", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.PolySurface", "Surfaces" : [{ "_t" : "BH.oM.Geometry.Extrusion", "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.10900463355193131, "Y" : 0.30668040798356777, "Z" : 0.80214046118880644 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.44554667894055444, "Y" : 0.22498315396950727, "Z" : 0.011206652974340437 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.76536734065290879, "Y" : 0.028743590707305627, "Z" : 0.0075611905230028508 } }, "Radius" : 0.51002241694835126, "StartAngle" : 0.38209498458639485, "EndAngle" : 0.27940878331633695 }, "Direction" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.70308829411076768, "Y" : 0.23534573532424202, "Z" : 0.73132192191263745 }, "Capped" : false }] }, "BHoM_Guid" : "1dc30c10-79c2-4b6e-b97a-6eee71a169f3" }], "Outputs" : [[12001.168702396919, 12000.394432523502, 12002.153521924705, 12001.167862198594, 12000.416831767478, 12002.153419514583, 12001.167034652643, 12000.439196668336, 12002.152166945618, 12000.465614102808, 12000.159086788179, 12001.422200002791, 12000.464773904483, 12000.181486032154, 12001.422097592671, 12000.463946358532, 12000.203850933012, 12001.420845023704]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "6519a79d-687c-4980-83d9-d5c212b14b5f", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.SurfaceTrim", "Curve3d" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Curve2d" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.27940878331633695, "Y" : 0.70308829411076768, "Z" : 0.23534573532424202 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.73132192191263745, "Y" : 0.089001557831187531, "Z" : 0.082648985126357988 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.33872517819456999, "Y" : 0.32991219606712097, "Z" : 0.73131695703198996 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.89595341072229362, "Y" : 0.81265016357072173, "Z" : 0.6535485864866285 } }, "Radius" : 0.92683620188703586, "StartAngle" : 0.099241426260788662, "EndAngle" : 0.69182913130700086 } }, "BHoM_Guid" : "37315978-4264-4f1a-b84a-632bf6506d39" }], "Outputs" : [[15000.778712075182, 15000.405131434809, 15000.164399978728, 15000.778800956132, 15000.405111768821, 15000.1648889798, 15000.778858376512, 15000.40509238716, 15000.165382675934, 15000.956179695089, 15000.813682085993, 15000.278434400903, 15000.933737578216, 15000.908165647621, 15000.191715537416, 15000.884193728323, 15001.011917450556, 15000.130626065018]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "3c545a48-a4c5-4dc4-8441-6725c1983b8d", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Environment.Elements.Mesh", "BHoM_Guid" : "9b4123be-af3a-4027-bfc9-2900854e9da4", "Name" : "xoyxys0cpp5", "Fragments" : [], "Tags" : [], "CustomData" : { "30a315d11ah" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.37916821119336791, "Y" : 0.9100187881430698, "Z" : 0.23675364406628238 }, "2pljfdnziko" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.89863010258350062, "Y" : 0.011517720302342306, "Z" : 0.82803786584550421 } }, "Mesh3D" : { "_t" : "BH.oM.Geometry.Mesh3D", "Vertices" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Faces" : [{ "_t" : "BH.oM.Geometry.Face", "A" : 820542731, "B" : 600025793, "C" : 1509870614, "D" : 505401118 }, { "_t" : "BH.oM.Geometry.Face", "A" : 191129390, "B" : 177487344, "C" : 727406781, "D" : 708481046 }, { "_t" : "BH.oM.Geometry.Face", "A" : 1924045298, "B" : 1745152937, "C" : 1403484902, "D" : 1990365587 }], "CellRelation" : [{ "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1987453289, "ToCell" : 2104836403 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 83075461, "ToCell" : 732409434 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1475520778, "ToCell" : 1597732435 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 199847669, "ToCell" : 87018408 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 565327489, "ToCell" : 1073268271 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1194098546, "ToCell" : 37802172 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 734895659, "ToCell" : 1042932910 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1331714183, "ToCell" : 157507920 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1278553272, "ToCell" : 928504756 }] }, "BounderyZones" : [{ "_t" : "BH.oM.Environment.Elements.BoundaryZone", "BHoM_Guid" : "6a56cd92-0bdf-434b-98a8-7f8973433263", "Name" : "lztjkhqadg4", "Fragments" : [], "Tags" : [], "CustomData" : { "0xy30nua2m3" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.92732379209591254, "Y" : 0.96887616439204483, "Z" : 0.16896769691676261 }, "hi0cmxhonzn" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.59231587806358743, "Y" : 0.95908615130888586, "Z" : 0.54970007275682875 }, "crjvrdmlm3m" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.04848045392356834, "Y" : 0.8110287975571252, "Z" : 0.07547405179379231 }, "p0yh3l3yht0" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.76974705176881841, "Y" : 0.33990794436070504, "Z" : 0.79504715548597604 } }, "FaceIndices" : [636416378, 1879701583, 1144939545] }, { "_t" : "BH.oM.Environment.Elements.BoundaryZone", "BHoM_Guid" : "7b6f46ec-f744-48db-8862-60c1fff4295c", "Name" : "303gtl5dtmy", "Fragments" : [], "Tags" : [], "CustomData" : { "suj5onigpq1" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.73009710373827119, "Y" : 0.41405288940949964, "Z" : 0.17634339405984775 }, "rv2cxbvwbne" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.048726843692700771, "Y" : 0.31957288054729482, "Z" : 0.80975709567300835 }, "hfc13nttgwo" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.68334586158550614, "Y" : 0.070427668313694958, "Z" : 0.43508474176520701 }, "khr1s2ijlw4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.7843439652511589, "Y" : 0.35689466835786338, "Z" : 0.24411768756998595 }, "de2lggpjzf3" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.74918569752442921, "Y" : 0.50130731449523347, "Z" : 0.48812381247436804 } }, "FaceIndices" : [106079504, 1947328483, 952005836, 1665135676, 1406405296, 944741410] }, { "_t" : "BH.oM.Environment.Elements.BoundaryZone", "BHoM_Guid" : "3772716f-c116-4846-9766-53b4a5c28b0f", "Name" : "yza1huyl3cq", "Fragments" : [], "Tags" : [], "CustomData" : { "f4hc3kwkuvs" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.88571386266765828, "Y" : 0.3453769480555211, "Z" : 0.41607982172448182 }, "yajo0wvbibh" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.71118627009502899, "Y" : 0.74632031179327529, "Z" : 0.84543512847527635 }, "go5el0hutyy" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.7202503409796629, "Y" : 0.3660512568271026, "Z" : 0.23492464806648189 }, "fyroq4bdtil" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.35905649948821239, "Y" : 0.65896829807151491, "Z" : 0.55179133152206961 }, "qo3bklurfmd" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.5874765303858912, "Y" : 0.90572280339231848, "Z" : 0.88798387809097012 }, "iznw0ikpjw1" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.87453632842494933, "Y" : 0.19259762679813319, "Z" : 0.24634019948837357 }, "yh2yxtbmic2" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.29791237148359062, "Y" : 0.9073958042577821, "Z" : 0.52316294262332974 } }, "FaceIndices" : [1675841003, 1549035510, 558950688, 729939755, 344475447] }] }, "BHoM_Guid" : "e927e9ef-2ecb-4afe-adc0-67c97a9764f8" }], "Outputs" : [[]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "c60be5a6-3bfd-4f11-baed-4984d1f1494e", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Mesh3D", "Vertices" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Faces" : [{ "_t" : "BH.oM.Geometry.Face", "A" : 820542731, "B" : 600025793, "C" : 1509870614, "D" : 505401118 }, { "_t" : "BH.oM.Geometry.Face", "A" : 191129390, "B" : 177487344, "C" : 727406781, "D" : 708481046 }, { "_t" : "BH.oM.Geometry.Face", "A" : 1924045298, "B" : 1745152937, "C" : 1403484902, "D" : 1990365587 }], "CellRelation" : [{ "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1987453289, "ToCell" : 2104836403 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 83075461, "ToCell" : 732409434 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1475520778, "ToCell" : 1597732435 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 199847669, "ToCell" : 87018408 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 565327489, "ToCell" : 1073268271 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1194098546, "ToCell" : 37802172 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 734895659, "ToCell" : 1042932910 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1331714183, "ToCell" : 157507920 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1278553272, "ToCell" : 928504756 }] }, "BHoM_Guid" : "3388e6be-2a1e-4f78-9965-efd44c78b225" }], "Outputs" : [[14000.40416259477, 14000.165998670349, 14000.985047052607, 14000.306680407984, 14000.802140461188, 14000.44554667894, 14000.011206652975, 14000.765367340653, 14000.028743590707]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "58a03196-098d-4e14-af16-1582e5ca68da", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "BHoM_Guid" : "d082bf2f-7a90-40b8-ab40-98b21b713392" }], "Outputs" : [[0.77109389834622566, 0.4041625947710884, 0.16599867034982829]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "c0636022-96fc-4de3-b309-0481b60bafbd", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "_t" : "BH.oM.Structure.Elements.Panel", "BHoM_Guid" : "fa5f2337-68ae-4a09-8bf9-c0c859f9720d", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "ExternalEdges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "814dbe32-f4d4-4a7d-9d23-4ef0fe055e9c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 19.190295885418404, "Y" : -29.12686392361227, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -8.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "3a2f7d92-6be0-4fdc-9fbe-7ef4911a89e5", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -8.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : -13.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "39d03267-1976-4eba-9177-386d561a8c9b", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : -13.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 18.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "fe82f4b0-0c90-4708-9967-7d536b41a3fa", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 18.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 14.0, "Y" : 12.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "6d2fa1c2-f11e-4d97-9862-819df7055f6a", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 14.0, "Y" : 12.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 21.0, "Y" : -5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "910e87f9-524f-48f4-bc66-46dcac4843b5", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 21.0, "Y" : -5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -12.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "4026ac97-5cdb-464c-a28b-c6d8bb9d0761", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 9.1850339211086016, "Y" : -23.444898236674195, "Z" : 0.0 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.86956263782751309, "Y" : -0.49382265935703812, "Z" : 0.0 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : -0.49382265935703817, "Y" : -0.8695626378275132, "Z" : 0.0 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.0, "Y" : 0.0, "Z" : -1.0 } }, "Radius" : 11.506085391739717, "StartAngle" : -2.1904515725762264, "EndAngle" : 0.0 }, "Release" : null, "Support" : null }], "Openings" : [{ "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "b86c147a-bc9b-4755-8897-889f925c8af1", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "be22ba4a-aeb2-4b9a-99be-c1dc4254dc7b", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Circle", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 2.0, "Z" : 0.0 }, "Normal" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.0, "Y" : 0.0, "Z" : 1.0 }, "Radius" : 3.6055512754639896 }, "Release" : null, "Support" : null }] }, { "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "752a7163-4516-4559-9b06-6ef7214dc2e0", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "b723fc99-f47c-43b3-907f-a851faf0001c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 7.0, "Y" : -9.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -1.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "6d477a54-3725-4b37-bbe8-35d46d6c2276", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -1.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : -2.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "2ef99387-3700-4dcf-b93f-377aaa58833f", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : -2.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.69719224062738, "Y" : -5.4037436791634805, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "e2b27fc0-a3ff-4945-be64-81307f6e73f3", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.69719224062738, "Y" : -5.4037436791634805, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 7.0, "Y" : -9.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }] }, { "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "c6abc02c-7601-4a5d-b754-fe59d4301c36", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "44442276-5ec4-48f5-aecf-989c7da70ae4", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "51759788-2c14-4636-81e5-1daf759562ec", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 7.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "cd2249ab-f618-4949-8e9c-cbbabe440f64", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 7.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 7.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "54614fdc-0a3e-4883-bce8-bfdfe4440664", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 7.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }] }], "Property" : null, "OrientationAngle" : 0.0 }], "Outputs" : [[9019.1902958854189, 8970.8731360763886, 9000.0, 8997.0, 8992.0, 9000.0, 8987.0, 9005.0, 9000.0, 9002.0, 9018.0, 9000.0, 9014.0, 9012.0, 9000.0, 9021.0, 8995.0, 9000.0, 10008.0, 9988.0, 10000.0, 10018.817347903117, 9982.8486324412534, 10000.0, 10019.190295885419, 9970.8731360763886, 10000.0, 11002.0, 11005.605551275465, 11000.0, 10998.84043133207, 11000.263012425883, 11000.0, 11005.044267628704, 11000.068049015936, 11000.0, 9007.0, 8991.0, 9000.0, 9008.0, 8999.0, 9000.0, 9012.0, 8998.0, 9000.0, 9012.6971922406283, 8994.5962563208359, 9000.0, 9007.0, 8991.0, 9000.0, 9006.0, 9005.0, 9000.0, 9012.0, 9005.0, 9000.0, 9012.0, 9007.0, 9000.0, 9006.0, 9007.0, 9000.0, 9006.0, 9005.0, 9000.0]] }] }], "_bhomVersion" : "6.0" } \ No newline at end of file From ce98f1b179d8630552fef2ad3e01db614d1ce2c1 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Tue, 8 Nov 2022 12:53:44 +0000 Subject: [PATCH 35/44] Update Geometry_Engine/Query/GeometryHash.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Isak Näslund --- Geometry_Engine/Query/GeometryHash.cs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 68cd54648..ade09dcd4 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -231,17 +231,25 @@ private static double[] GeometryHash(this NurbsSurface obj, double translationFa { translationFactor += (int)TypeTranslationFactor.NurbsSurface; + var uv = obj.UVCount(); + + List uKnots = obj.UKnots.ToList(); + List vKnots = obj.VKnots.ToList(); + List concatenated = new List(); - for (int i = 0; i < obj.ControlPoints.Count(); i++) + for (int i = 0; i < uv[0]; i++) { - double UKnotsSum = obj.UKnots.ToList().GetRange(i, obj.UDegree).Sum(); - double VKnotsSum = obj.VKnots.ToList().GetRange(i, obj.VDegree).Sum(); - - double[] doubles = obj.ControlPoints[i].GeometryHash(UKnotsSum + VKnotsSum + obj.Weights[i] + translationFactor); - concatenated.AddRange(doubles); + double uSum = uKnots.GetRange(i, obj.UDegree).Sum(); + for (int j = 0; j < uv[1]; j++) + { + int ptIndex = i * uv[1] + j; + double vSum = vKnots.GetRange(j, obj.VDegree).Sum(); + double[] doubles = obj.ControlPoints[ptIndex].GeometryHash(uSum + vSum + obj.Weights[ptIndex] + translationFactor); + concatenated.AddRange(doubles); + } } - return obj.ControlPoints.ToDoubleArray(translationFactor) + return concatenated .Concat(obj.InnerTrims.SelectMany(it => it.GeometryHash(translationFactor))) .Concat(obj.OuterTrims.SelectMany(it => it.GeometryHash(translationFactor))).ToArray(); } From 0eadf1f0f23fc0618a072ff941b34dedfe26c9f7 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Tue, 8 Nov 2022 13:07:34 +0000 Subject: [PATCH 36/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index ade09dcd4..01241a698 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -231,7 +231,7 @@ private static double[] GeometryHash(this NurbsSurface obj, double translationFa { translationFactor += (int)TypeTranslationFactor.NurbsSurface; - var uv = obj.UVCount(); + List uv = obj.UVCount(); List uKnots = obj.UKnots.ToList(); List vKnots = obj.VKnots.ToList(); From 84386ed0c1d3a5520682429d3a3c4b86e37175c1 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Wed, 9 Nov 2022 09:09:18 +0000 Subject: [PATCH 37/44] Update Geometry_Engine/Query/GeometryHash.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Isak Näslund --- Geometry_Engine/Query/GeometryHash.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 01241a698..710ede8b5 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -100,7 +100,7 @@ private static double[] GeometryHash(this Arc curve, double translationFactor, b [Description("The GeometryHash for an Circle is calculated as the GeometryHash of the start, 1/3rd and 2/3rd points of the Circle.")] private static double[] GeometryHash(this Circle curve, double translationFactor, bool skipEndPoint = false) { - // The input `skipEndPoint` is not used here because Ellipses cannot be part of Polycurves. + // The input `skipEndPoint` is not used here because Circles do not have a clearly defined endpoint to be used in a chain of segment curves. translationFactor += (int)TypeTranslationFactor.Circle; From 4b085272c3bcf0baec865c79e6d95c747b844374 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Wed, 9 Nov 2022 09:09:36 +0000 Subject: [PATCH 38/44] Update Geometry_Engine/Query/GeometryHash.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Isak Näslund --- Geometry_Engine/Query/GeometryHash.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 710ede8b5..44991ca9b 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -116,7 +116,7 @@ private static double[] GeometryHash(this Circle curve, double translationFactor [Description("The GeometryHash for an Ellipse is calculated as the GeometryHash of the start, 1/3rd and 2/3rd points of the Ellipse.")] private static double[] GeometryHash(this Ellipse curve, double translationFactor, bool skipEndPoint = false) { - // The input `skipEndPoint` is not used here because Ellipses cannot be part of Polycurves. + // The input `skipEndPoint` is not used here because Ellipses do not have a clearly defined endpoint to be used in a chain of segment curves. translationFactor += (int)TypeTranslationFactor.Ellipse; From 57ad15f192141b98e8948bee5b19bc75addc5aa2 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Wed, 9 Nov 2022 09:10:46 +0000 Subject: [PATCH 39/44] Update Geometry_Engine/Query/GeometryHash.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Isak Näslund --- Geometry_Engine/Query/GeometryHash.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 44991ca9b..e210ee7cb 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -265,7 +265,7 @@ private static double[] GeometryHash(this Pipe obj, double translationFactor) double[] result = obj.Centreline.GeometryHash(translationFactor + obj.Radius); if (obj.Capped) - result.Concat(obj.Centreline.StartPoint().GeometryHash(translationFactor + obj.Radius)); + result.Concat(obj.Centreline.IStartPoint().GeometryHash(translationFactor + obj.Radius)); return result; } From bd662bd14fae439399b59b233b50d7c2be004685 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Wed, 9 Nov 2022 11:32:00 +0000 Subject: [PATCH 40/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index e210ee7cb..24334730f 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -219,7 +219,7 @@ private static double[] GeometryHash(this Loft obj, double translationFactor) { translationFactor += (int)TypeTranslationFactor.Loft; - return obj.Curves.GeometryHash(translationFactor); + return obj.Curves.SelectMany(c => c.GeometryHash(translationFactor)).ToArray(); } /***************************************************/ @@ -366,7 +366,7 @@ private static double[] GeometryHash(this Mesh3D obj, double translationFactor) /***************************************************/ - /**** Vector ****/ + /**** Other methods ****/ /***************************************************/ [Description("The GeometryHash for a Point is simply an array of 3 numbers composed by the Point X, Y and Z coordinates.")] @@ -375,9 +375,14 @@ private static double[] GeometryHash(this Point obj, double translationFactor) return obj.ToDoubleArray(translationFactor); } - /***************************************************/ - /**** Other methods ****/ + + [Description("The GeometryHash for a Point is simply an array of 3 numbers composed by the Point X, Y and Z coordinates.")] + private static double[] GeometryHash(this CompositeGeometry obj, double translationFactor) + { + return obj.Elements.SelectMany(c => c.IGeometryHash()).ToArray(); + } + /***************************************************/ // Fallback From d32c1a7c000e1dfd01eaa217081027520d2f4758 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Wed, 9 Nov 2022 11:42:24 +0000 Subject: [PATCH 41/44] Update GeometryHash.json --- .ci/Datasets/BHoM_Engine/Query/GeometryHash.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/Datasets/BHoM_Engine/Query/GeometryHash.json b/.ci/Datasets/BHoM_Engine/Query/GeometryHash.json index 4de15eeaf..815515c03 100644 --- a/.ci/Datasets/BHoM_Engine/Query/GeometryHash.json +++ b/.ci/Datasets/BHoM_Engine/Query/GeometryHash.json @@ -1 +1 @@ -{ "_t" : "BH.oM.Data.Library.Dataset", "BHoM_Guid" : "037ee8b4-c262-49f9-b564-ca6ac0ac6793", "Name" : "GeometryHash", "Fragments" : [], "Tags" : [], "CustomData" : { }, "SourceInformation" : { "_t" : "BH.oM.Data.Library.Source", "BHoM_Guid" : "74131ea2-f066-4a62-b8e6-1ec7207add55", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "SourceLink" : "", "Title" : "GeometryHash", "Author" : "Alessio Lombardi", "ItemReference" : "", "Version" : "", "Publisher" : "", "Schema" : "", "Language" : "", "Location" : "", "Copyright" : "", "Contributors" : "", "Confidence" : "Undefined" }, "TimeOfCreation" : { "$date" : 1667820685882 }, "Data" : [{ "_t" : "BH.oM.Test.UnitTests.UnitTest", "BHoM_Guid" : "b1ee04f6-216f-4a0a-a1f6-c0c55ef25af6", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Method" : { "_t" : "System.Reflection.MethodBase", "TypeName" : "{ \"_t\" : \"System.Type\", \"Name\" : \"BH.Engine.Base.Query, BHoM_Engine, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null\", \"_bhomVersion\" : \"6.0\" }", "MethodName" : "GeometryHash", "Parameters" : ["{ \"_t\" : \"System.Type\", \"Name\" : \"BH.oM.Base.IBHoMObject\", \"_bhomVersion\" : \"6.0\" }"], "_bhomVersion" : "6.0" }, "Data" : [{ "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "c94d1aae-387e-4161-adc6-bdd8801ea499", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "_t" : "BH.oM.Structure.Elements.Bar", "BHoM_Guid" : "28f15ace-ebd7-422c-aac0-cacb2179c1d8", "Name" : "tylf2d3hzlz", "Fragments" : [], "Tags" : [], "CustomData" : { "in1neuk0ndi" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.67219245884203938, "Y" : 0.37923656794207011, "Z" : 0.86616781953078126 }, "nis00xkhmdo" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.78663488607231291, "Y" : 0.51996000880373638, "Z" : 0.82963650712260817 }, "gscok3p0224" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.52251069877413603, "Y" : 0.16290920375050474, "Z" : 0.63418533961949186 }, "5c3vcq1cnj4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.31461000783117954, "Y" : 0.24995057156772846, "Z" : 0.80063021453126815 }, "3k1jrldsmiw" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.92160075852721968, "Y" : 0.33739710288932412, "Z" : 0.19225228260841792 } }, "StartNode" : { "_t" : "BH.oM.Structure.Elements.Node", "BHoM_Guid" : "109ef8c9-1c90-4c90-bb6c-7ef9e92dc959", "Name" : "ln3hhsmqpwo", "Fragments" : [], "Tags" : [], "CustomData" : { "lro20ui4dbh" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34314184465591879, "Y" : 0.95745516566441169, "Z" : 0.50512921274878508 }, "3l0ixo1ws2j" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.1189577291342233, "Y" : 0.27345148347013232, "Z" : 0.90709795006881377 }, "nfex0z1kjeo" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.3371603392703274, "Y" : 0.45720878776964208, "Z" : 0.14682504029331031 }, "okh5qc0qn2h" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.41007327959410533, "Y" : 0.71872683275431715, "Z" : 0.61983028362497239 }, "p5t2ekbpy5w" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.19491343674944409, "Y" : 0.87819148687561577, "Z" : 0.82542318423531169 }, "uwjg2500i4a" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.85821920766412241, "Y" : 0.67974901137861843, "Z" : 0.62486613570939109 } }, "Position" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.72624326996795985, "Y" : 0.81732535959096875, "Z" : 0.76802268939466345 }, "Orientation" : { "_t" : "BH.oM.Geometry.Basis", "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.5581611914365372, "Y" : 0.2060331540210327, "Z" : 0.55888479461841511 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.90602706601192573, "Y" : 0.44217787331071584, "Z" : 0.97754975314137982 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27370445768987034, "Y" : 0.29190628476995334, "Z" : 0.46731470034798361 } }, "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "50b437f8-a6a8-4f96-8774-89780b43dfad", "Name" : "wxwwqmafqw4", "Fragments" : [], "Tags" : [], "CustomData" : { "3rpmsl23qjl" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.5262841426424143, "Y" : 0.93401865890902402, "Z" : 0.68762028249335483 }, "iobbt2w0d2s" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.081109949891041005, "Y" : 0.18712457417842213, "Z" : 0.45332718521977178 }, "m5g3vlqmxoy" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.98854377911823976, "Y" : 0.64269747289023249, "Z" : 0.76296358823914245 } }, "TranslationalStiffnessX" : 0.63265907281667877, "TranslationalStiffnessY" : 0.46951187842968473, "TranslationalStiffnessZ" : 0.98215125314060192, "RotationalStiffnessX" : 0.030366990729406004, "RotationalStiffnessY" : 0.86237015382497118, "RotationalStiffnessZ" : 0.99534708121574811, "TranslationX" : "SpringRelativeNegative", "TranslationY" : "Spring", "TranslationZ" : "NonLinear", "RotationX" : "Friction", "RotationY" : "Damped", "RotationZ" : "Free" } }, "EndNode" : { "_t" : "BH.oM.Structure.Elements.Node", "BHoM_Guid" : "ba2d683b-86b2-4976-97e4-e19a7ab52816", "Name" : "3fxxumrw1kv", "Fragments" : [], "Tags" : [], "CustomData" : { "r5lenaawtif" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.62462275923445021, "Y" : 0.6930450455718884, "Z" : 0.63039438223018984 }, "sbpprsdb3iz" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.22134204172591773, "Y" : 0.92870763266864587, "Z" : 0.066521596194487803 }, "ra1gkwrq5ax" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.67850547222350976, "Y" : 0.093978040429753273, "Z" : 0.149097432917495 } }, "Position" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.89536243905097357, "Y" : 0.89643980325033878, "Z" : 0.086579883511448227 }, "Orientation" : { "_t" : "BH.oM.Geometry.Basis", "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.83857909955018162, "Y" : 0.17014283461968546, "Z" : 0.64411529369843901 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.82681440553945229, "Y" : 0.21918766490145944, "Z" : 0.99997269781305109 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.48136564692545947, "Y" : 0.65220523655982932, "Z" : 0.71972598355250716 } }, "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "21a86303-c3b0-4efd-9ef1-6d482caf63bd", "Name" : "biupv0ysyac", "Fragments" : [], "Tags" : [], "CustomData" : { "gychbrjoizc" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.80920381322931678, "Y" : 0.7936303423687957, "Z" : 0.76450598601461672 }, "d3rckjr3vvr" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.29499680190114158, "Y" : 0.52278529923538919, "Z" : 0.66339283327730036 }, "kj4syxf1z3z" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.28672242923021429, "Y" : 0.82061007331153846, "Z" : 0.2225179258838845 } }, "TranslationalStiffnessX" : 0.80946258027547158, "TranslationalStiffnessY" : 0.10093539631969081, "TranslationalStiffnessZ" : 0.72909405395812077, "RotationalStiffnessX" : 0.71845069188552479, "RotationalStiffnessY" : 0.12552724831063639, "RotationalStiffnessZ" : 0.90517638991827909, "TranslationX" : "FixedNegative", "TranslationY" : "SpringPositive", "TranslationZ" : "SpringRelative", "RotationX" : "Spring", "RotationY" : "SpringRelativeNegative", "RotationZ" : "SpringPositive" } }, "SectionProperty" : { "_t" : "BH.oM.Structure.SectionProperties.AluminiumSection", "BHoM_Guid" : "b1e9cab1-11e8-48f1-9d4f-02b9fa32af76", "Name" : null, "Fragments" : [], "Tags" : [], "CustomData" : { }, "Material" : null, "SectionProfile" : { "_t" : "BH.oM.Spatial.ShapeProfiles.AngleProfile", "BHoM_Guid" : "34c1406d-8444-40ab-9eed-73d478a7a7d7", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Shape" : "Angle", "Height" : 0.6098702427045769, "Width" : 0.95304281774584332, "WebThickness" : 0.49062520800653159, "FlangeThickness" : 0.14805626457000909, "RootRadius" : 0.6776115413185263, "ToeRadius" : 0.5698617443302002, "MirrorAboutLocalZ" : false, "MirrorAboutLocalY" : true, "Edges" : [] }, "Area" : 0.36093902139036871, "Rgy" : 0.8504849513296433, "Rgz" : 0.062308419524835616, "J" : 0.28164726089762859, "Iy" : 0.70497589591190957, "Iz" : 0.95858034769007017, "Iw" : 0.98881240328252895, "Wely" : 0.38713695359748646, "Welz" : 0.52274015104525728, "Wply" : 0.28032532300815233, "Wplz" : 0.50657612807423624, "CentreZ" : 0.53157909192684061, "CentreY" : 0.057008397792004235, "Vz" : 0.28055363068382888, "Vpz" : 0.4960787578001985, "Vy" : 0.84641548890919216, "Vpy" : 0.61315786680819362, "Asy" : 0.10415865299485561, "Asz" : 0.74232903762828983 }, "OrientationAngle" : 0.40187614522961718, "Release" : { "_t" : "BH.oM.Structure.Constraints.BarRelease", "BHoM_Guid" : "fd32b3d1-eb54-4999-995d-0585373a3746", "Name" : "3zha3k40ajs", "Fragments" : [], "Tags" : [], "CustomData" : { "go4u0e2vj1z" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.12118609627764025, "Y" : 0.19491076525063755, "Z" : 0.49651680909866319 }, "xtthogsabjl" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.26166441490019876, "Y" : 0.31036315826250388, "Z" : 0.24213605804468322 }, "vj2odjsmkqu" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.13305996969950384, "Y" : 0.61250376636744652, "Z" : 0.55929009968381849 }, "rgb4isn0pad" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34102778664837952, "Y" : 0.023311249456978985, "Z" : 0.097285922196361202 }, "stqykneecya" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.71087234267539923, "Y" : 0.89213904454006765, "Z" : 0.65126434138569256 } }, "StartRelease" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "14fe3328-290f-41cd-a4a0-3bdc90e00426", "Name" : "klzpsvmoibk", "Fragments" : [], "Tags" : [], "CustomData" : { "bbugieqbvuv" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.063436652563249998, "Y" : 0.2636837378440815, "Z" : 0.84256009424224498 }, "qdux50ooza4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.64599011449422228, "Y" : 0.51636614581400819, "Z" : 0.9701272849785757 } }, "TranslationalStiffnessX" : 0.93339260152233416, "TranslationalStiffnessY" : 0.13069834100580696, "TranslationalStiffnessZ" : 0.69965230193904238, "RotationalStiffnessX" : 0.61540855309712172, "RotationalStiffnessY" : 0.83056791165404387, "RotationalStiffnessZ" : 0.68512655919656462, "TranslationX" : "SpringRelative", "TranslationY" : "FixedNegative", "TranslationZ" : "FixedNegative", "RotationX" : "SpringRelative", "RotationY" : "FixedPositive", "RotationZ" : "Damped" }, "EndRelease" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "bd451b8d-71d3-4f59-bf7a-5ae85bd95565", "Name" : "cf10j0bvwc3", "Fragments" : [], "Tags" : [], "CustomData" : { "x4rjbcp5nzt" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.071689596433047953, "Y" : 0.23024068038456175, "Z" : 0.15083264939060093 }, "l2yqkynplpx" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.45107934924358473, "Y" : 0.019849336715344962, "Z" : 0.3888378662005243 }, "0vlpo4lpjhf" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.20260418821247489, "Y" : 0.91362926313356929, "Z" : 0.029576994026814119 }, "smmechhusp5" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.96288963405549977, "Y" : 0.99357174522875424, "Z" : 0.016869892839747432 }, "iw4edemwrwq" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.27832952620383794, "Y" : 0.96716775231397145, "Z" : 0.58779250718084741 }, "1x4lbcydx02" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.3241669523176583, "Y" : 0.42042525504735545, "Z" : 0.97493301982755443 }, "fp5zep3amxc" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.97288724825386297, "Y" : 0.25517451123109763, "Z" : 0.13226471428399195 }, "sulqftlcb01" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.17822117506443577, "Y" : 0.88289198972419458, "Z" : 0.54465721340135542 }, "wppp014s52o" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.51404069760536808, "Y" : 0.3523834610136149, "Z" : 0.99174705613020209 } }, "TranslationalStiffnessX" : 0.51296734647497877, "TranslationalStiffnessY" : 0.15576532117825248, "TranslationalStiffnessZ" : 0.81365271742160095, "RotationalStiffnessX" : 0.64252130484325876, "RotationalStiffnessY" : 0.57539340042294629, "RotationalStiffnessZ" : 0.55286184491257273, "TranslationX" : "SpringRelativeNegative", "TranslationY" : "Damped", "TranslationZ" : "FixedPositive", "RotationX" : "Free", "RotationY" : "SpringPositive", "RotationZ" : "SpringPositive" } }, "FEAType" : "Flexural", "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint4DOF", "BHoM_Guid" : "2f7b1f8f-912c-47e7-b7a9-05d97caf93f0", "Name" : "ilyzp2mpkfo", "Fragments" : [], "Tags" : [], "CustomData" : { "ro5bqyzxjrm" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.61050617304188481, "Y" : 0.0018246890985521903, "Z" : 0.98342683538022768 }, "5szq1mv3lmn" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.1571434299261977, "Y" : 0.7722569870633339, "Z" : 0.091275698082184276 }, "hesgb4w3dx2" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.06250253741745955, "Y" : 0.11006209678485156, "Z" : 0.73279696178287124 } }, "TranslationX" : "SpringPositive", "TranslationY" : "FixedNegative", "TranslationZ" : "Friction", "RotationX" : "SpringPositive", "TranslationalStiffnessX" : 0.63782360294732432, "TranslationalStiffnessY" : 0.31971219848828025, "TranslationalStiffnessZ" : 0.36897204973221387, "RotationalStiffnessX" : 0.24453175638082053 }, "Offset" : { "_t" : "BH.oM.Structure.Offsets.Offset", "BHoM_Guid" : "8f266c9c-04a7-427c-b551-ed472c3f0db7", "Name" : "e11124wzo4r", "Fragments" : [], "Tags" : [], "CustomData" : { "ohcuxspwcyt" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.90713465349149647, "Y" : 0.80316835492996885, "Z" : 0.46024441647354719 }, "45d1u4sc2i3" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77813539690251243, "Y" : 0.42689437997848467, "Z" : 0.64717347810378922 }, "5fyvqoz2ez3" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.60893218666731019, "Y" : 0.089704847005058472, "Z" : 0.62384081195287444 }, "3newj04kx3z" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.87316400831246932, "Y" : 0.53954396701396623, "Z" : 0.13763933216111704 } }, "Start" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.83982727855435912, "Y" : 0.64267074486365106, "Z" : 0.57297461460017352 }, "End" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.24163400020526443, "Y" : 0.83719338841605628, "Z" : 0.85958074026721565 } } }], "Outputs" : [[2000.7262432699679, 2000.817325359591, 2000.7680226893947, 2000.895362439051, 2000.8964398032504, 2000.0865798835114]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "3887fd12-cdf4-4575-93bc-5d2158c36a83", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "BHoM_Guid" : "ab517b73-4875-4493-9abd-b0002b146e36" }], "Outputs" : [[3000.7787120751814, 3000.4051314348089, 3000.1643999787289, 3000.7788009561323, 3000.4051117688214, 3000.1648889798003, 3000.7788583765132, 3000.4050923871605, 3000.1653826759343]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "9b305058-b3b0-4c54-9aaa-605035fcbabe", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Circle", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "Normal" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Radius" : 0.80214046118880644 }, "BHoM_Guid" : "e97a38c4-e2ea-4214-ad6c-2d3930b4eb68" }], "Outputs" : [[4000.7710938983464, 4001.1599801248626, 3999.8973554484319, 4000.5505632580807, 4000.2635726973858, 4000.9243060202639, 4000.9835767907457, 3999.7838044638934, 3999.7040071884289]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "bb25c434-8d2a-4831-b595-50352e764e57", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Infinite" : true }, "BHoM_Guid" : "8c36cd3b-4a07-49e9-8db1-649289076c58" }], "Outputs" : [[2000.7710938983462, 2000.4041625947712, 2000.1659986703498, 2000.9850470526073, 2000.1090046335519, 2000.3066804079835]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "af7ec136-8899-4e77-8de7-310052ad6111", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.NurbsCurve", "ControlPoints" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Weights" : [0.38209498458639485, 0.70308829411076768, 0.73132192191263745], "Knots" : [0.33872517819456999, 0.73131695703198996, 0.81265016357072173, 0.92683620188703586] }, "BHoM_Guid" : "bf876b30-a3bb-4a89-af27-5e52e15501c6" }], "Outputs" : [[6001.8562997145837, 6001.6181357901623, 6002.4371841724196, 6002.5537358226966, 6003.0491958759021, 6002.6926020936535, 6002.4820149403449, 6003.2361756280234, 6002.4995518780779]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "3b6665c9-b036-4e84-8b04-6ee2db8c901a", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.PlanarSurface", "ExternalBoundary" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "InternalBoundaries" : [{ "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.70308829411076768, "Y" : 0.23534573532424202, "Z" : 0.73132192191263745 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.089001557831187531, "Y" : 0.082648985126357988, "Z" : 0.33872517819456999 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.32991219606712097, "Y" : 0.73131695703198996, "Z" : 0.89595341072229362 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.81265016357072173, "Y" : 0.6535485864866285, "Z" : 0.92683620188703586 } }, "Radius" : 0.099241426260788662, "StartAngle" : 0.69182913130700086, "EndAngle" : 0.92548005745070061 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.10141979861139311, "Y" : 0.038685026130958006, "Z" : 0.34105472003158865 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.84963962149323879, "Y" : 0.68709290525274958, "Z" : 0.74400214280188182 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.68564566256741322, "Y" : 0.093061322855326034, "Z" : 0.040521103907619184 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27162018756923273, "Y" : 0.26325112640077769, "Z" : 0.49977948493313951 } }, "Radius" : 0.96156990526317143, "StartAngle" : 0.55604546636158858, "EndAngle" : 0.017603008084745617 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34221245876616446, "Y" : 0.48565348167235661, "Z" : 0.642432012894392 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.62012774107052371, "Y" : 0.073345340822518493, "Z" : 0.89542187652337457 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.59537276280828411, "Y" : 0.43236872015165573, "Z" : 0.074250398703967407 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.43468171331783834, "Y" : 0.089093641885134231, "Z" : 0.29635446998120957 } }, "Radius" : 0.65313182149693916, "StartAngle" : 0.87530425930177058, "EndAngle" : 0.34630525267976581 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.085726595523639856, "Y" : 0.78522651120332376, "Z" : 0.92732379209591254 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.96887616439204483, "Y" : 0.16896769691676261, "Z" : 0.53245536309315611 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.59231587806358743, "Y" : 0.95908615130888586, "Z" : 0.54970007275682875 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.63826059905731147, "Y" : 0.04848045392356834, "Z" : 0.8110287975571252 } }, "Radius" : 0.07547405179379231, "StartAngle" : 0.83013271113398146, "EndAngle" : 0.76974705176881841 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.79504715548597604, "Y" : 0.16500800902257115, "Z" : 0.5846237431208714 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.61358794458843202, "Y" : 0.049397118412608798, "Z" : 0.30535231638017685 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.9067954886270666, "Y" : 0.20599792208801859, "Z" : 0.44331226332267387 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.90868599987993293, "Y" : 0.77538922278927136, "Z" : 0.25241119193491118 } }, "Radius" : 0.65490850091674757, "StartAngle" : 0.38929119258620365, "EndAngle" : 0.43992950135838682 }] }, "BHoM_Guid" : "1434e351-5cb8-4405-a768-b9b9fde032ff" }], "Outputs" : [[10000.778712075182, 10000.405131434809, 10000.164399978728, 10000.778800956132, 10000.405111768821, 10000.1648889798, 10000.778858376512, 10000.40509238716, 10000.165382675934, 10000.720653675517, 10000.236287342963, 10000.762400354579, 10000.72228226317, 10000.235631057947, 10000.76143518093, 10000.723897868476, 10000.235170878588, 10000.76034310841, 10000.754330783582, 10000.856103825246, 10001.063081715265, 10000.842278036596, 10000.789595066704, 10001.050316597948, 10000.91437777102, 10000.705358374826, 10001.055502206224, 10000.850239797866, 10000.363035758963, 10001.127445112959, 10000.812373915058, 10000.400677466097, 10001.171669079082, 10000.779359926582, 10000.45192650311, 10001.204685668044, 10000.144606963835, 10000.819053089304, 10000.977460829932, 10000.145332461352, 10000.81857904457, 10000.976918217171, 10000.146047163445, 10000.818077904732, 10000.976385719803, 10001.232588971099, 10000.187132633697, 10000.687501933207, 10001.234073128291, 10000.187550619499, 10000.680874911099, 10001.23544807219, 10000.18810110609, 10000.674234026328]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "a085d8fe-51da-42d8-a1e8-078e4071d702", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Extrusion", "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Direction" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27940878331633695, "Y" : 0.70308829411076768, "Z" : 0.23534573532424202 }, "Capped" : true }, "BHoM_Guid" : "d18cfa48-970d-4271-b199-5126a56da99b" }], "Outputs" : [[12001.058120858497, 12001.10821972892, 12000.399745714054, 12001.058209739449, 12001.108200062932, 12000.400234715124, 12001.058267159829, 12001.108180681271, 12000.400728411259, 12000.778712075182, 12000.405131434809, 12000.164399978728, 12000.778800956132, 12000.405111768821, 12000.1648889798, 12000.778858376512, 12000.40509238716, 12000.165382675934]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "06f6bfa1-a93e-401b-b3f3-31e8edbcfd86", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Loft", "Curves" : [{ "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.10900463355193131, "Y" : 0.30668040798356777, "Z" : 0.80214046118880644 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.44554667894055444, "Y" : 0.22498315396950727, "Z" : 0.011206652974340437 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.76536734065290879, "Y" : 0.028743590707305627, "Z" : 0.0075611905230028508 } }, "Radius" : 0.51002241694835126, "StartAngle" : 0.38209498458639485, "EndAngle" : 0.27940878331633695 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.23534573532424202, "Y" : 0.73132192191263745, "Z" : 0.089001557831187531 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.082648985126357988, "Y" : 0.33872517819456999, "Z" : 0.32991219606712097 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.73131695703198996, "Y" : 0.89595341072229362, "Z" : 0.81265016357072173 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.6535485864866285, "Y" : 0.92683620188703586, "Z" : 0.099241426260788662 } }, "Radius" : 0.69182913130700086, "StartAngle" : 0.92548005745070061, "EndAngle" : 0.98014082944958514 }] }, "BHoM_Guid" : "371d203d-7ad7-47d6-81c5-0af78d138d55" }], "Outputs" : [[]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "14c358b6-5afc-4c89-a712-8839a43d7219", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.PolySurface", "Surfaces" : [{ "_t" : "BH.oM.Geometry.Extrusion", "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.10900463355193131, "Y" : 0.30668040798356777, "Z" : 0.80214046118880644 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.44554667894055444, "Y" : 0.22498315396950727, "Z" : 0.011206652974340437 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.76536734065290879, "Y" : 0.028743590707305627, "Z" : 0.0075611905230028508 } }, "Radius" : 0.51002241694835126, "StartAngle" : 0.38209498458639485, "EndAngle" : 0.27940878331633695 }, "Direction" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.70308829411076768, "Y" : 0.23534573532424202, "Z" : 0.73132192191263745 }, "Capped" : false }] }, "BHoM_Guid" : "1dc30c10-79c2-4b6e-b97a-6eee71a169f3" }], "Outputs" : [[12001.168702396919, 12000.394432523502, 12002.153521924705, 12001.167862198594, 12000.416831767478, 12002.153419514583, 12001.167034652643, 12000.439196668336, 12002.152166945618, 12000.465614102808, 12000.159086788179, 12001.422200002791, 12000.464773904483, 12000.181486032154, 12001.422097592671, 12000.463946358532, 12000.203850933012, 12001.420845023704]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "6519a79d-687c-4980-83d9-d5c212b14b5f", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.SurfaceTrim", "Curve3d" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Curve2d" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.27940878331633695, "Y" : 0.70308829411076768, "Z" : 0.23534573532424202 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.73132192191263745, "Y" : 0.089001557831187531, "Z" : 0.082648985126357988 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.33872517819456999, "Y" : 0.32991219606712097, "Z" : 0.73131695703198996 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.89595341072229362, "Y" : 0.81265016357072173, "Z" : 0.6535485864866285 } }, "Radius" : 0.92683620188703586, "StartAngle" : 0.099241426260788662, "EndAngle" : 0.69182913130700086 } }, "BHoM_Guid" : "37315978-4264-4f1a-b84a-632bf6506d39" }], "Outputs" : [[15000.778712075182, 15000.405131434809, 15000.164399978728, 15000.778800956132, 15000.405111768821, 15000.1648889798, 15000.778858376512, 15000.40509238716, 15000.165382675934, 15000.956179695089, 15000.813682085993, 15000.278434400903, 15000.933737578216, 15000.908165647621, 15000.191715537416, 15000.884193728323, 15001.011917450556, 15000.130626065018]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "3c545a48-a4c5-4dc4-8441-6725c1983b8d", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Environment.Elements.Mesh", "BHoM_Guid" : "9b4123be-af3a-4027-bfc9-2900854e9da4", "Name" : "xoyxys0cpp5", "Fragments" : [], "Tags" : [], "CustomData" : { "30a315d11ah" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.37916821119336791, "Y" : 0.9100187881430698, "Z" : 0.23675364406628238 }, "2pljfdnziko" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.89863010258350062, "Y" : 0.011517720302342306, "Z" : 0.82803786584550421 } }, "Mesh3D" : { "_t" : "BH.oM.Geometry.Mesh3D", "Vertices" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Faces" : [{ "_t" : "BH.oM.Geometry.Face", "A" : 820542731, "B" : 600025793, "C" : 1509870614, "D" : 505401118 }, { "_t" : "BH.oM.Geometry.Face", "A" : 191129390, "B" : 177487344, "C" : 727406781, "D" : 708481046 }, { "_t" : "BH.oM.Geometry.Face", "A" : 1924045298, "B" : 1745152937, "C" : 1403484902, "D" : 1990365587 }], "CellRelation" : [{ "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1987453289, "ToCell" : 2104836403 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 83075461, "ToCell" : 732409434 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1475520778, "ToCell" : 1597732435 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 199847669, "ToCell" : 87018408 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 565327489, "ToCell" : 1073268271 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1194098546, "ToCell" : 37802172 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 734895659, "ToCell" : 1042932910 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1331714183, "ToCell" : 157507920 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1278553272, "ToCell" : 928504756 }] }, "BounderyZones" : [{ "_t" : "BH.oM.Environment.Elements.BoundaryZone", "BHoM_Guid" : "6a56cd92-0bdf-434b-98a8-7f8973433263", "Name" : "lztjkhqadg4", "Fragments" : [], "Tags" : [], "CustomData" : { "0xy30nua2m3" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.92732379209591254, "Y" : 0.96887616439204483, "Z" : 0.16896769691676261 }, "hi0cmxhonzn" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.59231587806358743, "Y" : 0.95908615130888586, "Z" : 0.54970007275682875 }, "crjvrdmlm3m" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.04848045392356834, "Y" : 0.8110287975571252, "Z" : 0.07547405179379231 }, "p0yh3l3yht0" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.76974705176881841, "Y" : 0.33990794436070504, "Z" : 0.79504715548597604 } }, "FaceIndices" : [636416378, 1879701583, 1144939545] }, { "_t" : "BH.oM.Environment.Elements.BoundaryZone", "BHoM_Guid" : "7b6f46ec-f744-48db-8862-60c1fff4295c", "Name" : "303gtl5dtmy", "Fragments" : [], "Tags" : [], "CustomData" : { "suj5onigpq1" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.73009710373827119, "Y" : 0.41405288940949964, "Z" : 0.17634339405984775 }, "rv2cxbvwbne" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.048726843692700771, "Y" : 0.31957288054729482, "Z" : 0.80975709567300835 }, "hfc13nttgwo" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.68334586158550614, "Y" : 0.070427668313694958, "Z" : 0.43508474176520701 }, "khr1s2ijlw4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.7843439652511589, "Y" : 0.35689466835786338, "Z" : 0.24411768756998595 }, "de2lggpjzf3" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.74918569752442921, "Y" : 0.50130731449523347, "Z" : 0.48812381247436804 } }, "FaceIndices" : [106079504, 1947328483, 952005836, 1665135676, 1406405296, 944741410] }, { "_t" : "BH.oM.Environment.Elements.BoundaryZone", "BHoM_Guid" : "3772716f-c116-4846-9766-53b4a5c28b0f", "Name" : "yza1huyl3cq", "Fragments" : [], "Tags" : [], "CustomData" : { "f4hc3kwkuvs" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.88571386266765828, "Y" : 0.3453769480555211, "Z" : 0.41607982172448182 }, "yajo0wvbibh" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.71118627009502899, "Y" : 0.74632031179327529, "Z" : 0.84543512847527635 }, "go5el0hutyy" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.7202503409796629, "Y" : 0.3660512568271026, "Z" : 0.23492464806648189 }, "fyroq4bdtil" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.35905649948821239, "Y" : 0.65896829807151491, "Z" : 0.55179133152206961 }, "qo3bklurfmd" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.5874765303858912, "Y" : 0.90572280339231848, "Z" : 0.88798387809097012 }, "iznw0ikpjw1" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.87453632842494933, "Y" : 0.19259762679813319, "Z" : 0.24634019948837357 }, "yh2yxtbmic2" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.29791237148359062, "Y" : 0.9073958042577821, "Z" : 0.52316294262332974 } }, "FaceIndices" : [1675841003, 1549035510, 558950688, 729939755, 344475447] }] }, "BHoM_Guid" : "e927e9ef-2ecb-4afe-adc0-67c97a9764f8" }], "Outputs" : [[]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "c60be5a6-3bfd-4f11-baed-4984d1f1494e", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Mesh3D", "Vertices" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Faces" : [{ "_t" : "BH.oM.Geometry.Face", "A" : 820542731, "B" : 600025793, "C" : 1509870614, "D" : 505401118 }, { "_t" : "BH.oM.Geometry.Face", "A" : 191129390, "B" : 177487344, "C" : 727406781, "D" : 708481046 }, { "_t" : "BH.oM.Geometry.Face", "A" : 1924045298, "B" : 1745152937, "C" : 1403484902, "D" : 1990365587 }], "CellRelation" : [{ "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1987453289, "ToCell" : 2104836403 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 83075461, "ToCell" : 732409434 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1475520778, "ToCell" : 1597732435 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 199847669, "ToCell" : 87018408 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 565327489, "ToCell" : 1073268271 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1194098546, "ToCell" : 37802172 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 734895659, "ToCell" : 1042932910 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1331714183, "ToCell" : 157507920 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1278553272, "ToCell" : 928504756 }] }, "BHoM_Guid" : "3388e6be-2a1e-4f78-9965-efd44c78b225" }], "Outputs" : [[14000.40416259477, 14000.165998670349, 14000.985047052607, 14000.306680407984, 14000.802140461188, 14000.44554667894, 14000.011206652975, 14000.765367340653, 14000.028743590707]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "58a03196-098d-4e14-af16-1582e5ca68da", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "BHoM_Guid" : "d082bf2f-7a90-40b8-ab40-98b21b713392" }], "Outputs" : [[0.77109389834622566, 0.4041625947710884, 0.16599867034982829]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "c0636022-96fc-4de3-b309-0481b60bafbd", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "_t" : "BH.oM.Structure.Elements.Panel", "BHoM_Guid" : "fa5f2337-68ae-4a09-8bf9-c0c859f9720d", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "ExternalEdges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "814dbe32-f4d4-4a7d-9d23-4ef0fe055e9c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 19.190295885418404, "Y" : -29.12686392361227, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -8.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "3a2f7d92-6be0-4fdc-9fbe-7ef4911a89e5", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -8.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : -13.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "39d03267-1976-4eba-9177-386d561a8c9b", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : -13.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 18.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "fe82f4b0-0c90-4708-9967-7d536b41a3fa", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 18.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 14.0, "Y" : 12.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "6d2fa1c2-f11e-4d97-9862-819df7055f6a", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 14.0, "Y" : 12.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 21.0, "Y" : -5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "910e87f9-524f-48f4-bc66-46dcac4843b5", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 21.0, "Y" : -5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -12.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "4026ac97-5cdb-464c-a28b-c6d8bb9d0761", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 9.1850339211086016, "Y" : -23.444898236674195, "Z" : 0.0 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.86956263782751309, "Y" : -0.49382265935703812, "Z" : 0.0 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : -0.49382265935703817, "Y" : -0.8695626378275132, "Z" : 0.0 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.0, "Y" : 0.0, "Z" : -1.0 } }, "Radius" : 11.506085391739717, "StartAngle" : -2.1904515725762264, "EndAngle" : 0.0 }, "Release" : null, "Support" : null }], "Openings" : [{ "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "b86c147a-bc9b-4755-8897-889f925c8af1", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "be22ba4a-aeb2-4b9a-99be-c1dc4254dc7b", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Circle", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 2.0, "Z" : 0.0 }, "Normal" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.0, "Y" : 0.0, "Z" : 1.0 }, "Radius" : 3.6055512754639896 }, "Release" : null, "Support" : null }] }, { "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "752a7163-4516-4559-9b06-6ef7214dc2e0", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "b723fc99-f47c-43b3-907f-a851faf0001c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 7.0, "Y" : -9.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -1.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "6d477a54-3725-4b37-bbe8-35d46d6c2276", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -1.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : -2.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "2ef99387-3700-4dcf-b93f-377aaa58833f", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : -2.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.69719224062738, "Y" : -5.4037436791634805, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "e2b27fc0-a3ff-4945-be64-81307f6e73f3", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.69719224062738, "Y" : -5.4037436791634805, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 7.0, "Y" : -9.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }] }, { "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "c6abc02c-7601-4a5d-b754-fe59d4301c36", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "44442276-5ec4-48f5-aecf-989c7da70ae4", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "51759788-2c14-4636-81e5-1daf759562ec", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 7.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "cd2249ab-f618-4949-8e9c-cbbabe440f64", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 7.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 7.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "54614fdc-0a3e-4883-bce8-bfdfe4440664", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 7.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }] }], "Property" : null, "OrientationAngle" : 0.0 }], "Outputs" : [[9019.1902958854189, 8970.8731360763886, 9000.0, 8997.0, 8992.0, 9000.0, 8987.0, 9005.0, 9000.0, 9002.0, 9018.0, 9000.0, 9014.0, 9012.0, 9000.0, 9021.0, 8995.0, 9000.0, 10008.0, 9988.0, 10000.0, 10018.817347903117, 9982.8486324412534, 10000.0, 10019.190295885419, 9970.8731360763886, 10000.0, 11002.0, 11005.605551275465, 11000.0, 10998.84043133207, 11000.263012425883, 11000.0, 11005.044267628704, 11000.068049015936, 11000.0, 9007.0, 8991.0, 9000.0, 9008.0, 8999.0, 9000.0, 9012.0, 8998.0, 9000.0, 9012.6971922406283, 8994.5962563208359, 9000.0, 9007.0, 8991.0, 9000.0, 9006.0, 9005.0, 9000.0, 9012.0, 9005.0, 9000.0, 9012.0, 9007.0, 9000.0, 9006.0, 9007.0, 9000.0, 9006.0, 9005.0, 9000.0]] }] }], "_bhomVersion" : "6.0" } \ No newline at end of file +{ "_t" : "BH.oM.Data.Library.Dataset", "BHoM_Guid" : "db769477-0c55-4220-8a44-67a123eb9a2f", "Name" : "GeometryHash", "Fragments" : [], "Tags" : [], "CustomData" : { }, "SourceInformation" : { "_t" : "BH.oM.Data.Library.Source", "BHoM_Guid" : "9a6d9345-1a2d-4f49-a2da-485f42da90b5", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "SourceLink" : "", "Title" : "GeometryHash", "Author" : "Alessio Lombardi", "ItemReference" : "", "Version" : "", "Publisher" : "", "Schema" : "", "Language" : "", "Location" : "", "Copyright" : "", "Contributors" : "", "Confidence" : "Undefined" }, "TimeOfCreation" : { "$date" : 1667994130404 }, "Data" : [{ "_t" : "BH.oM.Test.UnitTests.UnitTest", "BHoM_Guid" : "865e7ddd-e796-42df-bfa7-5fc5ef787aa1", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Method" : { "_t" : "System.Reflection.MethodBase", "TypeName" : "{ \"_t\" : \"System.Type\", \"Name\" : \"BH.Engine.Base.Query, BHoM_Engine, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null\", \"_bhomVersion\" : \"6.0\" }", "MethodName" : "GeometryHash", "Parameters" : ["{ \"_t\" : \"System.Type\", \"Name\" : \"BH.oM.Base.IBHoMObject\", \"_bhomVersion\" : \"6.0\" }"], "_bhomVersion" : "6.0" }, "Data" : [{ "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "74de8cbf-aa73-4f99-927c-76d22bf3b149", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "_t" : "BH.oM.Structure.Elements.Bar", "BHoM_Guid" : "1c06d2e5-5d93-42bb-8c50-e29e8652c9da", "Name" : "4osxtlbjqlt", "Fragments" : [], "Tags" : [], "CustomData" : { "3kkwrhss5es" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.67219245884203938, "Y" : 0.37923656794207011, "Z" : 0.86616781953078126 }, "2d5ceybagjg" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.78663488607231291, "Y" : 0.51996000880373638, "Z" : 0.82963650712260817 }, "2ldgxzpiuu3" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.52251069877413603, "Y" : 0.16290920375050474, "Z" : 0.63418533961949186 }, "42oxyufeehf" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.31461000783117954, "Y" : 0.24995057156772846, "Z" : 0.80063021453126815 }, "wirkigjg44q" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.92160075852721968, "Y" : 0.33739710288932412, "Z" : 0.19225228260841792 } }, "StartNode" : { "_t" : "BH.oM.Structure.Elements.Node", "BHoM_Guid" : "3a7ae0ae-a7f3-4a05-a926-d32bf2c9331f", "Name" : "5ain04yqnv1", "Fragments" : [], "Tags" : [], "CustomData" : { "zzqobkiuvm4" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34314184465591879, "Y" : 0.95745516566441169, "Z" : 0.50512921274878508 }, "syuuo1x3ft1" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.1189577291342233, "Y" : 0.27345148347013232, "Z" : 0.90709795006881377 }, "355bw0t21tc" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.3371603392703274, "Y" : 0.45720878776964208, "Z" : 0.14682504029331031 }, "f5n3ah5vlfx" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.41007327959410533, "Y" : 0.71872683275431715, "Z" : 0.61983028362497239 }, "jkjvovx5hzr" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.19491343674944409, "Y" : 0.87819148687561577, "Z" : 0.82542318423531169 }, "icwptxb5uff" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.85821920766412241, "Y" : 0.67974901137861843, "Z" : 0.62486613570939109 } }, "Position" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.72624326996795985, "Y" : 0.81732535959096875, "Z" : 0.76802268939466345 }, "Orientation" : { "_t" : "BH.oM.Geometry.Basis", "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.5581611914365372, "Y" : 0.2060331540210327, "Z" : 0.55888479461841511 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.90602706601192573, "Y" : 0.44217787331071584, "Z" : 0.97754975314137982 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27370445768987034, "Y" : 0.29190628476995334, "Z" : 0.46731470034798361 } }, "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "1ec82015-835e-4a16-a719-2414e3ca6373", "Name" : "p0ucx0bdjb2", "Fragments" : [], "Tags" : [], "CustomData" : { "kvy0wnsdn2x" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.5262841426424143, "Y" : 0.93401865890902402, "Z" : 0.68762028249335483 }, "xs1nrmntcn0" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.081109949891041005, "Y" : 0.18712457417842213, "Z" : 0.45332718521977178 }, "adqm55rkluc" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.98854377911823976, "Y" : 0.64269747289023249, "Z" : 0.76296358823914245 } }, "TranslationalStiffnessX" : 0.63265907281667877, "TranslationalStiffnessY" : 0.46951187842968473, "TranslationalStiffnessZ" : 0.98215125314060192, "RotationalStiffnessX" : 0.030366990729406004, "RotationalStiffnessY" : 0.86237015382497118, "RotationalStiffnessZ" : 0.99534708121574811, "TranslationX" : "SpringRelativeNegative", "TranslationY" : "Spring", "TranslationZ" : "NonLinear", "RotationX" : "Friction", "RotationY" : "Damped", "RotationZ" : "Free" } }, "EndNode" : { "_t" : "BH.oM.Structure.Elements.Node", "BHoM_Guid" : "296a5a4a-c840-434a-9fb1-593a9e08ac8d", "Name" : "jr3iqj4lyk1", "Fragments" : [], "Tags" : [], "CustomData" : { "dvibbqoggbr" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.62462275923445021, "Y" : 0.6930450455718884, "Z" : 0.63039438223018984 }, "td4it2lwgsl" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.22134204172591773, "Y" : 0.92870763266864587, "Z" : 0.066521596194487803 }, "l3bahwfdnxv" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.67850547222350976, "Y" : 0.093978040429753273, "Z" : 0.149097432917495 } }, "Position" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.89536243905097357, "Y" : 0.89643980325033878, "Z" : 0.086579883511448227 }, "Orientation" : { "_t" : "BH.oM.Geometry.Basis", "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.83857909955018162, "Y" : 0.17014283461968546, "Z" : 0.64411529369843901 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.82681440553945229, "Y" : 0.21918766490145944, "Z" : 0.99997269781305109 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.48136564692545947, "Y" : 0.65220523655982932, "Z" : 0.71972598355250716 } }, "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "8474ed96-82c5-4a31-8f83-14da9d4f9289", "Name" : "13fyuf4wy3a", "Fragments" : [], "Tags" : [], "CustomData" : { "g4kj5c5xbtj" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.80920381322931678, "Y" : 0.7936303423687957, "Z" : 0.76450598601461672 }, "5u2r5grydw5" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.29499680190114158, "Y" : 0.52278529923538919, "Z" : 0.66339283327730036 }, "pa0gqeuc0jf" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.28672242923021429, "Y" : 0.82061007331153846, "Z" : 0.2225179258838845 } }, "TranslationalStiffnessX" : 0.80946258027547158, "TranslationalStiffnessY" : 0.10093539631969081, "TranslationalStiffnessZ" : 0.72909405395812077, "RotationalStiffnessX" : 0.71845069188552479, "RotationalStiffnessY" : 0.12552724831063639, "RotationalStiffnessZ" : 0.90517638991827909, "TranslationX" : "FixedNegative", "TranslationY" : "SpringPositive", "TranslationZ" : "SpringRelative", "RotationX" : "Spring", "RotationY" : "SpringRelativeNegative", "RotationZ" : "SpringPositive" } }, "SectionProperty" : { "_t" : "BH.oM.Structure.SectionProperties.AluminiumSection", "BHoM_Guid" : "83266d49-8b3e-4c9b-ab18-f6a656b8d8a9", "Name" : null, "Fragments" : [], "Tags" : [], "CustomData" : { }, "Material" : null, "SectionProfile" : { "_t" : "BH.oM.Spatial.ShapeProfiles.AngleProfile", "BHoM_Guid" : "f2b9798f-164c-4314-a1d7-2c73c808ef94", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Shape" : "Angle", "Height" : 0.6098702427045769, "Width" : 0.95304281774584332, "WebThickness" : 0.49062520800653159, "FlangeThickness" : 0.14805626457000909, "RootRadius" : 0.6776115413185263, "ToeRadius" : 0.5698617443302002, "MirrorAboutLocalZ" : false, "MirrorAboutLocalY" : true, "Edges" : [] }, "Area" : 0.36093902139036871, "Rgy" : 0.8504849513296433, "Rgz" : 0.062308419524835616, "J" : 0.28164726089762859, "Iy" : 0.70497589591190957, "Iz" : 0.95858034769007017, "Iw" : 0.98881240328252895, "Wely" : 0.38713695359748646, "Welz" : 0.52274015104525728, "Wply" : 0.28032532300815233, "Wplz" : 0.50657612807423624, "CentreZ" : 0.53157909192684061, "CentreY" : 0.057008397792004235, "Vz" : 0.28055363068382888, "Vpz" : 0.4960787578001985, "Vy" : 0.84641548890919216, "Vpy" : 0.61315786680819362, "Asy" : 0.10415865299485561, "Asz" : 0.74232903762828983 }, "OrientationAngle" : 0.40187614522961718, "Release" : { "_t" : "BH.oM.Structure.Constraints.BarRelease", "BHoM_Guid" : "186565df-e8a3-4427-ab5f-3ac72a917d01", "Name" : "xl3tl2cs2du", "Fragments" : [], "Tags" : [], "CustomData" : { "pm2c3qk0z4f" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.12118609627764025, "Y" : 0.19491076525063755, "Z" : 0.49651680909866319 }, "21dhis44nzh" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.26166441490019876, "Y" : 0.31036315826250388, "Z" : 0.24213605804468322 }, "n3knzfembda" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.13305996969950384, "Y" : 0.61250376636744652, "Z" : 0.55929009968381849 }, "z3oyficbcyi" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34102778664837952, "Y" : 0.023311249456978985, "Z" : 0.097285922196361202 }, "1lfyzhcnkyq" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.71087234267539923, "Y" : 0.89213904454006765, "Z" : 0.65126434138569256 } }, "StartRelease" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "28f3e321-8afe-4fde-8e91-420421b9109b", "Name" : "jnqnhww5riy", "Fragments" : [], "Tags" : [], "CustomData" : { "q1331xl3dbj" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.063436652563249998, "Y" : 0.2636837378440815, "Z" : 0.84256009424224498 }, "hyf5sid2roa" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.64599011449422228, "Y" : 0.51636614581400819, "Z" : 0.9701272849785757 } }, "TranslationalStiffnessX" : 0.93339260152233416, "TranslationalStiffnessY" : 0.13069834100580696, "TranslationalStiffnessZ" : 0.69965230193904238, "RotationalStiffnessX" : 0.61540855309712172, "RotationalStiffnessY" : 0.83056791165404387, "RotationalStiffnessZ" : 0.68512655919656462, "TranslationX" : "SpringRelative", "TranslationY" : "FixedNegative", "TranslationZ" : "FixedNegative", "RotationX" : "SpringRelative", "RotationY" : "FixedPositive", "RotationZ" : "Damped" }, "EndRelease" : { "_t" : "BH.oM.Structure.Constraints.Constraint6DOF", "BHoM_Guid" : "290710db-713a-4ce8-9d65-c50ae19d8698", "Name" : "eqygoftvnqp", "Fragments" : [], "Tags" : [], "CustomData" : { "femr121veki" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.071689596433047953, "Y" : 0.23024068038456175, "Z" : 0.15083264939060093 }, "23ju5dg0scw" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.45107934924358473, "Y" : 0.019849336715344962, "Z" : 0.3888378662005243 }, "4orv3gs2fjp" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.20260418821247489, "Y" : 0.91362926313356929, "Z" : 0.029576994026814119 }, "rzgo2o4c5gz" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.96288963405549977, "Y" : 0.99357174522875424, "Z" : 0.016869892839747432 }, "asahpnuuefd" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.27832952620383794, "Y" : 0.96716775231397145, "Z" : 0.58779250718084741 }, "xphwigwtd1w" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.3241669523176583, "Y" : 0.42042525504735545, "Z" : 0.97493301982755443 }, "b1zz5ghwcab" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.97288724825386297, "Y" : 0.25517451123109763, "Z" : 0.13226471428399195 }, "cegyinqidce" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.17822117506443577, "Y" : 0.88289198972419458, "Z" : 0.54465721340135542 }, "4m4qab2widw" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.51404069760536808, "Y" : 0.3523834610136149, "Z" : 0.99174705613020209 } }, "TranslationalStiffnessX" : 0.51296734647497877, "TranslationalStiffnessY" : 0.15576532117825248, "TranslationalStiffnessZ" : 0.81365271742160095, "RotationalStiffnessX" : 0.64252130484325876, "RotationalStiffnessY" : 0.57539340042294629, "RotationalStiffnessZ" : 0.55286184491257273, "TranslationX" : "SpringRelativeNegative", "TranslationY" : "Damped", "TranslationZ" : "FixedPositive", "RotationX" : "Free", "RotationY" : "SpringPositive", "RotationZ" : "SpringPositive" } }, "FEAType" : "Flexural", "Support" : { "_t" : "BH.oM.Structure.Constraints.Constraint4DOF", "BHoM_Guid" : "7c9c8515-ba63-4d9c-884f-f75ca45e0683", "Name" : "qeckam0fq2d", "Fragments" : [], "Tags" : [], "CustomData" : { "1ktg4fy4hz2" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.61050617304188481, "Y" : 0.0018246890985521903, "Z" : 0.98342683538022768 }, "e0ird5ymk22" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.1571434299261977, "Y" : 0.7722569870633339, "Z" : 0.091275698082184276 }, "lcrrlxnusx2" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.06250253741745955, "Y" : 0.11006209678485156, "Z" : 0.73279696178287124 } }, "TranslationX" : "SpringPositive", "TranslationY" : "FixedNegative", "TranslationZ" : "Friction", "RotationX" : "SpringPositive", "TranslationalStiffnessX" : 0.63782360294732432, "TranslationalStiffnessY" : 0.31971219848828025, "TranslationalStiffnessZ" : 0.36897204973221387, "RotationalStiffnessX" : 0.24453175638082053 }, "Offset" : { "_t" : "BH.oM.Structure.Offsets.Offset", "BHoM_Guid" : "36c24723-a48a-4c9f-9595-4cd6b178ad44", "Name" : "wmagfnezmvf", "Fragments" : [], "Tags" : [], "CustomData" : { "qxbpbee1xtf" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.90713465349149647, "Y" : 0.80316835492996885, "Z" : 0.46024441647354719 }, "yq34lrnbar2" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77813539690251243, "Y" : 0.42689437997848467, "Z" : 0.64717347810378922 }, "f0iftpquspv" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.60893218666731019, "Y" : 0.089704847005058472, "Z" : 0.62384081195287444 }, "0u1tsruvogs" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.87316400831246932, "Y" : 0.53954396701396623, "Z" : 0.13763933216111704 } }, "Start" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.83982727855435912, "Y" : 0.64267074486365106, "Z" : 0.57297461460017352 }, "End" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.24163400020526443, "Y" : 0.83719338841605628, "Z" : 0.85958074026721565 } } }], "Outputs" : [[2000.7262432699679, 2000.817325359591, 2000.7680226893947, 2000.895362439051, 2000.8964398032504, 2000.0865798835114]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "222a3f94-66b6-4196-9663-0c2dc7148a3c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "BHoM_Guid" : "7c52798c-394d-4608-ab71-af5dae128dfe" }], "Outputs" : [[3000.7787120751814, 3000.4051314348089, 3000.1643999787289, 3000.7788009561323, 3000.4051117688214, 3000.1648889798003, 3000.7788583765132, 3000.4050923871605, 3000.1653826759343]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "8c061dc1-911e-4f9f-9199-3ede86da3683", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Circle", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "Normal" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Radius" : 0.80214046118880644 }, "BHoM_Guid" : "16e34079-4b61-43f4-91bb-538bb3e1db34" }], "Outputs" : [[4000.7710938983464, 4001.1599801248626, 3999.8973554484319, 4000.5505632580807, 4000.2635726973858, 4000.9243060202639, 4000.9835767907457, 3999.7838044638934, 3999.7040071884289]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "c56e716b-f23c-41f4-b371-a8710a97f55e", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Ellipse", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "Axis1" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Axis2" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Radius1" : 0.011206652974340437, "Radius2" : 0.76536734065290879 }, "BHoM_Guid" : "5b2ba69b-fc5a-4c24-b327-a9ca63208e47" }], "Outputs" : [[5000.7817347355076, 5000.4053401025385, 5000.1693115438547, 5001.3037685912632, 5000.7024006995935, 5000.3152383668994, 5000.2468188370376, 5000.1155864121602, 5000.018768265174]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "8bb27987-3bff-4b77-a92f-8b55bbcce9ff", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Infinite" : true }, "BHoM_Guid" : "aea4b7c4-30d8-4836-b4f9-4791b08df946" }], "Outputs" : [[2000.7710938983462, 2000.4041625947712, 2000.1659986703498, 2000.9850470526073, 2000.1090046335519, 2000.3066804079835]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "dbbdec9b-62b7-4588-a0c3-679aae6c4ac5", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.NurbsCurve", "ControlPoints" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Weights" : [0.38209498458639485, 0.70308829411076768, 0.73132192191263745], "Knots" : [0.33872517819456999, 0.73131695703198996, 0.81265016357072173, 0.92683620188703586] }, "BHoM_Guid" : "58c57617-b500-4e7b-a939-cc52bccc5e09" }], "Outputs" : [[6001.8562997145837, 6001.6181357901623, 6002.4371841724196, 6002.5537358226966, 6003.0491958759021, 6002.6926020936535, 6002.4820149403449, 6003.2361756280234, 6002.4995518780779]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "bab6e3f2-c2eb-488c-b2bf-025c64e51f8b", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.PlanarSurface", "ExternalBoundary" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "InternalBoundaries" : [{ "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.70308829411076768, "Y" : 0.23534573532424202, "Z" : 0.73132192191263745 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.089001557831187531, "Y" : 0.082648985126357988, "Z" : 0.33872517819456999 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.32991219606712097, "Y" : 0.73131695703198996, "Z" : 0.89595341072229362 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.81265016357072173, "Y" : 0.6535485864866285, "Z" : 0.92683620188703586 } }, "Radius" : 0.099241426260788662, "StartAngle" : 0.69182913130700086, "EndAngle" : 0.92548005745070061 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.10141979861139311, "Y" : 0.038685026130958006, "Z" : 0.34105472003158865 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.84963962149323879, "Y" : 0.68709290525274958, "Z" : 0.74400214280188182 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.68564566256741322, "Y" : 0.093061322855326034, "Z" : 0.040521103907619184 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27162018756923273, "Y" : 0.26325112640077769, "Z" : 0.49977948493313951 } }, "Radius" : 0.96156990526317143, "StartAngle" : 0.55604546636158858, "EndAngle" : 0.017603008084745617 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34221245876616446, "Y" : 0.48565348167235661, "Z" : 0.642432012894392 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.62012774107052371, "Y" : 0.073345340822518493, "Z" : 0.89542187652337457 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.59537276280828411, "Y" : 0.43236872015165573, "Z" : 0.074250398703967407 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.43468171331783834, "Y" : 0.089093641885134231, "Z" : 0.29635446998120957 } }, "Radius" : 0.65313182149693916, "StartAngle" : 0.87530425930177058, "EndAngle" : 0.34630525267976581 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.085726595523639856, "Y" : 0.78522651120332376, "Z" : 0.92732379209591254 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.96887616439204483, "Y" : 0.16896769691676261, "Z" : 0.53245536309315611 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.59231587806358743, "Y" : 0.95908615130888586, "Z" : 0.54970007275682875 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.63826059905731147, "Y" : 0.04848045392356834, "Z" : 0.8110287975571252 } }, "Radius" : 0.07547405179379231, "StartAngle" : 0.83013271113398146, "EndAngle" : 0.76974705176881841 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.79504715548597604, "Y" : 0.16500800902257115, "Z" : 0.5846237431208714 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.61358794458843202, "Y" : 0.049397118412608798, "Z" : 0.30535231638017685 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.9067954886270666, "Y" : 0.20599792208801859, "Z" : 0.44331226332267387 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.90868599987993293, "Y" : 0.77538922278927136, "Z" : 0.25241119193491118 } }, "Radius" : 0.65490850091674757, "StartAngle" : 0.38929119258620365, "EndAngle" : 0.43992950135838682 }] }, "BHoM_Guid" : "a5b76b35-f17f-4e16-89e8-395193824ea8" }], "Outputs" : [[10000.778712075182, 10000.405131434809, 10000.164399978728, 10000.778800956132, 10000.405111768821, 10000.1648889798, 10000.778858376512, 10000.40509238716, 10000.165382675934, 10000.720653675517, 10000.236287342963, 10000.762400354579, 10000.72228226317, 10000.235631057947, 10000.76143518093, 10000.723897868476, 10000.235170878588, 10000.76034310841, 10000.754330783582, 10000.856103825246, 10001.063081715265, 10000.842278036596, 10000.789595066704, 10001.050316597948, 10000.91437777102, 10000.705358374826, 10001.055502206224, 10000.850239797866, 10000.363035758963, 10001.127445112959, 10000.812373915058, 10000.400677466097, 10001.171669079082, 10000.779359926582, 10000.45192650311, 10001.204685668044, 10000.144606963835, 10000.819053089304, 10000.977460829932, 10000.145332461352, 10000.81857904457, 10000.976918217171, 10000.146047163445, 10000.818077904732, 10000.976385719803, 10001.232588971099, 10000.187132633697, 10000.687501933207, 10001.234073128291, 10000.187550619499, 10000.680874911099, 10001.23544807219, 10000.18810110609, 10000.674234026328]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "b2eff1f0-40ce-4b9f-a7fe-b91375651c75", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Extrusion", "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Direction" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27940878331633695, "Y" : 0.70308829411076768, "Z" : 0.23534573532424202 }, "Capped" : true }, "BHoM_Guid" : "a03a90dd-0580-4d55-9e9d-ca0744b844b1" }], "Outputs" : [[12001.058120858497, 12001.10821972892, 12000.399745714054, 12001.058209739449, 12001.108200062932, 12000.400234715124, 12001.058267159829, 12001.108180681271, 12000.400728411259, 12000.778712075182, 12000.405131434809, 12000.164399978728, 12000.778800956132, 12000.405111768821, 12000.1648889798, 12000.778858376512, 12000.40509238716, 12000.165382675934]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "5643b4eb-bd17-4fdb-a8f0-9c3b47fec8dc", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Loft", "Curves" : [{ "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.10900463355193131, "Y" : 0.30668040798356777, "Z" : 0.80214046118880644 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.44554667894055444, "Y" : 0.22498315396950727, "Z" : 0.011206652974340437 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.76536734065290879, "Y" : 0.028743590707305627, "Z" : 0.0075611905230028508 } }, "Radius" : 0.51002241694835126, "StartAngle" : 0.38209498458639485, "EndAngle" : 0.27940878331633695 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.23534573532424202, "Y" : 0.73132192191263745, "Z" : 0.089001557831187531 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.082648985126357988, "Y" : 0.33872517819456999, "Z" : 0.32991219606712097 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.73131695703198996, "Y" : 0.89595341072229362, "Z" : 0.81265016357072173 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.6535485864866285, "Y" : 0.92683620188703586, "Z" : 0.099241426260788662 } }, "Radius" : 0.69182913130700086, "StartAngle" : 0.92548005745070061, "EndAngle" : 0.98014082944958514 }] }, "BHoM_Guid" : "84932caf-ee36-4275-9175-2c0b08f7518b" }], "Outputs" : [[13000.465614102808, 13000.159086788179, 13001.422200002791, 13000.464773904483, 13000.181486032154, 13001.422097592671, 13000.463946358532, 13000.203850933012, 13001.420845023704, 13000.457585638484, 13000.850579218592, 13000.305026035308, 13000.462076877777, 13000.847749155477, 13000.301879787256, 13000.466503183725, 13000.844980206666, 13000.298590394825]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "3bfa2a17-0ffb-4eea-b173-a4a660505703", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.NurbsSurface", "ControlPoints" : [{ "_t" : "BH.oM.Geometry.Point", "X" : -14.0, "Y" : -1.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -14.0, "Y" : -5.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -13.0, "Y" : -8.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -10.777777777777779, "Y" : -10.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -8.3333333333333321, "Y" : -12.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -6.333333333333333, "Y" : -14.333333333333332, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -5.0, "Y" : -17.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -12.333333333333332, "Y" : 1.0000000000000004, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -11.666666666666666, "Y" : -4.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -10.25, "Y" : -7.25, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -8.1851851851851851, "Y" : -9.1666666666666661, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -6.1388888888888875, "Y" : -10.833333333333334, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -4.5555555555555545, "Y" : -12.888888888888888, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -4.0, "Y" : -16.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -10.666666666666668, "Y" : 2.9999999999999996, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -9.3333333333333321, "Y" : -3.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -7.5, "Y" : -6.5000000000000009, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -5.5925925925925934, "Y" : -8.3333333333333339, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -3.9444444444444442, "Y" : -9.6666666666666661, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -2.7777777777777777, "Y" : -11.444444444444443, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -15.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -11.0, "Y" : 7.0, "Z" : 5.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -7.0, "Y" : -2.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -4.75, "Y" : -5.7500000000000009, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -7.5, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -1.75, "Y" : -8.5, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -1.0, "Y" : -10.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -2.0, "Y" : -14.0, "Z" : 0.0 }], "Weights" : [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], "UKnots" : [0.0, 0.0, 0.0, 8.5513156882435339, 8.5513156882435339, 8.5513156882435339], "VKnots" : [0.0, 0.0, 0.0, 7.1763784042227092, 10.764567606334063, 14.352756808445417, 21.529135212668127, 21.529135212668127, 21.529135212668127], "UDegree" : 3, "VDegree" : 3, "InnerTrims" : [], "OuterTrims" : [] }, "BHoM_Guid" : "2d9b8fa3-aefb-4e57-bc7c-716a262019bd" }], "Outputs" : [[10987.0, 11000.0, 11001.0, 10994.176378404223, 11003.176378404223, 11008.176378404223, 11005.940946010556, 11010.940946010556, 11018.940946010556, 11022.515925041225, 11023.293702819003, 11033.293702819003, 11039.313126294113, 11035.646459627447, 11047.646459627447, 11052.077693900448, 11044.077693900448, 11058.411027233782, 11060.587405638005, 11048.587405638005, 11065.587405638005, 10997.21798235491, 11010.551315688244, 11009.551315688244, 11005.0610274258, 11012.727694092466, 11016.727694092466, 11017.242261698801, 11020.242261698801, 11027.492261698801, 11033.659833322061, 11032.678351840579, 11041.845018507245, 11050.058886426803, 11045.364441982358, 11056.197775315692, 11062.40678736647, 11054.073454033136, 11066.962342922025, 11070.138721326248, 11058.138721326248, 11074.138721326248, 11007.435964709821, 11021.102631376487, 11018.102631376487, 11015.945676447376, 11022.27900978071, 11025.27900978071, 11028.543577387043, 11029.543577387043, 11036.043577387043, 11044.803741602896, 11042.063000862156, 11050.39633419549, 11060.804646559489, 11055.082424337268, 11064.749091003934, 11072.735880832492, 11064.069214165824, 11075.513658610269, 11079.690037014492, 11067.690037014492, 11082.690037014492, 11015.653947064731, 11033.653947064731, 11031.653947064731, 11026.830325468953, 11031.830325468953, 11033.830325468953, 11039.844893075287, 11038.844893075287, 11044.594893075287, 11055.947649883732, 11051.447649883732, 11058.947649883732, 11071.550406692179, 11064.800406692179, 11073.300406692179, 11083.064974298512, 11074.064974298512, 11084.064974298512, 11089.241352702735, 11077.241352702735, 11091.241352702735]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "1d7deff8-dbb7-4ef7-8a39-e280f73dfbe1", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Pipe", "Centreline" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Radius" : 0.27940878331633695, "Capped" : true }, "BHoM_Guid" : "f9c05494-d61e-48cd-9924-6c43a8e9f5e0" }], "Outputs" : [[11001.058120858499, 11000.684540218126, 11000.443808762046, 11001.058209739449, 11000.684520552139, 11000.444297763117, 11001.058267159829, 11000.684501170477, 11000.444791459251]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "fddb7b22-47b2-4f9c-8747-1c2ca3cac3ab", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.PolySurface", "Surfaces" : [{ "_t" : "BH.oM.Geometry.Extrusion", "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.10900463355193131, "Y" : 0.30668040798356777, "Z" : 0.80214046118880644 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.44554667894055444, "Y" : 0.22498315396950727, "Z" : 0.011206652974340437 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.76536734065290879, "Y" : 0.028743590707305627, "Z" : 0.0075611905230028508 } }, "Radius" : 0.51002241694835126, "StartAngle" : 0.38209498458639485, "EndAngle" : 0.27940878331633695 }, "Direction" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.70308829411076768, "Y" : 0.23534573532424202, "Z" : 0.73132192191263745 }, "Capped" : false }] }, "BHoM_Guid" : "17cbec3a-9fb5-46bd-8eae-c9af51e699d8" }], "Outputs" : [[12001.168702396919, 12000.394432523502, 12002.153521924705, 12001.167862198594, 12000.416831767478, 12002.153419514583, 12001.167034652643, 12000.439196668336, 12002.152166945618, 12000.465614102808, 12000.159086788179, 12001.422200002791, 12000.464773904483, 12000.181486032154, 12001.422097592671, 12000.463946358532, 12000.203850933012, 12001.420845023704]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "95608ec5-6c77-48d6-b8aa-7da6b7c700d8", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.SurfaceTrim", "Curve3d" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Curve2d" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.27940878331633695, "Y" : 0.70308829411076768, "Z" : 0.23534573532424202 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.73132192191263745, "Y" : 0.089001557831187531, "Z" : 0.082648985126357988 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.33872517819456999, "Y" : 0.32991219606712097, "Z" : 0.73131695703198996 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.89595341072229362, "Y" : 0.81265016357072173, "Z" : 0.6535485864866285 } }, "Radius" : 0.92683620188703586, "StartAngle" : 0.099241426260788662, "EndAngle" : 0.69182913130700086 } }, "BHoM_Guid" : "ef941fb7-c09e-49fa-b771-cd38814c745f" }], "Outputs" : [[15000.778712075182, 15000.405131434809, 15000.164399978728, 15000.778800956132, 15000.405111768821, 15000.1648889798, 15000.778858376512, 15000.40509238716, 15000.165382675934]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "b905d5e7-bc75-41f0-a77b-722429784d5b", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Mesh", "Vertices" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Faces" : [{ "_t" : "BH.oM.Geometry.Face", "A" : 820542731, "B" : 600025793, "C" : 1509870614, "D" : 505401118 }, { "_t" : "BH.oM.Geometry.Face", "A" : 191129390, "B" : 177487344, "C" : 727406781, "D" : 708481046 }, { "_t" : "BH.oM.Geometry.Face", "A" : 1924045298, "B" : 1745152937, "C" : 1403484902, "D" : 1990365587 }] }, "BHoM_Guid" : "43e03618-8b36-4e0d-aae2-4b1428f8165d" }], "Outputs" : [[13000.40416259477, 13000.165998670349, 13000.985047052607, 13000.306680407984, 13000.802140461188, 13000.44554667894, 13000.011206652975, 13000.765367340653, 13000.028743590707]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "f5a50387-1852-4719-a6e2-ca03dc202017", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Mesh3D", "Vertices" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Faces" : [{ "_t" : "BH.oM.Geometry.Face", "A" : 820542731, "B" : 600025793, "C" : 1509870614, "D" : 505401118 }, { "_t" : "BH.oM.Geometry.Face", "A" : 191129390, "B" : 177487344, "C" : 727406781, "D" : 708481046 }, { "_t" : "BH.oM.Geometry.Face", "A" : 1924045298, "B" : 1745152937, "C" : 1403484902, "D" : 1990365587 }], "CellRelation" : [{ "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1987453289, "ToCell" : 2104836403 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 83075461, "ToCell" : 732409434 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1475520778, "ToCell" : 1597732435 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 199847669, "ToCell" : 87018408 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 565327489, "ToCell" : 1073268271 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1194098546, "ToCell" : 37802172 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 734895659, "ToCell" : 1042932910 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1331714183, "ToCell" : 157507920 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1278553272, "ToCell" : 928504756 }] }, "BHoM_Guid" : "ba722322-0500-4643-9eb8-325179e092ea" }], "Outputs" : [[14000.40416259477, 14000.165998670349, 14000.985047052607, 14000.306680407984, 14000.802140461188, 14000.44554667894, 14000.011206652975, 14000.765367340653, 14000.028743590707]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "f7afa664-992e-4916-b8f8-403823277d97", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "geom" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "BHoM_Guid" : "3e0a1135-059e-4533-9d02-fc0da7ce6659" }], "Outputs" : [[0.77109389834622566, 0.4041625947710884, 0.16599867034982829]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "3f4132b1-30fe-4258-acd3-ac7dcab003ed", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "x" : { "_t" : "BH.oM.Geometry.CompositeGeometry", "Elements" : [{ "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, { "_t" : "BH.oM.Geometry.Circle", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "Normal" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Radius" : 0.80214046118880644 }, { "_t" : "BH.oM.Geometry.Ellipse", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "Axis1" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Axis2" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Radius1" : 0.011206652974340437, "Radius2" : 0.76536734065290879 }, { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Infinite" : true }, { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Infinite" : true }, { "_t" : "BH.oM.Geometry.NurbsCurve", "ControlPoints" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Weights" : [0.38209498458639485, 0.70308829411076768, 0.73132192191263745], "Knots" : [0.33872517819456999, 0.73131695703198996, 0.81265016357072173, 0.92683620188703586] }, { "_t" : "BH.oM.Geometry.PlanarSurface", "ExternalBoundary" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "InternalBoundaries" : [{ "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.70308829411076768, "Y" : 0.23534573532424202, "Z" : 0.73132192191263745 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.089001557831187531, "Y" : 0.082648985126357988, "Z" : 0.33872517819456999 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.32991219606712097, "Y" : 0.73131695703198996, "Z" : 0.89595341072229362 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.81265016357072173, "Y" : 0.6535485864866285, "Z" : 0.92683620188703586 } }, "Radius" : 0.099241426260788662, "StartAngle" : 0.69182913130700086, "EndAngle" : 0.92548005745070061 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.10141979861139311, "Y" : 0.038685026130958006, "Z" : 0.34105472003158865 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.84963962149323879, "Y" : 0.68709290525274958, "Z" : 0.74400214280188182 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.68564566256741322, "Y" : 0.093061322855326034, "Z" : 0.040521103907619184 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27162018756923273, "Y" : 0.26325112640077769, "Z" : 0.49977948493313951 } }, "Radius" : 0.96156990526317143, "StartAngle" : 0.55604546636158858, "EndAngle" : 0.017603008084745617 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.34221245876616446, "Y" : 0.48565348167235661, "Z" : 0.642432012894392 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.62012774107052371, "Y" : 0.073345340822518493, "Z" : 0.89542187652337457 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.59537276280828411, "Y" : 0.43236872015165573, "Z" : 0.074250398703967407 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.43468171331783834, "Y" : 0.089093641885134231, "Z" : 0.29635446998120957 } }, "Radius" : 0.65313182149693916, "StartAngle" : 0.87530425930177058, "EndAngle" : 0.34630525267976581 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.085726595523639856, "Y" : 0.78522651120332376, "Z" : 0.92732379209591254 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.96887616439204483, "Y" : 0.16896769691676261, "Z" : 0.53245536309315611 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.59231587806358743, "Y" : 0.95908615130888586, "Z" : 0.54970007275682875 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.63826059905731147, "Y" : 0.04848045392356834, "Z" : 0.8110287975571252 } }, "Radius" : 0.07547405179379231, "StartAngle" : 0.83013271113398146, "EndAngle" : 0.76974705176881841 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.79504715548597604, "Y" : 0.16500800902257115, "Z" : 0.5846237431208714 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.61358794458843202, "Y" : 0.049397118412608798, "Z" : 0.30535231638017685 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.9067954886270666, "Y" : 0.20599792208801859, "Z" : 0.44331226332267387 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.90868599987993293, "Y" : 0.77538922278927136, "Z" : 0.25241119193491118 } }, "Radius" : 0.65490850091674757, "StartAngle" : 0.38929119258620365, "EndAngle" : 0.43992950135838682 }] }, { "_t" : "BH.oM.Geometry.Extrusion", "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Direction" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.27940878331633695, "Y" : 0.70308829411076768, "Z" : 0.23534573532424202 }, "Capped" : true }, { "_t" : "BH.oM.Geometry.Loft", "Curves" : [{ "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.10900463355193131, "Y" : 0.30668040798356777, "Z" : 0.80214046118880644 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.44554667894055444, "Y" : 0.22498315396950727, "Z" : 0.011206652974340437 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.76536734065290879, "Y" : 0.028743590707305627, "Z" : 0.0075611905230028508 } }, "Radius" : 0.51002241694835126, "StartAngle" : 0.38209498458639485, "EndAngle" : 0.27940878331633695 }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.23534573532424202, "Y" : 0.73132192191263745, "Z" : 0.089001557831187531 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.082648985126357988, "Y" : 0.33872517819456999, "Z" : 0.32991219606712097 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.73131695703198996, "Y" : 0.89595341072229362, "Z" : 0.81265016357072173 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.6535485864866285, "Y" : 0.92683620188703586, "Z" : 0.099241426260788662 } }, "Radius" : 0.69182913130700086, "StartAngle" : 0.92548005745070061, "EndAngle" : 0.98014082944958514 }] }, { "_t" : "BH.oM.Geometry.NurbsSurface", "ControlPoints" : [{ "_t" : "BH.oM.Geometry.Point", "X" : -14.0, "Y" : -1.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -14.0, "Y" : -5.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -13.0, "Y" : -8.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -10.777777777777779, "Y" : -10.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -8.3333333333333321, "Y" : -12.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -6.333333333333333, "Y" : -14.333333333333332, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -5.0, "Y" : -17.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -12.333333333333332, "Y" : 1.0000000000000004, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -11.666666666666666, "Y" : -4.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -10.25, "Y" : -7.25, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -8.1851851851851851, "Y" : -9.1666666666666661, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -6.1388888888888875, "Y" : -10.833333333333334, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -4.5555555555555545, "Y" : -12.888888888888888, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -4.0, "Y" : -16.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -10.666666666666668, "Y" : 2.9999999999999996, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -9.3333333333333321, "Y" : -3.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -7.5, "Y" : -6.5000000000000009, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -5.5925925925925934, "Y" : -8.3333333333333339, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -3.9444444444444442, "Y" : -9.6666666666666661, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -2.7777777777777777, "Y" : -11.444444444444443, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -15.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -11.0, "Y" : 7.0, "Z" : 5.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -7.0, "Y" : -2.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -4.75, "Y" : -5.7500000000000009, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -7.5, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -1.75, "Y" : -8.5, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -1.0, "Y" : -10.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -2.0, "Y" : -14.0, "Z" : 0.0 }], "Weights" : [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], "UKnots" : [0.0, 0.0, 0.0, 8.5513156882435339, 8.5513156882435339, 8.5513156882435339], "VKnots" : [0.0, 0.0, 0.0, 7.1763784042227092, 10.764567606334063, 14.352756808445417, 21.529135212668127, 21.529135212668127, 21.529135212668127], "UDegree" : 3, "VDegree" : 3, "InnerTrims" : [], "OuterTrims" : [] }, { "_t" : "BH.oM.Geometry.Pipe", "Centreline" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Radius" : 0.27940878331633695, "Capped" : true }, { "_t" : "BH.oM.Geometry.PolySurface", "Surfaces" : [{ "_t" : "BH.oM.Geometry.Extrusion", "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.10900463355193131, "Y" : 0.30668040798356777, "Z" : 0.80214046118880644 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.44554667894055444, "Y" : 0.22498315396950727, "Z" : 0.011206652974340437 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.76536734065290879, "Y" : 0.028743590707305627, "Z" : 0.0075611905230028508 } }, "Radius" : 0.51002241694835126, "StartAngle" : 0.38209498458639485, "EndAngle" : 0.27940878331633695 }, "Direction" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.70308829411076768, "Y" : 0.23534573532424202, "Z" : 0.73132192191263745 }, "Capped" : false }] }, { "_t" : "BH.oM.Geometry.SurfaceTrim", "Curve3d" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.98504705260742786, "Y" : 0.10900463355193131, "Z" : 0.30668040798356777 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.80214046118880644, "Y" : 0.44554667894055444, "Z" : 0.22498315396950727 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 } }, "Radius" : 0.0075611905230028508, "StartAngle" : 0.51002241694835126, "EndAngle" : 0.38209498458639485 }, "Curve2d" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 0.27940878331633695, "Y" : 0.70308829411076768, "Z" : 0.23534573532424202 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.73132192191263745, "Y" : 0.089001557831187531, "Z" : 0.082648985126357988 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.33872517819456999, "Y" : 0.32991219606712097, "Z" : 0.73131695703198996 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.89595341072229362, "Y" : 0.81265016357072173, "Z" : 0.6535485864866285 } }, "Radius" : 0.92683620188703586, "StartAngle" : 0.099241426260788662, "EndAngle" : 0.69182913130700086 } }, { "_t" : "BH.oM.Geometry.Mesh", "Vertices" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Faces" : [{ "_t" : "BH.oM.Geometry.Face", "A" : 820542731, "B" : 600025793, "C" : 1509870614, "D" : 505401118 }, { "_t" : "BH.oM.Geometry.Face", "A" : 191129390, "B" : 177487344, "C" : 727406781, "D" : 708481046 }, { "_t" : "BH.oM.Geometry.Face", "A" : 1924045298, "B" : 1745152937, "C" : 1403484902, "D" : 1990365587 }] }, { "_t" : "BH.oM.Geometry.Mesh3D", "Vertices" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 0.4041625947710884, "Y" : 0.16599867034982829, "Z" : 0.98504705260742786 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.30668040798356777, "Y" : 0.80214046118880644, "Z" : 0.44554667894055444 }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.011206652974340437, "Y" : 0.76536734065290879, "Z" : 0.028743590707305627 }], "Faces" : [{ "_t" : "BH.oM.Geometry.Face", "A" : 820542731, "B" : 600025793, "C" : 1509870614, "D" : 505401118 }, { "_t" : "BH.oM.Geometry.Face", "A" : 191129390, "B" : 177487344, "C" : 727406781, "D" : 708481046 }, { "_t" : "BH.oM.Geometry.Face", "A" : 1924045298, "B" : 1745152937, "C" : 1403484902, "D" : 1990365587 }], "CellRelation" : [{ "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1987453289, "ToCell" : 2104836403 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 83075461, "ToCell" : 732409434 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1475520778, "ToCell" : 1597732435 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 199847669, "ToCell" : 87018408 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 565327489, "ToCell" : 1073268271 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1194098546, "ToCell" : 37802172 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 734895659, "ToCell" : 1042932910 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1331714183, "ToCell" : 157507920 }, { "_t" : "BH.oM.Geometry.CellRelation", "FromCell" : 1278553272, "ToCell" : 928504756 }] }, { "_t" : "BH.oM.Geometry.Point", "X" : 0.77109389834622566, "Y" : 0.4041625947710884, "Z" : 0.16599867034982829 }, { "_t" : "BH.oM.Geometry.Circle", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 2.0, "Z" : 0.0 }, "Normal" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.0, "Y" : 0.0, "Z" : 1.0 }, "Radius" : 3.6055512754639896 }, { "_t" : "BH.oM.Geometry.Polyline", "ControlPoints" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 5.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 5.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 7.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 7.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 5.0, "Z" : 0.0 }] }, { "_t" : "BH.oM.Geometry.Polyline", "ControlPoints" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 7.0, "Y" : -9.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -1.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : -2.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : 12.69719224062738, "Y" : -5.4037436791634805, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : 7.0, "Y" : -9.0, "Z" : 0.0 }] }, { "_t" : "BH.oM.Geometry.PolyCurve", "Curves" : [{ "_t" : "BH.oM.Geometry.Polyline", "ControlPoints" : [{ "_t" : "BH.oM.Geometry.Point", "X" : 19.190295885418404, "Y" : -29.12686392361227, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -8.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : -13.0, "Y" : 5.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 18.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : 14.0, "Y" : 12.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : 21.0, "Y" : -5.0, "Z" : 0.0 }, { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -12.0, "Z" : 0.0 }] }, { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 9.1850339211086016, "Y" : -23.444898236674195, "Z" : 0.0 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.86956263782751309, "Y" : -0.49382265935703812, "Z" : 0.0 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : -0.49382265935703817, "Y" : -0.8695626378275132, "Z" : 0.0 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.0, "Y" : 0.0, "Z" : -1.0 } }, "Radius" : 11.506085391739717, "StartAngle" : -2.1904515725762264, "EndAngle" : 0.0 }] }] }, "BHoM_Guid" : "6da704de-39ec-4a90-b2aa-0bca6acf2e27" }], "Outputs" : [[3000.7787120751814, 3000.4051314348089, 3000.1643999787289, 3000.7788009561323, 3000.4051117688214, 3000.1648889798003, 3000.7788583765132, 3000.4050923871605, 3000.1653826759343, 4000.7710938983464, 4001.1599801248626, 3999.8973554484319, 4000.5505632580807, 4000.2635726973858, 4000.9243060202639, 4000.9835767907457, 3999.7838044638934, 3999.7040071884289, 5000.7817347355076, 5000.4053401025385, 5000.1693115438547, 5001.3037685912632, 5000.7024006995935, 5000.3152383668994, 5000.2468188370376, 5000.1155864121602, 5000.018768265174, 2000.7710938983462, 2000.4041625947712, 2000.1659986703498, 2000.9850470526073, 2000.1090046335519, 2000.3066804079835, 2000.7710938983462, 2000.4041625947712, 2000.1659986703498, 2000.9850470526073, 2000.1090046335519, 2000.3066804079835, 6001.8562997145837, 6001.6181357901623, 6002.4371841724196, 6002.5537358226966, 6003.0491958759021, 6002.6926020936535, 6002.4820149403449, 6003.2361756280234, 6002.4995518780779, 10000.778712075182, 10000.405131434809, 10000.164399978728, 10000.778800956132, 10000.405111768821, 10000.1648889798, 10000.778858376512, 10000.40509238716, 10000.165382675934, 10000.720653675517, 10000.236287342963, 10000.762400354579, 10000.72228226317, 10000.235631057947, 10000.76143518093, 10000.723897868476, 10000.235170878588, 10000.76034310841, 10000.754330783582, 10000.856103825246, 10001.063081715265, 10000.842278036596, 10000.789595066704, 10001.050316597948, 10000.91437777102, 10000.705358374826, 10001.055502206224, 10000.850239797866, 10000.363035758963, 10001.127445112959, 10000.812373915058, 10000.400677466097, 10001.171669079082, 10000.779359926582, 10000.45192650311, 10001.204685668044, 10000.144606963835, 10000.819053089304, 10000.977460829932, 10000.145332461352, 10000.81857904457, 10000.976918217171, 10000.146047163445, 10000.818077904732, 10000.976385719803, 10001.232588971099, 10000.187132633697, 10000.687501933207, 10001.234073128291, 10000.187550619499, 10000.680874911099, 10001.23544807219, 10000.18810110609, 10000.674234026328, 12001.058120858497, 12001.10821972892, 12000.399745714054, 12001.058209739449, 12001.108200062932, 12000.400234715124, 12001.058267159829, 12001.108180681271, 12000.400728411259, 12000.778712075182, 12000.405131434809, 12000.164399978728, 12000.778800956132, 12000.405111768821, 12000.1648889798, 12000.778858376512, 12000.40509238716, 12000.165382675934, 13000.465614102808, 13000.159086788179, 13001.422200002791, 13000.464773904483, 13000.181486032154, 13001.422097592671, 13000.463946358532, 13000.203850933012, 13001.420845023704, 13000.457585638484, 13000.850579218592, 13000.305026035308, 13000.462076877777, 13000.847749155477, 13000.301879787256, 13000.466503183725, 13000.844980206666, 13000.298590394825, 10987.0, 11000.0, 11001.0, 10994.176378404223, 11003.176378404223, 11008.176378404223, 11005.940946010556, 11010.940946010556, 11018.940946010556, 11022.515925041225, 11023.293702819003, 11033.293702819003, 11039.313126294113, 11035.646459627447, 11047.646459627447, 11052.077693900448, 11044.077693900448, 11058.411027233782, 11060.587405638005, 11048.587405638005, 11065.587405638005, 10997.21798235491, 11010.551315688244, 11009.551315688244, 11005.0610274258, 11012.727694092466, 11016.727694092466, 11017.242261698801, 11020.242261698801, 11027.492261698801, 11033.659833322061, 11032.678351840579, 11041.845018507245, 11050.058886426803, 11045.364441982358, 11056.197775315692, 11062.40678736647, 11054.073454033136, 11066.962342922025, 11070.138721326248, 11058.138721326248, 11074.138721326248, 11007.435964709821, 11021.102631376487, 11018.102631376487, 11015.945676447376, 11022.27900978071, 11025.27900978071, 11028.543577387043, 11029.543577387043, 11036.043577387043, 11044.803741602896, 11042.063000862156, 11050.39633419549, 11060.804646559489, 11055.082424337268, 11064.749091003934, 11072.735880832492, 11064.069214165824, 11075.513658610269, 11079.690037014492, 11067.690037014492, 11082.690037014492, 11015.653947064731, 11033.653947064731, 11031.653947064731, 11026.830325468953, 11031.830325468953, 11033.830325468953, 11039.844893075287, 11038.844893075287, 11044.594893075287, 11055.947649883732, 11051.447649883732, 11058.947649883732, 11071.550406692179, 11064.800406692179, 11073.300406692179, 11083.064974298512, 11074.064974298512, 11084.064974298512, 11089.241352702735, 11077.241352702735, 11091.241352702735, 11001.058120858499, 11000.684540218126, 11000.443808762046, 11001.058209739449, 11000.684520552139, 11000.444297763117, 11001.058267159829, 11000.684501170477, 11000.444791459251, 12001.168702396919, 12000.394432523502, 12002.153521924705, 12001.167862198594, 12000.416831767478, 12002.153419514583, 12001.167034652643, 12000.439196668336, 12002.152166945618, 12000.465614102808, 12000.159086788179, 12001.422200002791, 12000.464773904483, 12000.181486032154, 12001.422097592671, 12000.463946358532, 12000.203850933012, 12001.420845023704, 15000.778712075182, 15000.405131434809, 15000.164399978728, 15000.778800956132, 15000.405111768821, 15000.1648889798, 15000.778858376512, 15000.40509238716, 15000.165382675934, 13000.40416259477, 13000.165998670349, 13000.985047052607, 13000.306680407984, 13000.802140461188, 13000.44554667894, 13000.011206652975, 13000.765367340653, 13000.028743590707, 14000.40416259477, 14000.165998670349, 14000.985047052607, 14000.306680407984, 14000.802140461188, 14000.44554667894, 14000.011206652975, 14000.765367340653, 14000.028743590707, 0.77109389834622566, 0.4041625947710884, 0.16599867034982829, 4002.0, 4005.6055512754638, 4000.0, 3998.8404313320702, 4000.2630124258831, 4000.0, 4005.0442676287034, 4000.0680490159357, 4000.0, 2006.0, 2005.0, 2000.0, 2012.0, 2005.0, 2000.0, 2012.0, 2007.0, 2000.0, 2006.0, 2007.0, 2000.0, 2006.0, 2005.0, 2000.0, 2007.0, 1991.0, 2000.0, 2008.0, 1999.0, 2000.0, 2012.0, 1998.0, 2000.0, 2012.6971922406274, 1994.5962563208366, 2000.0, 2007.0, 1991.0, 2000.0, 2019.1902958854184, 1970.8731360763877, 2000.0, 1997.0, 1992.0, 2000.0, 1987.0, 2005.0, 2000.0, 2002.0, 2018.0, 2000.0, 2014.0, 2012.0, 2000.0, 2021.0, 1995.0, 2000.0, 3008.0, 2988.0, 3000.0, 3018.8173479031175, 2982.8486324412524, 3000.0, 3019.1902958854184, 2970.8731360763877, 3000.0]] }, { "_t" : "BH.oM.Test.UnitTests.TestData", "BHoM_Guid" : "277b2aa7-65b6-4e1f-9e87-3782440161ad", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Inputs" : [{ "_t" : "BH.oM.Structure.Elements.Panel", "BHoM_Guid" : "2666e526-26bd-4051-9408-9fa60261966d", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "ExternalEdges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "dca2bdd2-9b6d-4e77-87c7-c2d8b2565ac5", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 19.190295885418404, "Y" : -29.12686392361227, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -8.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "1a5e7204-41d1-48c4-8bc7-263f26d7dc96", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : -3.0, "Y" : -8.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : -13.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "95d58801-9c28-4bc6-bc7b-5ba259de3da1", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : -13.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 18.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "bd780049-6526-429e-b9fa-970891a6abf5", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 18.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 14.0, "Y" : 12.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "f86caaa7-f15d-4fc4-9852-3c3dfd8d5240", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 14.0, "Y" : 12.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 21.0, "Y" : -5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "968d707e-03c3-4e74-b4fe-25fae3bcfbed", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 21.0, "Y" : -5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -12.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "3638af5a-7b8f-4f85-bb34-94eefd31e52b", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Arc", "CoordinateSystem" : { "_t" : "BH.oM.Geometry.CoordinateSystem.Cartesian", "Origin" : { "_t" : "BH.oM.Geometry.Point", "X" : 9.1850339211086016, "Y" : -23.444898236674195, "Z" : 0.0 }, "X" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.86956263782751309, "Y" : -0.49382265935703812, "Z" : 0.0 }, "Y" : { "_t" : "BH.oM.Geometry.Vector", "X" : -0.49382265935703817, "Y" : -0.8695626378275132, "Z" : 0.0 }, "Z" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.0, "Y" : 0.0, "Z" : -1.0 } }, "Radius" : 11.506085391739717, "StartAngle" : -2.1904515725762264, "EndAngle" : 0.0 }, "Release" : null, "Support" : null }], "Openings" : [{ "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "99781a86-f96c-47bc-803a-e92d641dd003", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "d62cf1fa-29ed-451b-a696-d8b963dc4e2f", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Circle", "Centre" : { "_t" : "BH.oM.Geometry.Point", "X" : 2.0, "Y" : 2.0, "Z" : 0.0 }, "Normal" : { "_t" : "BH.oM.Geometry.Vector", "X" : 0.0, "Y" : 0.0, "Z" : 1.0 }, "Radius" : 3.6055512754639896 }, "Release" : null, "Support" : null }] }, { "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "3cbd65ac-5d5c-44dd-a216-31db615c874f", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "c2b4bbf7-9d88-455f-9a84-ba4b3c5d074b", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 7.0, "Y" : -9.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -1.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "8b642949-ea89-4611-bd6f-8b5fc25b71b4", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 8.0, "Y" : -1.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : -2.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "f7095bab-bb3c-4f87-aae9-39491e4d4f2a", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : -2.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.69719224062738, "Y" : -5.4037436791634805, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "4f90ca53-ebd3-4360-b8f4-f2e09b65d1eb", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.69719224062738, "Y" : -5.4037436791634805, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 7.0, "Y" : -9.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }] }, { "_t" : "BH.oM.Structure.Elements.Opening", "BHoM_Guid" : "55120824-4f36-4930-9d82-a3b647231c6a", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Edges" : [{ "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "6f3ce9cb-5577-4459-9b00-0e11525cb184", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "5f8cd753-dd02-433f-9e0e-50e8fd4868a9", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 5.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 7.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "613c4031-153b-4a45-9cef-ba815c98fe0c", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 12.0, "Y" : 7.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 7.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }, { "_t" : "BH.oM.Structure.Elements.Edge", "BHoM_Guid" : "ea4f261d-0135-4524-bee7-108ad2cd17f5", "Name" : "", "Fragments" : [], "Tags" : [], "CustomData" : { }, "Curve" : { "_t" : "BH.oM.Geometry.Line", "Start" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 7.0, "Z" : 0.0 }, "End" : { "_t" : "BH.oM.Geometry.Point", "X" : 6.0, "Y" : 5.0, "Z" : 0.0 }, "Infinite" : false }, "Release" : null, "Support" : null }] }], "Property" : null, "OrientationAngle" : 0.0 }], "Outputs" : [[9019.1902958854189, 8970.8731360763886, 9000.0, 8997.0, 8992.0, 9000.0, 8987.0, 9005.0, 9000.0, 9002.0, 9018.0, 9000.0, 9014.0, 9012.0, 9000.0, 9021.0, 8995.0, 9000.0, 10008.0, 9988.0, 10000.0, 10018.817347903117, 9982.8486324412534, 10000.0, 10019.190295885419, 9970.8731360763886, 10000.0, 11002.0, 11005.605551275465, 11000.0, 10998.84043133207, 11000.263012425883, 11000.0, 11005.044267628704, 11000.068049015936, 11000.0, 9007.0, 8991.0, 9000.0, 9008.0, 8999.0, 9000.0, 9012.0, 8998.0, 9000.0, 9012.6971922406283, 8994.5962563208359, 9000.0, 9007.0, 8991.0, 9000.0, 9006.0, 9005.0, 9000.0, 9012.0, 9005.0, 9000.0, 9012.0, 9007.0, 9000.0, 9006.0, 9007.0, 9000.0, 9006.0, 9005.0, 9000.0]] }] }], "_bhomVersion" : "6.0" } \ No newline at end of file From 161dd6f02977fcc522d0e544338a0a557fb9f8a5 Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Wed, 9 Nov 2022 13:35:59 +0000 Subject: [PATCH 42/44] Update GeometryHash.cs --- Geometry_Engine/Query/GeometryHash.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 24334730f..c2893dd9f 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -377,7 +377,7 @@ private static double[] GeometryHash(this Point obj, double translationFactor) /***************************************************/ - [Description("The GeometryHash for a Point is simply an array of 3 numbers composed by the Point X, Y and Z coordinates.")] + [Description("The GeometryHash for a CompositeGeometry is given as the concatenated GeometryHash of the single elements composing it.")] private static double[] GeometryHash(this CompositeGeometry obj, double translationFactor) { return obj.Elements.SelectMany(c => c.IGeometryHash()).ToArray(); From ceff3940a937c7d6a3d8e5cc279c7b1abdbf34fb Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Wed, 9 Nov 2022 13:39:23 +0000 Subject: [PATCH 43/44] Update Geometry_Engine/Query/GeometryHash.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Isak Näslund --- Geometry_Engine/Query/GeometryHash.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index c2893dd9f..5fb1c1d63 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -280,7 +280,7 @@ private static double[] GeometryHash(this PolySurface obj, double translationFac /***************************************************/ - [Description("The GeometryHash for a SurfaceTrim is calculated as the GeometryHash of its Curve3d and Curve2d, concatenated.")] + [Description("The GeometryHash for a SurfaceTrim is calculated as the GeometryHash of its Curve3d.")] private static double[] GeometryHash(this SurfaceTrim obj, double translationFactor) { translationFactor += (int)TypeTranslationFactor.SurfaceTrim; From cb2610ad891eeed79674f37806289d1188dcbeee Mon Sep 17 00:00:00 2001 From: Alessio Lombardi Date: Thu, 17 Nov 2022 09:20:01 +0000 Subject: [PATCH 44/44] Add null guards --- Geometry_Engine/Query/FaceIndices.cs | 3 +++ Geometry_Engine/Query/GeometryHash.cs | 3 +++ 2 files changed, 6 insertions(+) diff --git a/Geometry_Engine/Query/FaceIndices.cs b/Geometry_Engine/Query/FaceIndices.cs index 87efca57b..30db0790b 100644 --- a/Geometry_Engine/Query/FaceIndices.cs +++ b/Geometry_Engine/Query/FaceIndices.cs @@ -40,6 +40,9 @@ public static partial class Query [Output("indices", "List of indices.")] public static List FaceIndices(this Face meshFace) { + if (meshFace == null) + return new List(); + List result = new List() { meshFace.A, meshFace.B, meshFace.C }; if (meshFace.D != -1) diff --git a/Geometry_Engine/Query/GeometryHash.cs b/Geometry_Engine/Query/GeometryHash.cs index 5fb1c1d63..d4f51d70c 100644 --- a/Geometry_Engine/Query/GeometryHash.cs +++ b/Geometry_Engine/Query/GeometryHash.cs @@ -47,6 +47,9 @@ public static partial class Query [Output("geomHash", "Array of numbers representing a unique signature of the input geometry.")] public static double[] IGeometryHash(this IGeometry igeometry) { + if (igeometry == null) + return new double[] { }; + return GeometryHash(igeometry as dynamic, 0); }