Beispiel #1
0
        private void DrawStencilItem(StencilItem stencil, DrawShapeEventArgs e)
        {
            ArrowStencilType stencilType     = (ArrowStencilType)Enum.Parse(typeof(ArrowStencilType), stencil.Key);
            Matrix           translateMatrix = new Matrix();

            if (stencilType == ArrowStencilType.Left || stencilType == ArrowStencilType.Right || stencilType == ArrowStencilType.Up || stencilType == ArrowStencilType.Down)
            {
                //Draw the arrow using a 100x100 grid
                e.Path.AddLine(0, 30, 60, 30);
                e.Path.AddLine(60, 30, 60, 0);
                e.Path.AddLine(60, 0, 100, 50);
                e.Path.AddLine(100, 50, 60, 100);
                e.Path.AddLine(60, 100, 60, 70);
                e.Path.AddLine(60, 70, 0, 70);

                //Close the figure
                e.Path.CloseFigure();

                //Rotate the path depending on the type of arrow
                if (stencilType == ArrowStencilType.Right)
                {
                    translateMatrix.RotateAt(180, new PointF(50, 50));
                }
                if (stencilType == ArrowStencilType.Up)
                {
                    translateMatrix.RotateAt(-90, new PointF(50, 50));
                }
                if (stencilType == ArrowStencilType.Down)
                {
                    translateMatrix.RotateAt(90, new PointF(50, 50));
                }

                //Scale the matrix and apply it back to the path
                translateMatrix.Scale(e.Width / 100, e.Height / 100);
                e.Path.Transform(translateMatrix);
            }
            else if (stencilType == ArrowStencilType.LeftRight || stencilType == ArrowStencilType.UpDown)
            {
                //Draw the arrow using a 120x100 grid
                e.Path.AddLine(40, 30, 80, 30);
                e.Path.AddLine(80, 30, 80, 0);
                e.Path.AddLine(80, 0, 120, 50);
                e.Path.AddLine(120, 50, 80, 100);
                e.Path.AddLine(80, 100, 80, 70);
                e.Path.AddLine(80, 70, 40, 70);

                e.Path.AddLine(40, 70, 40, 100);
                e.Path.AddLine(40, 100, 0, 50);
                e.Path.AddLine(0, 50, 40, 0);
                e.Path.AddLine(40, 0, 40, 30);

                if (stencilType == ArrowStencilType.UpDown)
                {
                    translateMatrix.RotateAt(90, new PointF(50, 50));
                }

                //Scale the matrix and apply it back to the path
                translateMatrix.Scale(e.Width / 120, e.Height / 100);
                e.Path.Transform(translateMatrix);

                stencil.Options = StencilItemOptions.InnerRectangleFull;
            }
            else if (stencilType == ArrowStencilType.LeftRightUpDown)
            {
                //Draw the arrow using a 140x140 grid
                e.Path.AddLine(80, 60, 110, 60);
                e.Path.AddLine(110, 60, 110, 50);
                e.Path.AddLine(110, 50, 140, 70);
                e.Path.AddLine(140, 70, 110, 90);
                e.Path.AddLine(110, 90, 110, 80);
                e.Path.AddLine(110, 80, 80, 80);

                e.Path.AddLine(80, 80, 80, 110);
                e.Path.AddLine(80, 110, 90, 110);
                e.Path.AddLine(90, 110, 70, 140);
                e.Path.AddLine(70, 140, 50, 110);
                e.Path.AddLine(50, 110, 60, 110);
                e.Path.AddLine(60, 110, 60, 80);

                e.Path.AddLine(60, 80, 30, 80);
                e.Path.AddLine(30, 80, 30, 90);
                e.Path.AddLine(30, 90, 0, 70);
                e.Path.AddLine(0, 70, 30, 50);
                e.Path.AddLine(30, 50, 30, 60);

                e.Path.AddLine(30, 60, 60, 60);
                e.Path.AddLine(60, 60, 60, 30);
                e.Path.AddLine(60, 30, 50, 30);
                e.Path.AddLine(50, 30, 70, 0);
                e.Path.AddLine(70, 0, 90, 30);
                e.Path.AddLine(90, 30, 80, 30);
                e.Path.AddLine(80, 30, 80, 60);

                //Scale the matrix and apply it back to the path
                translateMatrix.Scale(e.Width / 140, e.Height / 140);
                e.Path.Transform(translateMatrix);
            }
            if (stencilType == ArrowStencilType.Striped)
            {
                //Draw the arrow using a 100x100 grid
                e.Path.AddRectangle(new Rectangle(0, 30, 4, 40));
                e.Path.AddRectangle(new Rectangle(8, 30, 8, 40));

                e.Path.AddLine(20, 30, 60, 30);
                e.Path.AddLine(60, 30, 60, 0);
                e.Path.AddLine(60, 0, 100, 50);
                e.Path.AddLine(100, 50, 60, 100);
                e.Path.AddLine(60, 100, 60, 70);
                e.Path.AddLine(60, 70, 20, 70);

                //Close the figure
                e.Path.CloseFigure();

                //Scale the matrix and apply it back to the path
                translateMatrix.Scale(e.Width / 100, e.Height / 100);
                e.Path.Transform(translateMatrix);

                stencil.Options = StencilItemOptions.InnerRectangleFull;
            }
            if (stencilType == ArrowStencilType.Notched)
            {
                //Draw the arrow using a 100x100 grid
                e.Path.AddLine(0, 30, 60, 30);
                e.Path.AddLine(60, 30, 60, 0);
                e.Path.AddLine(60, 0, 100, 50);
                e.Path.AddLine(100, 50, 60, 100);
                e.Path.AddLine(60, 100, 60, 70);
                e.Path.AddLine(60, 70, 0, 70);
                e.Path.AddLine(0, 70, 20, 50);

                //Close the figure
                e.Path.CloseFigure();

                //Scale the matrix and apply it back to the path
                translateMatrix.Scale(e.Width / 100, e.Height / 100);
                e.Path.Transform(translateMatrix);
            }
            if (stencilType == ArrowStencilType.Pentagon)
            {
                //Draw the arrow using a 120x100 grid
                e.Path.AddLine(0, 0, 80, 0);
                e.Path.AddLine(80, 0, 120, 50);
                e.Path.AddLine(120, 50, 80, 100);
                e.Path.AddLine(80, 100, 0, 100);

                //Close the figure
                e.Path.CloseFigure();

                //Scale the matrix and apply it back to the path
                translateMatrix.Scale(e.Width / 100, e.Height / 100);
                e.Path.Transform(translateMatrix);
            }
            else if (stencilType == ArrowStencilType.Chevron)
            {
                //Draw the arrow using a 120x100 grid
                e.Path.AddLine(0, 0, 80, 0);
                e.Path.AddLine(80, 0, 120, 50);
                e.Path.AddLine(120, 50, 80, 100);
                e.Path.AddLine(80, 100, 0, 100);
                e.Path.AddLine(0, 100, 20, 50);

                //Close the figure
                e.Path.CloseFigure();

                //Scale the matrix and apply it back to the path
                translateMatrix.Scale(e.Width / 100, e.Height / 100);
                e.Path.Transform(translateMatrix);
            }
            else if (stencilType == ArrowStencilType.RightCallout || stencilType == ArrowStencilType.LeftCallout || stencilType == ArrowStencilType.UpCallout || stencilType == ArrowStencilType.DownCallout)
            {
                //Draw the arrow using a 120x100 grid
                e.Path.AddLine(0, 0, 80, 0);
                e.Path.AddLine(80, 0, 80, 40);
                e.Path.AddLine(80, 40, 90, 40);
                e.Path.AddLine(90, 40, 90, 30);
                e.Path.AddLine(90, 30, 120, 50);
                e.Path.AddLine(120, 50, 90, 70);
                e.Path.AddLine(90, 70, 90, 60);
                e.Path.AddLine(90, 60, 80, 60);
                e.Path.AddLine(80, 60, 80, 100);
                e.Path.AddLine(80, 100, 0, 100);

                //Close the figure
                e.Path.CloseFigure();

                //Rotate the matrix depending on type
                if (stencilType == ArrowStencilType.LeftCallout)
                {
                    translateMatrix.RotateAt(180, new PointF(60, 50));
                }
                if (stencilType == ArrowStencilType.UpCallout)
                {
                    translateMatrix.RotateAt(-90, new PointF(60, 50));
                }
                if (stencilType == ArrowStencilType.DownCallout)
                {
                    translateMatrix.RotateAt(90, new PointF(60, 50));
                }

                //Scale the matrix and apply it back to the path
                translateMatrix.Scale(e.Width / 100, e.Height / 100);
                e.Path.Transform(translateMatrix);
            }
        }
