Esempio n. 1
0
        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
            });
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 6
0
 public static Point Centroid(this IElement2D element2D, double tolerance = Tolerance.Distance)
 {
     return(Geometry.Query.Centroid(new List <ICurve> {
         element2D.OutlineCurve()
     }, element2D.InternalOutlineCurves(), tolerance));
 }