private void Process()
{
var firstPoint = this.FindFirstPoint();
var directionPoint = new Point(firstPoint.X, firstPoint.Y - 1, firstPoint.Z);
var currentPoint = firstPoint;
this.contourPoints.Add(currentPoint);
Point? nextPoint;
do
{
nextPoint = this.GetNextPoint(currentPoint, directionPoint);
if (nextPoint.HasValue)
{
directionPoint = currentPoint;
this.contourPoints.Add(nextPoint.Value);
currentPoint = nextPoint.Value;
}
} while (nextPoint.HasValue && !firstPoint.Equals(nextPoint));
this.contourPoints.Add(firstPoint);
}