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 };