public override void whileDrawing(SketchControl s, Point p1, Point p2) { if (Math.Abs(p1.X - p2.X) > Math.Abs(p1.Y - p2.Y)) yinyangWidth = p2.X - p1.X; else yinyangWidth = p2.Y - p1.Y; Action currentAction = new yinyangAction(yinyangWidth, p1, this.brush, 0); drawWhileDrawing(currentAction, s); }
void drawYinYang(yinyangAction action, Graphics gr) { if (action.width < 0) { action.startPoint = new Point(action.startPoint.X + action.width, action.startPoint.Y + action.width); action.width *= -1; } SolidBrush color = action.brush; if (color.Color == Color.White) color = new SolidBrush(Color.Gray); float middleX = action.startPoint.X + 0.5f * action.width; float middleY = action.startPoint.Y + 0.5f * action.width; int curvesSize = action.width / 2; int curvesDistance = action.width / 4; int tinyCirclesSize = action.width / 6; int tinyCirclesDistance = action.width / 4; // Left side gr.FillEllipse(Brushes.White, action.startPoint.X, action.startPoint.Y, action.width, action.width); // Boarder gr.DrawEllipse(new Pen(color), action.startPoint.X, action.startPoint.Y, action.width, action.width); // Right side gr.FillPie(color, action.startPoint.X, action.startPoint.Y, action.width, action.width, 270, 180); // Bottom curve gr.FillEllipse(color, middleX - curvesSize / 2, middleY - curvesDistance + curvesDistance, curvesSize, curvesSize); // Top curve gr.FillEllipse(Brushes.White, middleX - curvesSize / 2, middleY - 2 * curvesDistance, curvesSize, curvesSize); // Top small circle gr.FillEllipse(color, middleX - tinyCirclesSize / 2, middleY - tinyCirclesSize / 2 - tinyCirclesDistance, tinyCirclesSize, tinyCirclesSize); // Bottom small circle gr.FillEllipse(Brushes.White, middleX - tinyCirclesSize / 2, middleY - tinyCirclesSize / 2 + tinyCirclesDistance, tinyCirclesSize, tinyCirclesSize); }
public override void Complete(SketchControl s, Point p1, Point p2) { yinyangAction yinyangAction = new yinyangAction(yinyangWidth, p1, this.brush, 0); s.sketch.stuff.Add(yinyangAction); s.sketch.undo.Push(yinyangAction); s.sketch.redo.Clear(); }