//Handles the DrawShape event private void StencilItem_DrawShape(object sender, DrawShapeEventArgs e) { //Get the stencil item to draw on, and the type of arrow from the key StencilItem stencil = (StencilItem)sender; ArrowType arrowType = (ArrowType)Enum.Parse(typeof(ArrowType), stencil.Key); //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 Matrix translateMatrix = new Matrix(); if (arrowType == ArrowType.Right) { translateMatrix.RotateAt(180, new PointF(50, 50)); } if (arrowType == ArrowType.Up) { translateMatrix.RotateAt(-90, new PointF(50, 50)); } if (arrowType == ArrowType.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); }
private void DrawStencilItem(StencilItem stencil, DrawShapeEventArgs e) { GraphicsPath path = e.Path; RectangleF rect = new Rectangle(); FlowchartStencilType stencilType = (FlowchartStencilType) Enum.Parse(typeof(FlowchartStencilType), stencil.Key); float width = e.Width; float height = e.Height; float percX = 0; float percY = 0; float perc = 0; float midX = 0; float midY = 0; rect.Width = width; rect.Height = height; midX = width / 2; midY = height / 2; if (stencilType == FlowchartStencilType.Default) { percX = 20; percY = 20; 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 == FlowchartStencilType.Card) { percX = width * 0.2F; percY = height * 0.2F; path.AddLine(percX, 0, width, 0); path.AddLine(width, 0, width, height); path.AddLine(width, height, 0, height); path.AddLine(0, height, 0, percY); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Collate) { path.AddLine(0, 0, width, 0); path.AddLine(width, 0, 0, height); path.AddLine(0, height, width, height); path.AddLine(width, height, 0, 0); } else if (stencilType == FlowchartStencilType.Connector) { percX = width * 0.5F; percY = height * 0.5F; path.AddEllipse(percX, percY, width, height); } else if (stencilType == FlowchartStencilType.Data) { path.AddLine(midX / 2, 0, width, 0); path.AddLine(width, 0, (midX / 2) + midX, height); path.AddLine((midX / 2) + midX, height, 0, height); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Decision) { path.AddLine(midX, 0, width, midY); path.AddLine(width, midY, midX, height); path.AddLine(midX, height, 0, midY); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Delay) { percX = width * 0.2F; path.AddArc(percX, 0 , width * 0.8F, height, 270, 180); path.AddLine(0, height, 0, 0); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Display) { percX = width * 0.2F; path.AddArc(percX, 0 , width * 0.8F, height, 270, 180); path.AddLine(percX, height, 0, height / 2); path.AddLine(0, height / 2,percX, 0); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Direct) { percX = width * 0.3F; path.AddLine(width * 0.7F, height, percX, height); path.AddArc(0, 0, percX, height, 90, 180); path.AddLine(width * 0.7F, 0, percX, 0); path.AddArc(width * 0.7F, 0, percX, height, 270, -180); path.CloseFigure(); path.StartFigure(); path.AddEllipse(width * 0.7F, 0, percX, height); } else if (stencilType == FlowchartStencilType.Document) { PointF[] points = new PointF[4]; points[0].X = 0; points[0].Y = height * 0.95F; points[1].X = width * 0.25F; points[1].Y = height; points[2].X = width * 0.75F; points[2].Y = height * 0.85F; points[3].X = width; points[3].Y = height * 0.8F; path.AddLine(new Point(0, 0), points[0]); path.AddCurve(points); path.AddLine(points[3], new PointF(width, 0)); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Extract) { percX = width * 0.25F; percY = height * 0.75F; path.AddLine(percX, 0, percX * 2, percY); path.AddLine(percX * 2, percY, 0, percY); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.InternalStorage) { perc = width * 0.15F; path.AddRectangle(rect); path.AddLine(perc, 0, perc, height); path.CloseFigure(); path.AddLine(0, perc, width, perc); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.ManualInput) { percY = height * 0.25F; path.AddLine(0, percY, width, 0); path.AddLine(width, 0, width, height); path.AddLine(width, height, 0, height); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.ManualOperation) { percX = width * 0.2F; path.AddLine(0, 0, width, 0); path.AddLine(width, 0, width - percX, height); path.AddLine(width - percX, height, percX, height); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.MultiDocument) { PointF[] points = new PointF[4]; width = width * 0.8F; points[0].X = 0; points[0].Y = height * 0.95F; points[1].X = width * 0.25F; points[1].Y = height; points[2].X = width * 0.75F; points[2].Y = height * 0.85F; points[3].X = width; points[3].Y = height * 0.8F; path.AddLine(new PointF(0, height * 0.2F), points[0]); path.AddCurve(points); path.AddLine(points[3], new PointF(width, height * 0.2F)); path.CloseFigure(); width = rect.Width; path.AddLine(width * 0.2F, height * 0.1F, width * 0.2F, 0); path.AddLine(width * 0.2F, 0, width, 0); path.AddLine(width, 0, width, height * 0.6F); path.AddLine(width, height * 0.6F, width * 0.9F, height * 0.6F); path.AddLine(width * 0.9F, height * 0.6F, width * 0.9F, height * 0.1F); path.CloseFigure(); path.AddLine(width * 0.1F, height * 0.2F, width * 0.1F, height * 0.1F); path.AddLine(width * 0.1F, height * 0.1F, width * 0.9F, height * 0.1F); path.AddLine(width * 0.9F, height * 0.1F, width * 0.9F, height * 0.7F); path.AddLine(width * 0.9F, height * 0.7F, width * 0.8F, height * 0.7F); path.AddLine(width * 0.8F, height * 0.7F, width * 0.8F, height * 0.2F); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.OffPageConnector) { percX = width * 0.5F; percY = height * 0.75F; path.AddLine(0, 0, width, 0); path.AddLine(width, 0, width , percY); path.AddLine(width, percY, percX, height); path.AddLine(percX, height, 0, percY); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.PredefinedProcess) { perc = width * 0.1F; path.AddRectangle(rect); path.CloseFigure(); path.AddLine(perc, 0, perc, height); path.CloseFigure(); path.AddLine(width - perc, 0, width - perc, height); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Preparation) { percX = width * 0.2F; path.AddLine(0, midY, percX, 0); path.AddLine(percX, 0, width - percX, 0); path.AddLine(width - percX, 0, width, midY); path.AddLine(width, midY, width - percX, height); path.AddLine(width - percX, height, percX, height); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Process) { path.AddRectangle(new RectangleF(0, 0, width, height)); } else if (stencilType == FlowchartStencilType.Process2) { percX = width * 0.2F; percY = height * 0.2F; 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(); } else if (stencilType == FlowchartStencilType.Terminator) { percX = width * 0.5F; percY = height * 0.20F; path.AddArc(0, percY, percX, percY * 2, 90, 180); path.AddArc(width - percX, percY, percX, percY * 2, 270, 180); path.CloseFigure(); stencil.KeepAspect = true; } else if (stencilType == FlowchartStencilType.Tape) { PointF[] points = new PointF[5]; PointF[] pointsBottom = new PointF[5]; points[0].X = 0; points[0].Y = height * 0.05F; points[1].X = width * 0.25F; points[1].Y = height * 0.1F; points[2].X = width * 0.5F; points[2].Y = height * 0.05F; points[3].X = width * 0.75F; points[3].Y = 0; points[4].X = width; points[4].Y = height * 0.05F; pointsBottom[4].X = 0; pointsBottom[4].Y = height * 0.95F; pointsBottom[3].X = width * 0.25F; pointsBottom[3].Y = height; pointsBottom[2].X = width * 0.5F; pointsBottom[2].Y = height * 0.95F; pointsBottom[1].X = width * 0.75F; pointsBottom[1].Y = height * 0.9F; pointsBottom[0].X = width; pointsBottom[0].Y = height * 0.95F; path.AddCurve(points); path.AddLine(points[4], pointsBottom[0]); path.AddCurve(pointsBottom); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Junction) { percX = width * 0.25F; percY = height * 0.25F; if (percX > percY) { perc = percX; } else { perc = percY; } path.AddEllipse(perc, perc, perc * 2, perc * 2); path.CloseFigure(); path.StartFigure(); path.AddLine(perc * 2, perc, perc * 2, perc * 3); path.StartFigure(); path.AddLine(perc, perc * 2, perc * 3, perc * 2); Matrix matrix = new Matrix(1, 0, 0, 1, 0, 0); //Rotate the matrix through 45 degress perc = perc * 2; matrix.RotateAt(45, new PointF(perc, perc)); //Transform the graphicspath object path.Transform(matrix); } else if (stencilType == FlowchartStencilType.LogicalOr) { percX = width * 0.5F; percY = height * 0.5F; if (percX > percY) { perc = percX; } else { perc = percY; } path.AddEllipse(perc, perc, perc * 2, perc * 2); path.AddLine(perc * 2, perc, perc * 2, perc * 3); path.CloseFigure(); path.AddLine(perc, perc * 2, perc * 3, perc * 2); } else if (stencilType == FlowchartStencilType.Sort) { percX = width * 0.5F; percY = height * 0.5F; path.AddLine(0, percY, percX, 0); path.AddLine(percX, 0, width, percY); path.AddLine(width, percY, percX, height); path.AddLine(percX, height, 0, percY); path.CloseFigure(); path.StartFigure(); path.AddLine(0,percY, width, percY); } else if (stencilType == FlowchartStencilType.Merge) { path.AddLine(0, 0, width, 0); path.AddLine(width, 0, width * 0.5F, height); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.StoredData) { percX = width * 0.3F; path.AddArc(0, 0, percX, height, 90, 180); path.AddArc(width * 0.85F, 0, percX, height, 270, -180); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Sequential) { if (width > height) { perc = height; } else { perc = width; } path.AddArc(0, 0, perc, perc, 45, -315); path.AddLine(perc * 0.5F, perc, perc, perc); path.AddLine(perc, perc, perc, perc * 0.85F); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Magnetic) { percY = height * 0.4F; path.AddArc(0, - height * 0.2F, width, percY, 180, -180); path.AddLine(width, 0, width, height * 0.8F); path.AddArc(0, height * 0.6F, width, percY, 0, 180); path.AddLine(0, height * 0.8F, 0, 0); //path.CloseFigure(); //Define two shapes so that not see through path.StartFigure(); path.AddLine(0, 0, width, 0); path.AddArc(0, - height * 0.2F, width, percY, 0, 180); } }
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(); FlowchartStencilType stencilType = (FlowchartStencilType)Enum.Parse(typeof(FlowchartStencilType), stencil.Key); float width = e.Width; float height = e.Height; float percX = 0; float percY = 0; float perc = 0; float midX = 0; float midY = 0; rect.Width = width; rect.Height = height; midX = width / 2; midY = height / 2; if (stencilType == FlowchartStencilType.Default) { percX = 20; percY = 20; 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 == FlowchartStencilType.Card) { percX = width * 0.2F; percY = height * 0.2F; path.AddLine(percX, 0, width, 0); path.AddLine(width, 0, width, height); path.AddLine(width, height, 0, height); path.AddLine(0, height, 0, percY); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Collate) { path.AddLine(0, 0, width, 0); path.AddLine(width, 0, 0, height); path.AddLine(0, height, width, height); path.AddLine(width, height, 0, 0); } else if (stencilType == FlowchartStencilType.Connector) { percX = width * 0.5F; percY = height * 0.5F; path.AddEllipse(percX, percY, width, height); } else if (stencilType == FlowchartStencilType.Data) { path.AddLine(midX / 2, 0, width, 0); path.AddLine(width, 0, (midX / 2) + midX, height); path.AddLine((midX / 2) + midX, height, 0, height); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Decision) { path.AddLine(midX, 0, width, midY); path.AddLine(width, midY, midX, height); path.AddLine(midX, height, 0, midY); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Delay) { percX = width * 0.2F; path.AddArc(percX, 0, width * 0.8F, height, 270, 180); path.AddLine(0, height, 0, 0); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Display) { percX = width * 0.2F; path.AddArc(percX, 0, width * 0.8F, height, 270, 180); path.AddLine(percX, height, 0, height / 2); path.AddLine(0, height / 2, percX, 0); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Direct) { percX = width * 0.3F; path.AddLine(width * 0.7F, height, percX, height); path.AddArc(0, 0, percX, height, 90, 180); path.AddLine(width * 0.7F, 0, percX, 0); path.AddArc(width * 0.7F, 0, percX, height, 270, -180); path.CloseFigure(); path.StartFigure(); path.AddEllipse(width * 0.7F, 0, percX, height); } else if (stencilType == FlowchartStencilType.Document) { PointF[] points = new PointF[4]; points[0].X = 0; points[0].Y = height * 0.95F; points[1].X = width * 0.25F; points[1].Y = height; points[2].X = width * 0.75F; points[2].Y = height * 0.85F; points[3].X = width; points[3].Y = height * 0.8F; path.AddLine(new Point(0, 0), points[0]); path.AddCurve(points); path.AddLine(points[3], new PointF(width, 0)); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Extract) { percX = width * 0.25F; percY = height * 0.75F; path.AddLine(percX, 0, percX * 2, percY); path.AddLine(percX * 2, percY, 0, percY); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.InternalStorage) { perc = width * 0.15F; path.AddRectangle(rect); path.AddLine(perc, 0, perc, height); path.CloseFigure(); path.AddLine(0, perc, width, perc); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.ManualInput) { percY = height * 0.25F; path.AddLine(0, percY, width, 0); path.AddLine(width, 0, width, height); path.AddLine(width, height, 0, height); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.ManualOperation) { percX = width * 0.2F; path.AddLine(0, 0, width, 0); path.AddLine(width, 0, width - percX, height); path.AddLine(width - percX, height, percX, height); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.MultiDocument) { PointF[] points = new PointF[4]; width = width * 0.8F; points[0].X = 0; points[0].Y = height * 0.95F; points[1].X = width * 0.25F; points[1].Y = height; points[2].X = width * 0.75F; points[2].Y = height * 0.85F; points[3].X = width; points[3].Y = height * 0.8F; path.AddLine(new PointF(0, height * 0.2F), points[0]); path.AddCurve(points); path.AddLine(points[3], new PointF(width, height * 0.2F)); path.CloseFigure(); width = rect.Width; path.AddLine(width * 0.2F, height * 0.1F, width * 0.2F, 0); path.AddLine(width * 0.2F, 0, width, 0); path.AddLine(width, 0, width, height * 0.6F); path.AddLine(width, height * 0.6F, width * 0.9F, height * 0.6F); path.AddLine(width * 0.9F, height * 0.6F, width * 0.9F, height * 0.1F); path.CloseFigure(); path.AddLine(width * 0.1F, height * 0.2F, width * 0.1F, height * 0.1F); path.AddLine(width * 0.1F, height * 0.1F, width * 0.9F, height * 0.1F); path.AddLine(width * 0.9F, height * 0.1F, width * 0.9F, height * 0.7F); path.AddLine(width * 0.9F, height * 0.7F, width * 0.8F, height * 0.7F); path.AddLine(width * 0.8F, height * 0.7F, width * 0.8F, height * 0.2F); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.OffPageConnector) { percX = width * 0.5F; percY = height * 0.75F; path.AddLine(0, 0, width, 0); path.AddLine(width, 0, width, percY); path.AddLine(width, percY, percX, height); path.AddLine(percX, height, 0, percY); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.PredefinedProcess) { perc = width * 0.1F; path.AddRectangle(rect); path.CloseFigure(); path.AddLine(perc, 0, perc, height); path.CloseFigure(); path.AddLine(width - perc, 0, width - perc, height); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Preparation) { percX = width * 0.2F; path.AddLine(0, midY, percX, 0); path.AddLine(percX, 0, width - percX, 0); path.AddLine(width - percX, 0, width, midY); path.AddLine(width, midY, width - percX, height); path.AddLine(width - percX, height, percX, height); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Process) { path.AddRectangle(new RectangleF(0, 0, width, height)); } else if (stencilType == FlowchartStencilType.Process2) { percX = width * 0.2F; percY = height * 0.2F; 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(); } else if (stencilType == FlowchartStencilType.Terminator) { percX = width * 0.5F; percY = height * 0.20F; path.AddArc(0, percY, percX, percY * 2, 90, 180); path.AddArc(width - percX, percY, percX, percY * 2, 270, 180); path.CloseFigure(); stencil.KeepAspect = true; } else if (stencilType == FlowchartStencilType.Tape) { PointF[] points = new PointF[5]; PointF[] pointsBottom = new PointF[5]; points[0].X = 0; points[0].Y = height * 0.05F; points[1].X = width * 0.25F; points[1].Y = height * 0.1F; points[2].X = width * 0.5F; points[2].Y = height * 0.05F; points[3].X = width * 0.75F; points[3].Y = 0; points[4].X = width; points[4].Y = height * 0.05F; pointsBottom[4].X = 0; pointsBottom[4].Y = height * 0.95F; pointsBottom[3].X = width * 0.25F; pointsBottom[3].Y = height; pointsBottom[2].X = width * 0.5F; pointsBottom[2].Y = height * 0.95F; pointsBottom[1].X = width * 0.75F; pointsBottom[1].Y = height * 0.9F; pointsBottom[0].X = width; pointsBottom[0].Y = height * 0.95F; path.AddCurve(points); path.AddLine(points[4], pointsBottom[0]); path.AddCurve(pointsBottom); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Junction) { percX = width * 0.25F; percY = height * 0.25F; if (percX > percY) { perc = percX; } else { perc = percY; } path.AddEllipse(perc, perc, perc * 2, perc * 2); path.CloseFigure(); path.StartFigure(); path.AddLine(perc * 2, perc, perc * 2, perc * 3); path.StartFigure(); path.AddLine(perc, perc * 2, perc * 3, perc * 2); Matrix matrix = new Matrix(1, 0, 0, 1, 0, 0); //Rotate the matrix through 45 degress perc = perc * 2; matrix.RotateAt(45, new PointF(perc, perc)); //Transform the graphicspath object path.Transform(matrix); } else if (stencilType == FlowchartStencilType.LogicalOr) { percX = width * 0.5F; percY = height * 0.5F; if (percX > percY) { perc = percX; } else { perc = percY; } path.AddEllipse(perc, perc, perc * 2, perc * 2); path.AddLine(perc * 2, perc, perc * 2, perc * 3); path.CloseFigure(); path.AddLine(perc, perc * 2, perc * 3, perc * 2); } else if (stencilType == FlowchartStencilType.Sort) { percX = width * 0.5F; percY = height * 0.5F; path.AddLine(0, percY, percX, 0); path.AddLine(percX, 0, width, percY); path.AddLine(width, percY, percX, height); path.AddLine(percX, height, 0, percY); path.CloseFigure(); path.StartFigure(); path.AddLine(0, percY, width, percY); } else if (stencilType == FlowchartStencilType.Merge) { path.AddLine(0, 0, width, 0); path.AddLine(width, 0, width * 0.5F, height); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.StoredData) { percX = width * 0.3F; path.AddArc(0, 0, percX, height, 90, 180); path.AddArc(width * 0.85F, 0, percX, height, 270, -180); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Sequential) { if (width > height) { perc = height; } else { perc = width; } path.AddArc(0, 0, perc, perc, 45, -315); path.AddLine(perc * 0.5F, perc, perc, perc); path.AddLine(perc, perc, perc, perc * 0.85F); path.CloseFigure(); } else if (stencilType == FlowchartStencilType.Magnetic) { percY = height * 0.4F; path.AddArc(0, -height * 0.2F, width, percY, 180, -180); path.AddLine(width, 0, width, height * 0.8F); path.AddArc(0, height * 0.6F, width, percY, 0, 180); path.AddLine(0, height * 0.8F, 0, 0); //path.CloseFigure(); //Define two shapes so that not see through path.StartFigure(); path.AddLine(0, 0, width, 0); path.AddArc(0, -height * 0.2F, width, percY, 0, 180); } }
private void StencilItem_DrawShape(object sender, DrawShapeEventArgs e) { StencilItem stencil = (StencilItem)sender; DrawStencilItem(stencil, e); }