DynamoVisualProgramming.ZeroTouchLibrary by Autodesk

<PackageReference Include="DynamoVisualProgramming.ZeroTouchLibrary" Version="2.0.0-beta2536" />

 GeometryExtension

public static class GeometryExtension
using Autodesk.DesignScript.Interfaces; using Autodesk.DesignScript.Runtime; using System; using System.Collections.Generic; using System.IO; using System.Reflection; namespace Autodesk.DesignScript.Geometry { [SupressImportIntoVM] public static class GeometryExtension { internal static string DoublePrintFormat = "F3"; public static readonly double PI = 3.141592653589793; public static bool LessThanOrEquals(double x, double y, double tolerance = 1E-06) { if (Equals(x, y, tolerance)) return true; if (x < y) return true; return false; } public static bool Equals(double x, double y, double tolerance = 1E-06) { return Math.Abs(x - y) < tolerance; } public static bool EqualsTo(this double thisValue, double value) { return Equals(thisValue, value, 1E-06); } public static bool LessThanOrEqualTo(this double thisValue, double value) { if (!(thisValue < value)) return Equals(thisValue, value, 1E-06); return true; } [SupressImportIntoVM] internal static bool EqualsTo(this IPointEntity thisValue, IPointEntity value) { if (thisValue == value) return true; if (thisValue == null || value == null) return false; if (Equals(thisValue.get_X(), value.get_X(), 1E-06) && Equals(thisValue.get_Y(), value.get_Y(), 1E-06)) return Equals(thisValue.get_Z(), value.get_Z(), 1E-06); return false; } [SupressImportIntoVM] public static bool AreCoincident(this IPointEntity[] pts) { if (pts == null) return true; int num = pts.Length; for (int i = 0; i < num - 1; i++) { if (!pts[i].EqualsTo(pts[i + 1])) return false; } return true; } public static double DegreesToRadians(double deg) { return deg * PI / 180; } public static double RadiansToDegrees(double rad) { return rad * 180 / PI; } [SupressImportIntoVM] public static IPointEntity[][] ToPointEntityArray(this Point[][] points, bool checkRectangular = true) { if (points == null) return null; List<IPointEntity[]> list = new List<IPointEntity[]>(); int num = -1; for (int i = 0; i < points.Length; i++) { IPointEntity[] array = points[i].ConvertAll(GeometryExtension.ToEntity<Point, IPointEntity>); if (array != null && array.Length != 0) { if (checkRectangular) { if (num == -1) num = array.Length; if (num != array.Length) return null; } list.Add(array); } } if (list.Count == 0) return null; return list.ToArray(); } [SupressImportIntoVM] public static Point[][] ToPointArray(this IPointEntity[][] points, bool checkRectangular = true) { List<Point[]> list = new List<Point[]>(); int num = -1; for (int i = 0; i < points.Length; i++) { Point[] array = points[i].ConvertAll((IPointEntity p) => p.ToPoint(false, null)); if (array != null) { if (checkRectangular) { if (num == -1) num = array.Length; if (num != array.Length) return null; } list.Add(array); } } return list.ToArray(); } private static GeomClass ToGeometry<GeomClass, GeomEntity>(this GeomEntity host, bool persist = false, Geometry context = null) where GeomClass : Geometry where GeomEntity : IGeometryEntity { return Geometry.Wrap((object)host, persist, context) as GeomClass; } [SupressImportIntoVM] internal static GEOM[] ToArray<GEOM, ENTITY>(this ENTITY[] hosts, bool persist = true, Geometry context = null) where GEOM : Geometry where ENTITY : IGeometryEntity { if (hosts == null) return null; List<GEOM> list = new List<GEOM>(); foreach (ENTITY val in hosts) { if (val != null) { GEOM val2 = Geometry.Wrap((object)val, persist, context) as GEOM; if (val2 != null) list.Add(val2); } } return list.ToArray(); } [SupressImportIntoVM] public static IDesignScriptEntity ToEntity(this DesignScriptEntity data) { return data.ToEntity<DesignScriptEntity, IDesignScriptEntity>(); } [SupressImportIntoVM] internal static ENTITY ToEntity<GEOMETRY, ENTITY>(this GEOMETRY data) where GEOMETRY : DesignScriptEntity where ENTITY : IDesignScriptEntity { if (data == null) return default(ENTITY); return (ENTITY)(object)data.HostImpl; } [SupressImportIntoVM] public static ICurveEntity GetCurveEntity(Curve curve, bool checkClosed) { bool isClosed = curve.IsClosed; if ((checkClosed & isClosed) || (!checkClosed && !isClosed)) return curve.CurveEntity; return null; } internal static bool IsDisposed<T>(this T obj) where T : DesignScriptEntity { return obj?.IsDisposed ?? true; } internal static bool IsDisposed<T>(this T[] obj) where T : DesignScriptEntity { if (obj == null) return true; for (int i = 0; i < obj.Length; i++) { if (obj[i].IsDisposed()) return true; } return false; } internal static bool IsDisposed<T>(this T[][] obj) where T : DesignScriptEntity { if (obj == null) return true; for (int i = 0; i < obj.Length; i++) { if (obj[i].IsDisposed()) return true; } return false; } internal static void DisposeObject(this IDisposable obj) { obj?.Dispose(); } internal static void DisposeObject<T>(ref T obj) where T : DesignScriptEntity { if (obj != null) { obj.ReleaseEntity(); if (obj.IsDisposed) obj = null; } } internal static void DisposeObject<T>(ref T[] obj) where T : DesignScriptEntity { obj.ForEach(delegate(T item) { GeometryExtension.DisposeObject<T>(ref item); }); if (obj.IsDisposed()) obj = null; } internal static void DisposeObject<T>(ref T[][] obj) where T : DesignScriptEntity { obj.ForEach(delegate(T[] item) { GeometryExtension.DisposeObject<T>(ref item); }); if (obj.IsDisposed()) obj = null; } internal static void DisposeObject(this IDisposable[] obj) { obj.ForEach(DisposeObject); } internal static void DisposeObject(this IDisposable[][] obj) { obj.ForEach((Action<IDisposable>)DisposeObject); } internal static void AssignTo<T>(this T right, ref T left) where T : DesignScriptEntity { DisposeObject(ref left); left = right.Retain(); } internal static void AssignTo<T>(this T[] right, ref T[] left) where T : DesignScriptEntity { DisposeObject(ref left); left = right.Retain(); } internal static void AssignTo<T>(this T[][] right, ref T[][] left) where T : DesignScriptEntity { DisposeObject(ref left); left = right.Retain(); } internal static DesignScriptEntity Retain(this DesignScriptEntity entity) { entity?.RetainEntity(); return entity; } internal static T Retain<T>(this T entity) where T : DesignScriptEntity { entity?.RetainEntity(); return entity; } internal static T[] Retain<T>(this T[] entities) where T : DesignScriptEntity { if (entities == null) return entities; for (int i = 0; i < entities.Length; i++) { entities[i].Retain(); } return entities; } internal static T[][] Retain<T>(this T[][] entities) where T : DesignScriptEntity { if (entities == null) return entities; for (int i = 0; i < entities.Length; i++) { entities[i].Retain(); } return entities; } public static void ForEach<T>(this T[] array, Action<T> action) { if (array != null) { foreach (T obj in array) { action(obj); } } } public static void ForEach<T>(this T[][] array, Action<T> action) { if (array != null) { for (int i = 0; i < array.Length; i++) { array[i].ForEach(action); } } } public static TOutput[] ConvertAll<TInput, TOutput>(this TInput[] array, Converter<TInput, TOutput> converter) { if (array == null) return null; List<TOutput> list = new List<TOutput>(); foreach (TInput val in array) { if (val != null) { TOutput val2 = converter(val); if (val2 != null) list.Add(val2); } } if (list.Count == 0) return null; return list.ToArray(); } internal static Point[] CreatePoints(this IPointEntity[] points) { return points.ToArray<Point, IPointEntity>(false, (Geometry)null); } internal static Point ToPoint(this IPointEntity host, bool persist, Geometry context) { return host.ToGeometry<Point, IPointEntity>(persist, context); } internal static Curve ToCurve(this ICurveEntity host, bool persist, Geometry context) { return host.ToGeometry<Curve, ICurveEntity>(persist, context); } internal static Line ToLine(this ILineEntity host, bool persist, Geometry context) { return host.ToGeometry<Line, ILineEntity>(persist, context); } internal static Surface ToSurf(this ISurfaceEntity host, bool persist, Geometry context) { return host.ToGeometry<Surface, ISurfaceEntity>(persist, context); } internal static NurbsSurface ToNurbsSurf(this INurbsSurfaceEntity host, bool persist, Geometry context) { return host.ToGeometry<NurbsSurface, INurbsSurfaceEntity>(persist, context); } internal static Plane ToPlane(this IPlaneEntity host, bool persist, Geometry context) { return host.ToGeometry<Plane, IPlaneEntity>(persist, context); } internal static Solid ToSolid(this ISolidEntity host, bool persist, Geometry context) { return host.ToGeometry<Solid, ISolidEntity>(persist, context); } internal static bool ClipParamRange(ref double param) { if (param < 0) { param = 0; return true; } if (param > 1) { param = 1; return true; } return false; } public static string LocateFile(string fileName) { if (fileName == null) return null; IExecutionSession session = Application.Instance.Session; if (session != null) { string text = session.SearchFile(fileName); if (text != null) return text; } else { string text2 = Path.Combine(Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath), fileName); if (text2 != null && File.Exists(text2)) return text2; } string[] array = (Environment.GetEnvironmentVariable("PATH") ?? "").Split(new char[1] { ';' }); char[] trimChars = new char[1] { '"' }; string[] array2 = array; for (int i = 0; i < array2.Length; i++) { string text3 = array2[i].Trim(); if (!string.IsNullOrEmpty(text3)) { text3 = text3.Trim(trimChars); if (!string.IsNullOrEmpty(text3) && File.Exists(text3 = Path.Combine(text3, fileName))) return Path.GetFullPath(text3); } } return fileName; } } }