public void CalculateShapes()
{
circles.Clear();
triangles.Clear();
quadrilaterals.Clear();
polylines.Clear();
CalculateBlobs();
Ag.SimpleShapeChecker shapeChecker = new Ag.SimpleShapeChecker();
if (Angle >= 0)
{
shapeChecker.AngleError = (float)Angle;
}
if (Length >= 0)
{
shapeChecker.LengthError = (float)Length;
}
if (Distortion >= 0)
{
shapeChecker.MinAcceptableDistortion = (float)Distortion;
}
foreach (Blob blob in blobObjects)
{
List <Accord.IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blob);
Accord.Point center;
float radius;
if (shapeChecker.IsCircle(edgePoints, out center, out radius))
{
circles.Add(new Rg.Circle(Rg.Plane.WorldXY, center.ToRhPoint(bitmap.Height), radius).ToNurbsCurve());
}
else
{
List <Accord.IntPoint> corners;
if (edgePoints.Count > 2)
{
if (shapeChecker.IsConvexPolygon(edgePoints, out corners))
{
if (shapeChecker.IsTriangle(edgePoints))
{
triangles.Add(corners.ToRhinoPoints(bitmap.Height).ToPolyline(true).ToNurbsCurve());
}
else if (shapeChecker.IsQuadrilateral(edgePoints))
{
quadrilaterals.Add(corners.ToRhinoPoints(bitmap.Height).ToPolyline(true).ToNurbsCurve());
}
else
{
polylines.Add(corners.ToRhinoPoints(bitmap.Height).ToPolyline(true).ToNurbsCurve());
}
}
}
}
}
}