IEnumerable <VertexData> GetVertexIter()
{
currentProcessingArc.UseStartEndLimit = true;
currentProcessingArc.Init(bounds.Left + leftBottomRadius.x, bounds.Bottom + leftBottomRadius.y, leftBottomRadius.x, leftBottomRadius.y, Math.PI, Math.PI + Math.PI * 0.5);
currentProcessingArc.SetStartEndLimit(bounds.Left, bounds.Bottom + leftBottomRadius.y,
bounds.Left + leftBottomRadius.x, bounds.Bottom);
foreach (VertexData vertexData in currentProcessingArc.GetVertexIter())
{
if (VertexHelper.IsEmpty(vertexData.command))
{
break;
}
yield return(vertexData);
}
currentProcessingArc.Init(bounds.Right - rightBottomRadius.x, bounds.Bottom + rightBottomRadius.y, rightBottomRadius.x, rightBottomRadius.y, Math.PI + Math.PI * 0.5, 0.0);
currentProcessingArc.SetStartEndLimit(bounds.Right - rightBottomRadius.x,
bounds.Bottom, bounds.Right, bounds.Bottom + rightBottomRadius.y);
foreach (VertexData vertexData in currentProcessingArc.GetVertexIter())
{
if (VertexHelper.IsMoveTo(vertexData.command))
{
// skip the initial moveto
continue;
}
if (VertexHelper.IsEmpty(vertexData.command))
{
break;
}
yield return(vertexData);
}
currentProcessingArc.Init(bounds.Right - rightTopRadius.x, bounds.Top - rightTopRadius.y, rightTopRadius.x, rightTopRadius.y, 0.0, Math.PI * 0.5);
currentProcessingArc.SetStartEndLimit(bounds.Right, bounds.Top - rightTopRadius.y,
bounds.Right - rightTopRadius.x, bounds.Top);
foreach (VertexData vertexData in currentProcessingArc.GetVertexIter())
{
if (VertexHelper.IsMoveTo(vertexData.command))
{
// skip the initial moveto
continue;
}
if (VertexHelper.IsEmpty(vertexData.command))
{
break;
}
yield return(vertexData);
}
currentProcessingArc.Init(bounds.Left + leftTopRadius.x, bounds.Top - leftTopRadius.y, leftTopRadius.x, leftTopRadius.y, Math.PI * 0.5, Math.PI);
currentProcessingArc.SetStartEndLimit(bounds.Left - leftTopRadius.x, bounds.Top,
bounds.Left, bounds.Top - leftTopRadius.y);
foreach (VertexData vertexData in currentProcessingArc.GetVertexIter())
{
switch (vertexData.command)
{
case VertexCmd.MoveTo:
continue;
case VertexCmd.NoMore:
break;
default:
yield return(vertexData);
break;
}
}
yield return(new VertexData(VertexCmd.Close, (int)EndVertexOrientation.CCW, 0));
yield return(new VertexData(VertexCmd.NoMore));
}