public static Point Centroid(this IElement2D element2D) { Point tmp = Geometry.Query.Centroid(element2D.OutlineCurve()); double area = Geometry.Query.Area(element2D.OutlineCurve()); double x = tmp.X * area; double y = tmp.Y * area; double z = tmp.Z * area; List <PolyCurve> openings = Geometry.Compute.BooleanUnion(element2D.InternalOutlineCurves()); foreach (ICurve o in openings) { Point oTmp = Geometry.Query.ICentroid(o); double oArea = o.IArea(); x -= oTmp.X * oArea; y -= oTmp.Y * oArea; z -= oTmp.Z * oArea; area -= oArea; } return(new Point { X = x / area, Y = y / area, Z = z / area }); }
public static double Area(this IElement2D element2D) { double result = element2D.OutlineCurve().IArea(); List <PolyCurve> openings = element2D.InternalOutlineCurves().BooleanUnion(); foreach (PolyCurve o in openings) { result -= o.Area(); } return(result); }
public static double Area(this IElement2D element2D) { double result = BH.Engine.Geometry.Query.Area(element2D.OutlineCurve()); List <PolyCurve> openings = element2D.InternalOutlineCurves().BooleanUnion(); foreach (PolyCurve o in openings) { result -= BH.Engine.Geometry.Query.Area(o); } return(result); }
public static Plane FitPlane(this IElement2D element2D, bool externalOnly = false, double tolerance = Tolerance.Distance) { List <Point> controlPoints = element2D.OutlineCurve().ControlPoints(); if (!externalOnly) { foreach (PolyCurve internalOutline in element2D.InternalOutlineCurves()) { controlPoints.AddRange(internalOutline.ControlPoints()); } } return(controlPoints.FitPlane(tolerance)); }
public static bool IsSelfIntersecting(this IElement2D element2D, double tolerance = Tolerance.Distance) { if (Geometry.Query.IIsSelfIntersecting(element2D.OutlineCurve(), tolerance)) { return(true); } foreach (PolyCurve internalOutline in element2D.InternalOutlineCurves()) { if (Geometry.Query.IIsSelfIntersecting(internalOutline, tolerance)) { return(true); } } return(false); }
public static Point Centroid(this IElement2D element2D, double tolerance = Tolerance.Distance) { return(Geometry.Query.Centroid(new List <ICurve> { element2D.OutlineCurve() }, element2D.InternalOutlineCurves(), tolerance)); }