Added a new tool (Dotted Pencil)

This commit is contained in:
2022-05-25 16:17:10 +02:00
parent 84d1a24683
commit 6141737d30
5 changed files with 131 additions and 9 deletions

96
Paint_2/DotPencil.cs Normal file
View File

@@ -0,0 +1,96 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
namespace Paint_2
{
public class DotPencil:PaintTool
{
private List<List<Point>> _drawings;
private List<Color> _colors;
private List<int> _widths;
private Color _color;
private int _width;
public List<List<Point>> Drawings { get => _drawings; set => _drawings = value; }
public List<Color> Colors { get => _colors; set => _colors = value; }
public List<int> Widths { get => _widths; set => _widths = value; }
public Color Color { get => _color; set => _color = value; }
public int Width { get => _width; set => _width = value; }
public DotPencil()
{
Drawings = new List<List<Point>>();
Colors = new List<Color>();
Widths = new List<int>();
}
public void Add(Point point)
{
Drawings[Drawings.Count - 1].Add(point);
}
public void Paint(Bitmap canvas)
{
Graphics gr = Graphics.FromImage(canvas);
int drawingCounter = 0;
Size pointSize;
foreach (List<Point> drawing in Drawings)
{
int pointCounter = 0;
foreach (Point p in drawing)
{
if (pointCounter > 0)
{
pointSize = new Size(Widths[drawingCounter], Widths[drawingCounter]);
gr.FillEllipse(new SolidBrush(Colors[drawingCounter]), new Rectangle(new Point(p.X - pointSize.Width / 2, p.Y - pointSize.Height / 2), pointSize));
}
pointCounter += 1;
}
drawingCounter += 1;
}
}
public void Start(Color color, int width)
{
Color = color;
Width = width;
List<Point> points = new List<Point>();
Drawings.Add(points);
Colors.Add(Color);
Widths.Add(Width);
}
public void Clear()
{
Drawings = new List<List<Point>>();
}
public void Stop(Point point)
{
throw new NotImplementedException();
}
public List<Color> GetLastColors(int colorNumber)
{
List<Color> result = new List<Color>();
if (Colors.Count <= colorNumber)
{
//We need to fill with black color
for (int i = Colors.Count; i > 0; i--)
{
result.Add(Colors[(Colors.Count) - i]);
}
for (int i = colorNumber - Colors.Count; i > 0; i--)
{
result.Add(Color.FromArgb(0x00, 0x00, 0x00));
}
}
else
{
for (int i = colorNumber; i > 0; i--)
{
result.Add(Colors[(Colors.Count) - i]);
}
}
return result;
}
}
}

View File

@@ -435,6 +435,7 @@
this.btnPencil.TabIndex = 20; this.btnPencil.TabIndex = 20;
this.btnPencil.Text = "Pencil"; this.btnPencil.Text = "Pencil";
this.btnPencil.UseVisualStyleBackColor = false; this.btnPencil.UseVisualStyleBackColor = false;
this.btnPencil.Click += new System.EventHandler(this.btnPencil_Click);
// //
// btnDotTracer // btnDotTracer
// //
@@ -448,6 +449,7 @@
this.btnDotTracer.TabIndex = 21; this.btnDotTracer.TabIndex = 21;
this.btnDotTracer.Text = "Dot tracer"; this.btnDotTracer.Text = "Dot tracer";
this.btnDotTracer.UseVisualStyleBackColor = false; this.btnDotTracer.UseVisualStyleBackColor = false;
this.btnDotTracer.Click += new System.EventHandler(this.btnDotTracer_Click);
// //
// btnShapeCreator // btnShapeCreator
// //

View File