Beispiel #2
0
        private void StencilItem_DrawShape(object sender, DrawShapeEventArgs e)
        {
            StencilItem stencil = (StencilItem)sender;

            DrawStencilItem(stencil, e);
        }
Beispiel #3
0
        private void DrawStencilItem(StencilItem stencil, DrawShapeEventArgs e)
        {
            GraphicsPath     path        = e.Path;
            RectangleF       rect        = new Rectangle();
            BasicStencilType stencilType = (BasicStencilType)Enum.Parse(typeof(BasicStencilType), stencil.Key);

            float width  = e.Width;
            float height = e.Height;
            float percX  = 0;
            float percY  = 0;
            float midX   = 0;
            float midY   = 0;

            rect.Width  = width;
            rect.Height = height;

            if (stencilType == BasicStencilType.BottomTriangle)
            {
                path.AddLine(0, 0, width, 0);
                path.AddLine(width, 0, width / 2, height);
                path.CloseFigure();
            }
            else if (stencilType == BasicStencilType.Circle)
            {
                percX = Convert.ToSingle(width * 0.5);
                percY = Convert.ToSingle(height * 0.5);

                path.AddEllipse(percX, percY, width, height);
            }
            else if (stencilType == BasicStencilType.Diamond)
            {
                percX = Convert.ToSingle(width * 0.5);
                percY = Convert.ToSingle(height * 0.5);

                path.AddLine(0, percY, percX, 0);
                path.AddLine(percX, 0, width, percY);
                path.AddLine(width, percY, percX, height);
                path.AddLine(percX, height, 0, percY);
            }
            else if (stencilType == BasicStencilType.Ellipse)
            {
                percX = Convert.ToSingle(width * 0.5);
                percY = Convert.ToSingle(height * 0.5);

                path.AddEllipse(percX, percY, width, height);
            }
            else if (stencilType == BasicStencilType.LeftTriangle)
            {
                percX = Convert.ToSingle(width * 0.5);
                percY = Convert.ToSingle(height * 0.5);

                path.AddLine(width, 0, 0, percY);
                path.AddLine(0, percY, width, height);
                path.CloseFigure();
            }
            else if (stencilType == BasicStencilType.Octagon)
            {
                float thirdx    = width * 0.3F;
                float twothirdx = width * 0.7F;
                float thirdy    = height * 0.3F;
                float twothirdy = height * 0.7F;

                path.AddLine(thirdx, 0, twothirdx, 0);
                path.AddLine(twothirdx, 0, width, thirdy);
                path.AddLine(width, thirdy, width, twothirdy);
                path.AddLine(width, twothirdy, twothirdx, height);
                path.AddLine(twothirdx, height, thirdx, height);
                path.AddLine(thirdx, height, 0, twothirdy);
                path.AddLine(0, twothirdy, 0, thirdy);
                path.CloseFigure();
            }
            else if (stencilType == BasicStencilType.Rectangle)
            {
                path.AddRectangle(rect);
            }
            else if (stencilType == BasicStencilType.RightTriangle)
            {
                percY = height * 0.5F;

                path.AddLine(0, 0, width, percY);
                path.AddLine(width, percY, 0, height);
                path.CloseFigure();
            }
            else if (stencilType == BasicStencilType.RoundedRectangle)
            {
                percX = Convert.ToSingle(width * 0.2);
                percY = Convert.ToSingle(height * 0.2);

                if (percX < percY)
                {
                    percY = percX;
                }
                else
                {
                    percX = percY;
                }
                path.AddArc(0, 0, percX, percY, 180, 90);
                path.AddArc(width - percX, 0, percX, percY, 270, 90);
                path.AddArc(width - percX, height - percY, percX, percY, 0, 90);
                path.AddArc(0, height - percY, percX, percY, 90, 90);
                path.CloseFigure();

                stencil.Redraw = true;
            }
            else if (stencilType == BasicStencilType.TopTriangle)
            {
                percX = Convert.ToSingle(width * 0.5);

                path.AddLine(percX, 0, width, height);
                path.AddLine(width, height, 0, height);
                path.CloseFigure();
            }
        }
		private void DrawStencilItem(StencilItem stencil, DrawShapeEventArgs e)
		{
			GraphicsPath path = e.Path;
			RectangleF rect = new Rectangle();
			BasicStencilType stencilType = (BasicStencilType) Enum.Parse(typeof(BasicStencilType),stencil.Key); 

			float width = e.Width;
			float height = e.Height;
			float percX = 0;
			float percY = 0;
			float midX = 0;
			float midY = 0;

			rect.Width = width;
			rect.Height = height;

			if (stencilType == BasicStencilType.BottomTriangle)
			{
				path.AddLine(0, 0, width, 0);
				path.AddLine(width, 0, width / 2, height);
				path.CloseFigure();
			}
			else if (stencilType == BasicStencilType.Circle)
			{
				percX = Convert.ToSingle(width * 0.5);
				percY = Convert.ToSingle(height * 0.5);

				path.AddEllipse(percX, percY, width, height);
			}
			else if (stencilType == BasicStencilType.Diamond)
			{

				percX = Convert.ToSingle(width * 0.5);
				percY = Convert.ToSingle(height * 0.5);

				path.AddLine(0, percY, percX, 0);
				path.AddLine(percX, 0, width, percY);
				path.AddLine(width, percY, percX, height);
				path.AddLine(percX, height, 0, percY);

			}
			else if (stencilType == BasicStencilType.Ellipse)
			{
				percX = Convert.ToSingle(width * 0.5);
				percY = Convert.ToSingle(height * 0.5);

				path.AddEllipse(percX, percY, width, height);
			}
			else if (stencilType == BasicStencilType.LeftTriangle)
			{
				percX = Convert.ToSingle(width * 0.5);
				percY = Convert.ToSingle(height * 0.5);

				path.AddLine(width, 0, 0, percY);
				path.AddLine(0, percY, width, height);
				path.CloseFigure();
			}
			else if (stencilType == BasicStencilType.Octagon)
			{
				float thirdx = width * 0.3F;
				float twothirdx = width * 0.7F;
				float thirdy = height * 0.3F;
				float twothirdy = height *0.7F;
				
				path.AddLine(thirdx, 0, twothirdx, 0);
				path.AddLine(twothirdx, 0, width, thirdy);
				path.AddLine(width, thirdy, width, twothirdy);
				path.AddLine(width,twothirdy, twothirdx, height);
				path.AddLine(twothirdx, height, thirdx, height);
				path.AddLine(thirdx, height, 0, twothirdy);
				path.AddLine(0, twothirdy, 0, thirdy);
				path.CloseFigure();
			}
			else if (stencilType == BasicStencilType.Rectangle)
			{
				path.AddRectangle(rect);
			}
			else if (stencilType == BasicStencilType.RightTriangle)
			{
				percY = height * 0.5F;

				path.AddLine(0, 0, width, percY);
				path.AddLine(width, percY, 0, height);
				path.CloseFigure();
			}
			else if (stencilType == BasicStencilType.RoundedRectangle)
			{
				percX = Convert.ToSingle(width * 0.2);
				percY = Convert.ToSingle(height * 0.2);

				if (percX < percY)
				{
					percY = percX;
				}
				else
				{
					percX = percY;
				}
				path.AddArc(0, 0, percX, percY, 180, 90);
				path.AddArc(width - percX, 0, percX, percY, 270, 90);
				path.AddArc(width - percX, height - percY, percX, percY, 0, 90);
				path.AddArc(0, height - percY, percX, percY, 90, 90);
				path.CloseFigure();

				stencil.Redraw = true;
			}
			else if (stencilType == BasicStencilType.TopTriangle)
			{
				percX = Convert.ToSingle(width * 0.5);

				path.AddLine(percX, 0, width, height);
				path.AddLine(width, height, 0, height);
				path.CloseFigure();
			}
		}
		private void StencilItem_DrawShape(object sender, DrawShapeEventArgs e)
		{
			StencilItem stencil = (StencilItem) sender;
			DrawStencilItem(stencil,e);
		}
		private void DrawStencilItem(StencilItem stencil, DrawShapeEventArgs e)
		{
			ArrowStencilType stencilType = (ArrowStencilType) Enum.Parse(typeof(ArrowStencilType),stencil.Key); 
			Matrix translateMatrix = new Matrix();

			if (stencilType == ArrowStencilType.Left || stencilType == ArrowStencilType.Right || stencilType == ArrowStencilType.Up || stencilType == ArrowStencilType.Down)
			{
				//Draw the arrow using a 100x100 grid 
				e.Path.AddLine(0,30,60,30);
				e.Path.AddLine(60,30,60,0);
				e.Path.AddLine(60,0,100,50);
				e.Path.AddLine(100,50,60,100);
				e.Path.AddLine(60,100,60,70);
				e.Path.AddLine(60,70,0,70);

				//Close the figure
				e.Path.CloseFigure(); 

				//Rotate the path depending on the type of arrow
				if (stencilType == ArrowStencilType.Right) translateMatrix.RotateAt(180,new PointF(50,50));
				if (stencilType == ArrowStencilType.Up) translateMatrix.RotateAt(-90,new PointF(50,50));
				if (stencilType == ArrowStencilType.Down) translateMatrix.RotateAt(90,new PointF(50,50));

				//Scale the matrix and apply it back to the path
				translateMatrix.Scale(e.Width / 100, e.Height / 100);
				e.Path.Transform(translateMatrix);
			}
			else if (stencilType == ArrowStencilType.LeftRight || stencilType == ArrowStencilType.UpDown)
			{
				//Draw the arrow using a 120x100 grid 
				e.Path.AddLine(40,30,80,30);
				e.Path.AddLine(80,30,80,0);
				e.Path.AddLine(80,0,120,50);
				e.Path.AddLine(120,50,80,100);
				e.Path.AddLine(80,100,80,70);
				e.Path.AddLine(80,70,40,70);

				e.Path.AddLine(40,70,40,100);
				e.Path.AddLine(40,100,0,50);
				e.Path.AddLine(0,50,40,0);
				e.Path.AddLine(40,0,40,30);

				if (stencilType == ArrowStencilType.UpDown) translateMatrix.RotateAt(90,new PointF(50,50));

				//Scale the matrix and apply it back to the path
				translateMatrix.Scale(e.Width / 120, e.Height / 100);
				e.Path.Transform(translateMatrix);

				stencil.Options = StencilItemOptions.InnerRectangleFull;
			}
			else if (stencilType == ArrowStencilType.LeftRightUpDown)
			{
				//Draw the arrow using a 140x140 grid 
				e.Path.AddLine(80,60,110,60);
				e.Path.AddLine(110,60,110,50);
				e.Path.AddLine(110,50,140,70);
				e.Path.AddLine(140,70,110,90);
				e.Path.AddLine(110,90,110,80);
				e.Path.AddLine(110,80,80,80);
				
				e.Path.AddLine(80,80,80,110);
				e.Path.AddLine(80,110,90,110);
				e.Path.AddLine(90,110,70,140);
				e.Path.AddLine(70,140,50,110);
				e.Path.AddLine(50,110,60,110);
				e.Path.AddLine(60,110,60,80);
				
				e.Path.AddLine(60,80,30,80);
				e.Path.AddLine(30,80,30,90);
				e.Path.AddLine(30,90,0,70);
				e.Path.AddLine(0,70,30,50);
				e.Path.AddLine(30,50,30,60);

				e.Path.AddLine(30,60,60,60);
				e.Path.AddLine(60,60,60,30);
				e.Path.AddLine(60,30,50,30);
				e.Path.AddLine(50,30,70,0);
				e.Path.AddLine(70,0,90,30);
				e.Path.AddLine(90,30,80,30);
				e.Path.AddLine(80,30,80,60);

				//Scale the matrix and apply it back to the path
				translateMatrix.Scale(e.Width / 140, e.Height / 140);
				e.Path.Transform(translateMatrix);
			}
			if (stencilType == ArrowStencilType.Striped)
			{
			
				//Draw the arrow using a 100x100 grid 
				e.Path.AddRectangle(new Rectangle(0,30,4,40));
				e.Path.AddRectangle(new Rectangle(8,30,8,40));

				e.Path.AddLine(20,30,60,30);
				e.Path.AddLine(60,30,60,0);
				e.Path.AddLine(60,0,100,50);
				e.Path.AddLine(100,50,60,100);
				e.Path.AddLine(60,100,60,70);
				e.Path.AddLine(60,70,20,70);

				//Close the figure
				e.Path.CloseFigure(); 

				//Scale the matrix and apply it back to the path
				translateMatrix.Scale(e.Width / 100, e.Height / 100);
				e.Path.Transform(translateMatrix);
				
				stencil.Options = StencilItemOptions.InnerRectangleFull;
			}
			if (stencilType == ArrowStencilType.Notched)
			{
				//Draw the arrow using a 100x100 grid 
				e.Path.AddLine(0,30,60,30);
				e.Path.AddLine(60,30,60,0);
				e.Path.AddLine(60,0,100,50);
				e.Path.AddLine(100,50,60,100);
				e.Path.AddLine(60,100,60,70);
				e.Path.AddLine(60,70,0,70);
				e.Path.AddLine(0,70,20,50);

				//Close the figure
				e.Path.CloseFigure(); 

				//Scale the matrix and apply it back to the path
				translateMatrix.Scale(e.Width / 100, e.Height / 100);
				e.Path.Transform(translateMatrix);
			}
			if (stencilType == ArrowStencilType.Pentagon)
			{
				//Draw the arrow using a 120x100 grid 
				e.Path.AddLine(0,0,80,0);
				e.Path.AddLine(80,0,120,50);
				e.Path.AddLine(120,50,80,100);
				e.Path.AddLine(80,100,0,100);

				//Close the figure
				e.Path.CloseFigure(); 

				//Scale the matrix and apply it back to the path
				translateMatrix.Scale(e.Width / 100, e.Height / 100);
				e.Path.Transform(translateMatrix);
			}
			else if (stencilType == ArrowStencilType.Chevron)
			{
				//Draw the arrow using a 120x100 grid 
				e.Path.AddLine(0,0,80,0);
				e.Path.AddLine(80,0,120,50);
				e.Path.AddLine(120,50,80,100);
				e.Path.AddLine(80,100,0,100);
				e.Path.AddLine(0,100,20,50);

				//Close the figure
				e.Path.CloseFigure(); 

				//Scale the matrix and apply it back to the path
				translateMatrix.Scale(e.Width / 100, e.Height / 100);
				e.Path.Transform(translateMatrix);
			}
			else if (stencilType == ArrowStencilType.RightCallout || stencilType == ArrowStencilType.LeftCallout || stencilType == ArrowStencilType.UpCallout || stencilType == ArrowStencilType.DownCallout)
			{
				//Draw the arrow using a 120x100 grid 
				e.Path.AddLine(0,0,80,0);
				e.Path.AddLine(80,0,80,40);
				e.Path.AddLine(80,40,90,40);
				e.Path.AddLine(90,40,90,30);
				e.Path.AddLine(90,30,120,50);
				e.Path.AddLine(120,50,90,70);
				e.Path.AddLine(90,70,90,60);
				e.Path.AddLine(90,60,80,60);
				e.Path.AddLine(80,60,80,100);
				e.Path.AddLine(80,100,0,100);

				//Close the figure
				e.Path.CloseFigure(); 

				//Rotate the matrix depending on type
				if (stencilType == ArrowStencilType.LeftCallout) translateMatrix.RotateAt(180,new PointF(60,50));
				if (stencilType == ArrowStencilType.UpCallout) translateMatrix.RotateAt(-90,new PointF(60,50));
				if (stencilType == ArrowStencilType.DownCallout) translateMatrix.RotateAt(90,new PointF(60,50));

				//Scale the matrix and apply it back to the path
				translateMatrix.Scale(e.Width / 100, e.Height / 100);
				e.Path.Transform(translateMatrix);
			}
		
		}