Public NotInheritable Class AlgebraicArea
Private Sub New()
End Sub
Public Shared Function GetArea(pt1 As Point2d, pt2 As Point2d, pt3 As Point2d) As Double
Return (((pt2.X - pt1.X) * (pt3.Y - pt1.Y)) - ((pt3.X - pt1.X) * (pt2.Y - pt1.Y))) / 2
End Function
Public Shared Function GetArea(arc As CircularArc2d) As Double
Dim rad As Double = arc.Radius
Dim ang As Double = If(arc.IsClockWise, arc.StartAngle - arc.EndAngle, arc.EndAngle - arc.StartAngle)
Return rad * rad * (ang - Math.Sin(ang)) / 2
End Function
Public Shared Function GetArea(pline As Polyline) As Double
Dim arc As New CircularArc2d()
Dim area As Double = 0
Dim last As Integer = pline.NumberOfVertices - 1
Dim p0 As Point2d = pline.GetPoint2dAt(0)
If pline.GetBulgeAt(0) <> 0 Then
area += GetArea(pline.GetArcSegment2dAt(0))
End If
For i As Integer = 1 To last - 1
area += GetArea(p0, pline.GetPoint2dAt(i), pline.GetPoint2dAt(i + 1))
If pline.GetBulgeAt(i) <> 0 Then
area += GetArea(pline.GetArcSegment2dAt(i))
End If
Next
If (pline.GetBulgeAt(last) <> 0) AndAlso pline.Closed Then
area += GetArea(pline.GetArcSegment2dAt(last))
End If
Return area
End Function
End Class