@@ -14,6 +14,9 @@ namespace Paint_2
{ {
public partial class PaintForm : Form public partial class PaintForm : Form
{ {
const int DEFAULT_PENCIL = 0;
const int DOT_PENCIL = 1;
const string DEFAULT_FILEPATH = "C:/Paint2/Drawings/"; const string DEFAULT_FILEPATH = "C:/Paint2/Drawings/";
Sketch sketch; Sketch sketch;
List<PaintTool> toolList; List<PaintTool> toolList;
@@ -29,7 +32,7 @@ namespace Paint_2
nupHeight.Value = canvas.Height; nupHeight.Value = canvas.Height;
toolList = new List<PaintTool>(); toolList = new List<PaintTool>();
toolList.Add(new Pencil()); toolList.Add(new Pencil());
toolList.Add(new Pencil()); toolList.Add(new DotPencil());
sketch = new Sketch(new Size((int)nupWidth.Value, (int)nupHeight.Value), toolList); sketch = new Sketch(new Size((int)nupWidth.Value, (int)nupHeight.Value), toolList);
canvas.Image = sketch.Drawing; canvas.Image = sketch.Drawing;
tmrRefresh.Enabled = true; tmrRefresh.Enabled = true;
@@ -43,17 +46,9 @@ namespace Paint_2
{ {
drawing = true; drawing = true;
sketch.StartDrawing(MousePositionToCanvasPosition(), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)), (int)nupPencilWidth.Value); sketch.StartDrawing(MousePositionToCanvasPosition(), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)), (int)nupPencilWidth.Value);
//tmrRefresh.Enabled = true;
List<Color> colorHistory = sketch.CurrentTool.GetLastColors(4);
btnColorHistory1.BackColor = colorHistory[0];
btnColorHistory2.BackColor = colorHistory[1];
btnColorHistory3.BackColor = colorHistory[2];
btnColorHistory4.BackColor = colorHistory[3];
} }
private void canvas_MouseUp(object sender, MouseEventArgs e) private void canvas_MouseUp(object sender, MouseEventArgs e)
{ {
//tmrRefresh.Enabled = false;
sketch.AddDrawingPoint(MousePositionToCanvasPosition()); sketch.AddDrawingPoint(MousePositionToCanvasPosition());
drawing = false; drawing = false;
RefreshUi(); RefreshUi();
@@ -90,6 +85,12 @@ namespace Paint_2
hoveringColor = GetHoverColor(); hoveringColor = GetHoverColor();
lblHoveringColor.Text = ColorToString(hoveringColor); lblHoveringColor.Text = ColorToString(hoveringColor);
btnHoveringColor.BackColor = hoveringColor; btnHoveringColor.BackColor = hoveringColor;
List<Color> colorHistory = sketch.CurrentTool.GetLastColors(4);
btnColorHistory1.BackColor = colorHistory[0];
btnColorHistory2.BackColor = colorHistory[1];
btnColorHistory3.BackColor = colorHistory[2];
btnColorHistory4.BackColor = colorHistory[3];
} }
private Color GetHoverColor() private Color GetHoverColor()
{ {
@@ -193,5 +194,17 @@ namespace Paint_2
image.Save(DEFAULT_FILEPATH + fileName + "/" + fileName + ".png", System.Drawing.Imaging.ImageFormat.Png); image.Save(DEFAULT_FILEPATH + fileName + "/" + fileName + ".png", System.Drawing.Imaging.ImageFormat.Png);
} }
private void btnDotTracer_Click(object sender, EventArgs e)
{
sketch.ChangeTool(DOT_PENCIL);
RefreshUi();
}
private void btnPencil_Click(object sender, EventArgs e)
{
sketch.ChangeTool(DEFAULT_PENCIL);
RefreshUi();
}
} }
} }

View File

@@ -46,6 +46,7 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="DotPencil.cs" />
<Compile Include="Form1.cs"> <Compile Include="Form1.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>

View File

@@ -45,6 +45,16 @@ namespace Paint_2
{ {
//empty //empty
} }
public void ChangeTool(int toolId)
{
try
{
CurrentTool = ToolList[toolId];
}catch (Exception ex)
{
Console.WriteLine("Oooops...");
}
}
public void StartDrawing(Point location,Color color,int width) public void StartDrawing(Point location,Color color,int width)
{ {
CurrentTool.Start(color,width); CurrentTool.Start(color,width);