OpenRoads Designer CONNECT Edition SDK Help

Calculate area of closed shape by 2 intersecting elements

Description

  • This code calculates the area of closed shape by 2 intersecting elements.
  • Below are two examples

Remarks

  • Include reference Bentley.GeometryNET to use this code

Source Code

Example 1: OuterBOX contains innerBOX


													//Required reference
													using Bentley.GeometryNET;
            
	 										//---------------------------------------------------------------------
            /// Calculate Area of Close Shape created from Intersecting Elements
            ///---------------------------------------------------------------------

            ///---EXAMPLE 1---  outerBOX contains innerBOX

            //Create a Smaller box using LINESTRING & add geometry to CurveVector
            DPoint3d[] tPoints = new DPoint3d[4];
            tPoints[0] = new DPoint3d(0, 0, 0);
            tPoints[1] = new DPoint3d(0, 50, 0);
            tPoints[2] = new DPoint3d(50, 50, 0);
            tPoints[3] = new DPoint3d(50, 0, 0);

            CurveVector lcv = CurveVector.CreateLinear(tPoints, CurveVector.BoundaryType.Inner, false);


            //Create a Larger box LINESTRING & add geometry to CurveVector
            DPoint3d[] tPoints2 = new DPoint3d[4];
            tPoints2[0] = new DPoint3d(0, 0, 0);
            tPoints2[1] = new DPoint3d(0, 100, 0);
            tPoints2[2] = new DPoint3d(100, 100, 0);
            tPoints2[3] = new DPoint3d(100, 0, 0);
            CurveVector lcv2 = CurveVector.CreateLinear(tPoints2, CurveVector.BoundaryType.Inner, false);

            //Main Curve Vector for calculating Intersections
            CurveVector LineXLineCv = CurveVector.AreaIntersection(lcv, lcv2); //LineString vs LineString

            //Collect Output Information
            DPoint3d CentroidPt; Double InterSectionArea;
            LineXLineCv.CentroidAreaXY(out CentroidPt, out InterSectionArea);
            Console.WriteLine("Intersection Area of LineString & LineString is : " + InterSectionArea.ToString());

Example 2: Line Intersects Arc


 										 public void CalculateArea2()
        {
            //Create a Smaller box using LINESTRING & add geometry to CurveVector
            DPoint3d[] lPoints = new DPoint3d[2];
            lPoints[0] = new DPoint3d(0, 0, 0);
            lPoints[1] = new DPoint3d(50, 50, 0);

            CurveVector lineCv = CurveVector.CreateLinear(lPoints, CurveVector.BoundaryType.Inner, false);

            //Create Arc & add geometry to CurveVector
            DPoint3d[] aPoints = new DPoint3d[3];
            aPoints[0] = new DPoint3d(0, 0, 0);
            aPoints[1] = new DPoint3d(40, 20, 0);
            aPoints[2] = new DPoint3d(50, 50, 0);

            DEllipse3d ellipse3D;
            DEllipse3d.TryCircularArcFromStartMiddleEnd(aPoints[0], aPoints[1], aPoints[2], out ellipse3D);
            //NOTE:
            //if ellipse3D.isCircular() == true && ellipse3D.isFull() == false -> It's a ARC
            //if ellipse3D.isCircular() == true && ellipse3D.isFull() == true-> It's a CIRCLE
            //if ellipse3D.isCircular() == false  -> It's an ELLIPSE
            CurveVector lcv3 = CurveVector.CreateDisk(ellipse3D, CurveVector.BoundaryType.Inner);


            //Main Curve Vector for calculating union
            CurveVector LineXArcCv = CurveVector.AreaUnion(lineCv, lcv3); //LineString vs Arc
            if (LineXArcCv == null) return;

            //Collect Output Information
            DPoint3d CentroidPt; Double UnionArea;
            LineXArcCv.CentroidAreaXY(out CentroidPt, out UnionArea);
            Console.WriteLine("Union Area of LineString & Arc is : " + UnionArea.ToString());
            return;
        }