Calculate area of closed shape by 2 intersecting elements
Description
Remarks
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;
}