internal void Draw(MindFusion.Drawing.IGraphics graphics, Pen pen, Brush brush, Real xoff, Real yoff)
{
if (!defined)
return;
int c = 0;
for (int i = 0; i < elements.GetLength(0); ++i)
{
ArrowHeadElement el = (ArrowHeadElement)elements[i];
switch (el)
{
case ArrowHeadElement.Line:
{
Real x1 = coords[c++] + xoff;
Real y1 = coords[c++] + yoff;
Real x2 = coords[c++] + xoff;
Real y2 = coords[c++] + yoff;
graphics.DrawLine(pen, new Point(x1, y1), new Point(x2, y2));
}
break;
case ArrowHeadElement.Shape:
{
int pts = elements[++i];
Point[] shape = new Point[pts];
for (int j = 0; j < pts; ++j)
{
shape[j].X = coords[c++] + xoff;
shape[j].Y = coords[c++] + yoff;
}
graphics.FillPolygon(brush, shape);
graphics.DrawPolygon(pen, shape);
}
break;
case ArrowHeadElement.Circle:
{
Real cx = coords[c++] + xoff;
Real cy = coords[c++] + yoff;
Real r = coords[c++];
graphics.FillEllipse(brush, cx - r, cy - r, 2 * r, 2 * r);
graphics.DrawEllipse(pen, cx - r, cy - r, 2 * r, 2 * r);
}
break;
}
}
}
internal enum ArrowHeadElement
{
///
/// A line element.
///
Line,
///
/// A polygonal shape.
///
Shape,
///
/// A circle element.
///
Circle
};