示例#1
0
		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;
		}
示例#2
0
		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;
		}
示例#3
0
		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;
		}
示例#4
0
		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;
		}
示例#5
0
		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);
		}