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); } }
private void StencilItem_DrawShape(object sender, DrawShapeEventArgs e) { StencilItem stencil = (StencilItem)sender; DrawStencilItem(stencil, e); }
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); } }