internal RectangleF getTextRect(PathData data, float rotationAngle) { GraphicsPath path = null; if (textArea == null) { path = getPath(data, rotationAngle); } else { path = new GraphicsPath(fillMode); int offset = elements.Length; if (decorations != null) offset += decorations.Length; for (int i = 0; i < textArea.Length; ++i) textArea[i].updatePath(path, data.getData(offset + i)); path.CloseFigure(); rotatePath(data, path, rotationAngle); } RectangleF result = path.GetBounds(); path.Dispose(); return result; }
internal PointF[] getTextArea(PathData data, float rotationAngle) { GraphicsPath path = null; if (textArea == null) { path = getPath(data, rotationAngle); } else { path = new GraphicsPath(fillMode); int offset = elements.Length; if (decorations != null) offset += decorations.Length; for (int i = 0; i < textArea.Length; ++i) textArea[i].updatePath(path, data.getData(offset + i)); path.CloseFigure(); rotatePath(data, path, rotationAngle); } path.Flatten(); PointF[] result = path.PointCount > 2 ? (PointF[])path.PathPoints.Clone() : null; path.Dispose(); return result; }
internal GraphicsPath getPath(PathData data, float rotationAngle) { GraphicsPath path = new GraphicsPath(fillMode); for (int i = 0; i < elements.GetLength(0); ++i) elements[i].updatePath(path, data.getData(i)); path.CloseFigure(); rotatePath(data, path, rotationAngle); return path; }
internal GraphicsPath getDecorationPath(PathData data, float rotationAngle) { if (decorations == null) return null; GraphicsPath path = new GraphicsPath(fillMode); // Add decorations as separate figures for (int i = 0; i < decorations.Length; i++) { path.StartFigure(); decorations[i].updatePath(path, data.getData(elements.Length + i)); } rotatePath(data, path, rotationAngle); return path; }
internal void updateData(RectangleF rc, PathData data, float rotation) { int i; for (i = 0; i < elements.GetLength(0); ++i) elements[i].updateData(rc, data.getData(i), rotation); if (decorations != null) { for (i = 0; i < decorations.Length; i++) decorations[i].updateData(rc, data.getData(elements.Length + i), rotation); } if (textArea != null) { int offset = elements.Length; if (decorations != null) offset += decorations.Length; for (i = 0; i < textArea.Length; i++) textArea[i].updateData(rc, data.getData(offset + i), rotation); } data.setBounds(rc); }