Exemple #1
0
        /// <summary>
        /// (re)calculates the given GraphicsPath according to the given CapShape.
        /// </summary>
        /// <param name="capPath">Reference of the GraphicsPath to (re)calculate</param>
        /// <param name="capShape">Desired shape of the LineCap</param>
        /// <param name="capSize">Desired Size of the LineCap</param>
        private static void CalcCapShape(ref GraphicsPath capPath, CapShape capShape, float capSize)
        {
            Debug.Assert(capSize >= 0);
            if (capPath == null)
            {
                capPath = new GraphicsPath();
            }

            float halfSize = capSize / 2f;

            capPath.Reset();
            switch (capShape)
            {
            case CapShape.ClosedArrow:
                capPath.StartFigure();
                capPath.AddLine(-halfSize, -capSize, 0, 0);
                capPath.AddLine(0, 0, halfSize, -capSize);
                capPath.AddLine(halfSize, -capSize, -halfSize, -capSize);
                capPath.CloseFigure();
                break;

            case CapShape.OpenArrow:
                float quaterSize = capSize / 4f;
                capPath.StartFigure();
                capPath.AddLine(-halfSize, -capSize, 0, 0);
                capPath.AddLine(0, 0, halfSize, -capSize);
                capPath.AddLine(halfSize, -capSize, 0, -quaterSize);
                capPath.AddLine(0, -quaterSize, -halfSize, -capSize);
                capPath.CloseFigure();
                break;

            case CapShape.Triangle:
                capPath.StartFigure();
                capPath.AddLine(0, -capSize, -halfSize, 0);
                capPath.AddLine(-halfSize, 0, halfSize, 0);
                capPath.AddLine(halfSize, 0, 0, -capSize);
                capPath.CloseFigure();
                break;

            case CapShape.Circle:
                capPath.StartFigure();
                capPath.AddEllipse(-halfSize, -capSize, capSize, capSize);
                capPath.CloseFigure();
                break;

            case CapShape.Square:
                _rectFBuffer.X      = -halfSize;
                _rectFBuffer.Y      = -capSize;
                _rectFBuffer.Width  = halfSize + halfSize;
                _rectFBuffer.Height = capSize;
                capPath.StartFigure();
                capPath.AddRectangle(_rectFBuffer);
                capPath.CloseFigure();
                break;

            case CapShape.Diamond:
                capPath.StartFigure();
                capPath.AddLine(0, 0, -halfSize, -halfSize);
                capPath.AddLine(-halfSize, -halfSize, 0, -capSize);
                capPath.AddLine(0, -capSize, halfSize, -halfSize);
                capPath.AddLine(halfSize, -halfSize, 0, 0);
                capPath.CloseFigure();
                break;

            case CapShape.CenteredCircle:
                capPath.StartFigure();
                capPath.AddEllipse(-halfSize, -halfSize, capSize, capSize);
                capPath.CloseFigure();
                break;

            case CapShape.CenteredHalfCircle:
                capPath.StartFigure();
                capPath.StartFigure();
                capPath.AddArc(-halfSize, -halfSize, capSize, capSize, 0f, -180f);
                capPath.AddLine(-halfSize, 0, -halfSize - 1, 0);
                capPath.AddArc(-halfSize - 1, -halfSize - 1, capSize + 2, capSize + 2, 180f, 180f);
                capPath.AddLine(halfSize + 1, 0, halfSize, 0);
                capPath.CloseFigure();
                capPath.CloseFigure();
                break;

            case CapShape.None:
            case CapShape.Round:
                return;

            default: throw new NShapeUnsupportedValueException(capShape);
            }
        }
Exemple #2
0
		/// <summary>
		/// (re)calculates the given GraphicsPath according to the given CapShape.
		/// </summary>
		/// <param name="capPath">Reference of the GraphicsPath to (re)calculate</param>
		/// <param name="capShape">Desired shape of the LineCap</param>
		/// <param name="capSize">Desired Size of the LineCap</param>
		private static void CalcCapShape(ref GraphicsPath capPath, CapShape capShape, int capSize) {
			Debug.Assert(capSize >= 0);
			if (capPath == null) capPath = new GraphicsPath();
			
			float halfSize = capSize / 2f;
			capPath.Reset();		
			switch (capShape) {
				case CapShape.ArrowClosed:
					capPath.StartFigure();
					capPath.AddLine(-halfSize, -capSize, 0, 0);
					capPath.AddLine(0, 0, halfSize, -capSize);
					capPath.AddLine(halfSize, -capSize, -halfSize, -capSize);
					capPath.CloseFigure();
					break;
				case CapShape.ArrowOpen:
					float quaterSize = capSize / 4f;
					capPath.StartFigure();
					capPath.AddLine(-halfSize, -capSize, 0, 0);
					capPath.AddLine(0, 0, halfSize, -capSize);
					capPath.AddLine(halfSize, -capSize, 0, -quaterSize);
					capPath.AddLine(0, -quaterSize, -halfSize, -capSize);
					capPath.CloseFigure();
					break;
				case CapShape.Triangle:
					capPath.StartFigure();
					capPath.AddLine(0, -capSize, -halfSize, 0);
					capPath.AddLine(-halfSize, 0, halfSize, 0);
					capPath.AddLine(halfSize, 0, 0, -capSize);
					capPath.CloseFigure();
					break;
				case CapShape.Circle:
					capPath.StartFigure();
					capPath.AddEllipse(-halfSize, -capSize, capSize, capSize);
					capPath.CloseFigure();
					break;
				case CapShape.Square:
					rectFBuffer.X = -halfSize;
					rectFBuffer.Y = -capSize;
					rectFBuffer.Width = halfSize + halfSize;
					rectFBuffer.Height = capSize;
					capPath.StartFigure();
					capPath.AddRectangle(rectFBuffer);
					capPath.CloseFigure();
					break;
				case CapShape.Diamond:
					capPath.StartFigure();
					capPath.AddLine(0, 0, -halfSize, -halfSize);
					capPath.AddLine(-halfSize, -halfSize, 0, -capSize);
					capPath.AddLine(0, -capSize, halfSize, -halfSize);
					capPath.AddLine(halfSize, -halfSize, 0, 0);
					capPath.CloseFigure();
					break;
				case CapShape.CenteredCircle:
					capPath.StartFigure();
					capPath.AddEllipse(-halfSize, -halfSize, capSize, capSize);
					capPath.CloseFigure();
					break;
				case CapShape.CenteredHalfCircle:
					capPath.StartFigure();
					capPath.StartFigure();
					capPath.AddArc(-halfSize, -halfSize, capSize, capSize, 0f, -180f);
					capPath.AddLine(-halfSize, 0, -halfSize - 1, 0);
					capPath.AddArc(-halfSize - 1, -halfSize - 1, capSize + 2, capSize + 2, 180f, 180f);
					capPath.AddLine(halfSize + 1, 0, halfSize, 0);
					capPath.CloseFigure();
					capPath.CloseFigure();
					break;
				case CapShape.None:
					return;
				default: throw new NShapeUnsupportedValueException(capShape);
			}
		}