Browse Source

Merge pull request #3 from m-edlund/userstory4

Userstory4 finished
m-edlund 5 years ago
parent
commit
b3d8168a04

+ 13 - 0
Finished Userstories/userstory4.md

@@ -0,0 +1,13 @@
+# Userstory 4  
+
+|**ID**|4|
+|-|-|
+|**Name**|Simple Zeichenfunktionalität|
+|**Beschreibung**|Man kann einen Knopf in der UI drücken, um in den Zeichenmodus zu kommen, und um wieder aus dem Zeichenmodus rauszukommen. Wenn man im Zeichenmodus ist, kann man auf einer Leinwand im rechten Bereich Linien zeichnen.|  
+|**Akzeptanzkriterium**|Der Knopf für den Zeichenmodus kann nur gedrückt werden, wenn im rechten Bereich eine Zeichennleinwand vorhanden ist. Wenn man den Knopf drückt ohne im Zeichenmodus zu sein, verändert sich der Knopf erkennbar und man kommt in den Zeichenmodus. Drückt man den Knopf, wenn man im Zeichenmodus ist, wird der Zeichenmodus beendet und der Knopf bekommt wieder sein urspüngliches Aussehen. Während man im Zeichenmodus ist, kann man auf der Leinwand im rechten Bereich Linien zeichnen, wenn man mit der Maus klickt und hält. Die Linien werden während man zeichnet angezeigt und zeigen den Pfad an, den der Mauszeiger gemacht hat. Die Linien bleiben erhalten, wenn man aufhört zu zeichnen oder den Zeichenmodus verlässt. Drückt man den Knopf für den Zeichenmodus während man in einem anderen Modus ist (z.B. Löschmodus) wird der andere Modus beendet und man gelangt in den Zeichenmodus.|
+|Geschätzter Aufwand (Story Points)|28|
+|Entwickler|Tim Reischl, Martin Edlund|
+|Umgesetzt in Iteration|Iteration 2|
+|Tatsächlicher Aufwand (Std.)|22.5h|
+|Velocity (Std./Story Point)|0,8|
+|Bemerkungen|Keine|

+ 36 - 17
SketchAssistant/SketchAssistant/Form1.Designer.cs

@@ -28,6 +28,7 @@ namespace SketchAssistant
         /// </summary>
         private void InitializeComponent()
         {
+            this.components = new System.ComponentModel.Container();
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
             this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
             this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
@@ -37,10 +38,12 @@ namespace SketchAssistant
             this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.loadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.toolStrip1 = new System.Windows.Forms.ToolStrip();
-            this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
+            this.canvasButton = new System.Windows.Forms.ToolStripButton();
+            this.drawButton = new System.Windows.Forms.ToolStripButton();
             this.statusStrip1 = new System.Windows.Forms.StatusStrip();
             this.toolStripLoadStatus = new System.Windows.Forms.ToolStripStatusLabel();
             this.backgroundWorker2 = new System.ComponentModel.BackgroundWorker();
+            this.drawTimer = new System.Windows.Forms.Timer(this.components);
             this.tableLayoutPanel1.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.pictureBoxRight)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLeft)).BeginInit();
@@ -67,7 +70,6 @@ namespace SketchAssistant
             this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
             this.tableLayoutPanel1.Size = new System.Drawing.Size(696, 440);
             this.tableLayoutPanel1.TabIndex = 1;
-            this.tableLayoutPanel1.Paint += new System.Windows.Forms.PaintEventHandler(this.tableLayoutPanel1_Paint);
             // 
             // pictureBoxRight
             // 
@@ -79,6 +81,9 @@ namespace SketchAssistant
             this.pictureBoxRight.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
             this.pictureBoxRight.TabIndex = 6;
             this.pictureBoxRight.TabStop = false;
+            this.pictureBoxRight.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBoxRight_MouseDown);
+            this.pictureBoxRight.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBoxRight_MouseMove);
+            this.pictureBoxRight.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBoxRight_MouseUp);
             // 
             // pictureBoxLeft
             // 
@@ -91,7 +96,6 @@ namespace SketchAssistant
             this.pictureBoxLeft.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
             this.pictureBoxLeft.TabIndex = 5;
             this.pictureBoxLeft.TabStop = false;
-            this.pictureBoxLeft.Click += new System.EventHandler(this.pictureBoxLeft_Click);
             // 
             // menuStrip1
             // 
@@ -111,34 +115,44 @@ namespace SketchAssistant
             this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
             this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
             this.fileToolStripMenuItem.Text = "File";
-            this.fileToolStripMenuItem.Click += new System.EventHandler(this.fileToolStripMenuItem_Click);
             // 
             // loadToolStripMenuItem
             // 
             this.loadToolStripMenuItem.Name = "loadToolStripMenuItem";
-            this.loadToolStripMenuItem.Size = new System.Drawing.Size(109, 22);
+            this.loadToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.loadToolStripMenuItem.Text = "Load...";
             this.loadToolStripMenuItem.Click += new System.EventHandler(this.loadToolStripMenuItem_Click);
             // 
             // toolStrip1
             // 
             this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.toolStripButton1});
+            this.canvasButton,
+            this.drawButton});
             this.toolStrip1.Location = new System.Drawing.Point(0, 24);
             this.toolStrip1.Name = "toolStrip1";
             this.toolStrip1.Size = new System.Drawing.Size(696, 25);
             this.toolStrip1.TabIndex = 3;
             this.toolStrip1.Text = "toolStrip1";
             // 
-            // toolStripButton1
+            // canvasButton
             // 
-            this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
-            this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
-            this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
-            this.toolStripButton1.Name = "toolStripButton1";
-            this.toolStripButton1.Size = new System.Drawing.Size(76, 22);
-            this.toolStripButton1.Text = "New Canvas";
-            this.toolStripButton1.Click += new System.EventHandler(this.toolStripButton1_Click);
+            this.canvasButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+            this.canvasButton.Image = ((System.Drawing.Image)(resources.GetObject("canvasButton.Image")));
+            this.canvasButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.canvasButton.Name = "canvasButton";
+            this.canvasButton.Size = new System.Drawing.Size(76, 22);
+            this.canvasButton.Text = "New Canvas";
+            this.canvasButton.Click += new System.EventHandler(this.canvasButton_Click);
+            // 
+            // drawButton
+            // 
+            this.drawButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+            this.drawButton.Image = ((System.Drawing.Image)(resources.GetObject("drawButton.Image")));
+            this.drawButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.drawButton.Name = "drawButton";
+            this.drawButton.Size = new System.Drawing.Size(38, 22);
+            this.drawButton.Text = "Draw";
+            this.drawButton.Click += new System.EventHandler(this.drawButton_Click);
             // 
             // statusStrip1
             // 
@@ -149,14 +163,17 @@ namespace SketchAssistant
             this.statusStrip1.Size = new System.Drawing.Size(696, 22);
             this.statusStrip1.TabIndex = 4;
             this.statusStrip1.Text = "statusStrip1";
-            this.statusStrip1.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.statusStrip1_ItemClicked);
             // 
             // toolStripLoadStatus
             // 
             this.toolStripLoadStatus.Name = "toolStripLoadStatus";
             this.toolStripLoadStatus.Size = new System.Drawing.Size(40, 17);
             this.toolStripLoadStatus.Text = "no file";
-            this.toolStripLoadStatus.Click += new System.EventHandler(this.toolStripStatusLabel1_Click);
+            // 
+            // drawTimer
+            // 
+            this.drawTimer.Interval = 2;
+            this.drawTimer.Tick += new System.EventHandler(this.drawTimer_Tick);
             // 
             // Form1
             // 
@@ -202,7 +219,9 @@ namespace SketchAssistant
         private System.ComponentModel.BackgroundWorker backgroundWorker2;
         private System.Windows.Forms.PictureBox pictureBoxRight;
         private System.Windows.Forms.PictureBox pictureBoxLeft;
-        private System.Windows.Forms.ToolStripButton toolStripButton1;
+        private System.Windows.Forms.Timer drawTimer;
+        private System.Windows.Forms.ToolStripButton canvasButton;
+        private System.Windows.Forms.ToolStripButton drawButton;
     }
 }
 

+ 175 - 49
SketchAssistant/SketchAssistant/Form1.cs

@@ -21,19 +21,43 @@ namespace SketchAssistant
             InitializeComponent();
         }
 
+        /**********************************/
+        /*** CLASS VARIABLES START HERE ***/
+        /**********************************/
+
+        //Different Program States
+        public enum ProgramState
+        {
+            Idle,
+            Draw
+        }
+        //Current Program State
+        private ProgramState currentState;
         //Dialog to select a file.
         OpenFileDialog openFileDialogLeft = new OpenFileDialog();
         //Image loaded on the left
         Image leftImage = null;
         //Image on the right
         Image rightImage = null;
+        //Current Line being Drawn
+        List<Point> currentLine;
+        //All Lines in the current session
+        List<Tuple<bool,Line>> lineList = new List<Tuple<bool, Line>>();
+        //Whether the Mouse is currently pressed in the rightPictureBox
+        bool mousePressed = false;
+        //The Position of the Cursor in the right picture box
+        Point currentCursorPosition;
+        //The graphic representation of the right image
+        Graphics graph = null;
+
+        /******************************************/
+        /*** FORM SPECIFIC FUNCTIONS START HERE ***/
+        /******************************************/
 
         private void Form1_Load(object sender, EventArgs e)
         {
+            currentState = ProgramState.Idle;
             this.DoubleBuffered = true;
-            //Connect the Paint event of the left picture box to the event handler method.
-            pictureBoxLeft.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBoxLeft_Paint);
-            pictureBoxRight.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBoxRight_Paint);
         }
 
         //Resize Function connected to the form resize event, will refresh the form when it is resized
@@ -41,92 +65,194 @@ namespace SketchAssistant
         {
             this.Refresh();
         }
-
-        private void pictureBoxLeft_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
+        
+        //Load button, will open an OpenFileDialog
+        private void loadToolStripMenuItem_Click(object sender, EventArgs e)
         {
-            //Draw the left image
-            if(leftImage != null)
+            openFileDialogLeft.Filter = "Image|*.jpg;*.png;*.jpeg";
+            if(openFileDialogLeft.ShowDialog() == DialogResult.OK)
             {
+                toolStripLoadStatus.Text = openFileDialogLeft.SafeFileName;
+                leftImage = Image.FromFile(openFileDialogLeft.FileName);
                 pictureBoxLeft.Image = leftImage;
+                //Refresh the left image box when the content is changed
+                this.Refresh();
             }
         }
 
-        private void pictureBoxRight_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
+        //Changes The State of the Program to drawing
+        private void drawButton_Click(object sender, EventArgs e)
         {
-            //Draw the right image
-            if (rightImage != null)
+            if(rightImage != null)
             {
-                pictureBoxRight.Image = rightImage;
+                if (currentState.Equals(ProgramState.Draw))
+                {
+                    ChangeState(ProgramState.Idle);
+                }
+                else
+                {
+                    ChangeState(ProgramState.Draw);
+                }
             }
         }
 
-        // A Table Layout with one row and two columns. 
-        // Columns are 50% so that the window is evenly split.
-        // The size is manually set relative to the window size. 
-        // TODO: Maybe change this to automatically be the size of a parent container...
-        private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
+        //get current Mouse positon within the right picture box
+        private void pictureBoxRight_MouseMove(object sender, MouseEventArgs e)
         {
-
+            currentCursorPosition = ConvertCoordinates(new Point(e.X, e.Y));
         }
 
-        private void fileToolStripMenuItem_Click(object sender, EventArgs e)
+        //hold left mouse button to draw.
+        private void pictureBoxRight_MouseDown(object sender, MouseEventArgs e)
         {
-
-        }
-        
-        //Load button, will open an OpenFileDialog
-        private void loadToolStripMenuItem_Click(object sender, EventArgs e)
-        {
-            openFileDialogLeft.Filter = "Image|*.jpg;*.png;*.jpeg";
-            if(openFileDialogLeft.ShowDialog() == DialogResult.OK)
+            mousePressed = true;
+            if (currentState.Equals(ProgramState.Draw))
             {
-                toolStripLoadStatus.Text = openFileDialogLeft.SafeFileName;
-                leftImage = Image.FromFile(openFileDialogLeft.FileName);
-                //Refresh the left image box when the content is changed
-                this.Refresh();
-                pictureBoxLeft.Refresh();
+                currentLine = new List<Point>();
             }
         }
 
-        private void toolStripStatusLabel1_Click(object sender, EventArgs e)
+        //Lift left mouse button to stop drawing.
+        private void pictureBoxRight_MouseUp(object sender, MouseEventArgs e)
         {
-
+            mousePressed = false;
+            if (currentState.Equals(ProgramState.Draw))
+            {
+                lineList.Add(new Tuple<bool, Line>(true, new Line(currentLine)));
+            }
         }
 
-        private void statusStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
+        //Button to create a new Canvas. Will create an empty image 
+        //which is the size of the left image, if there is one.
+        //If there is no image loaded the canvas will be the size of the right picture box
+        private void canvasButton_Click(object sender, EventArgs e)
         {
-
+            DrawEmptyCanvas();
         }
 
-        private void pictureBoxLeft_Click(object sender, EventArgs e)
+        //add a Point on every tick to the Drawpath
+        private void drawTimer_Tick(object sender, EventArgs e)
         {
-
+            if (currentState.Equals(ProgramState.Draw) && mousePressed)
+            {
+                currentLine.Add(currentCursorPosition);
+                Line drawline = new Line(currentLine);
+                drawline.DrawLine(graph);
+                pictureBoxRight.Image = rightImage;
+            }
         }
 
-        //Button to create a new Canvas. Will create an empty image 
-        //which is the size of the left image, if there is one.
-        //If there is no image loaded the canvas will be the size of the right picture box
-        private void toolStripButton1_Click(object sender, EventArgs e)
+        /***********************************/
+        /*** HELPER FUNCTIONS START HERE ***/
+        /***********************************/
+
+        /// <summary>
+        /// Creates an empty Canvas
+        /// </summary>
+        private void DrawEmptyCanvas()
         {
             if (leftImage == null)
             {
                 rightImage = new Bitmap(pictureBoxRight.Width, pictureBoxRight.Height);
-                using (Graphics grp = Graphics.FromImage(rightImage))
-                {
-                    grp.FillRectangle(Brushes.White, 0, 0, pictureBoxRight.Width + 10, pictureBoxRight.Height + 10);
-                }
+                graph = Graphics.FromImage(rightImage);
+                graph.FillRectangle(Brushes.White, 0, 0, pictureBoxRight.Width + 10, pictureBoxRight.Height + 10);
+                pictureBoxRight.Image = rightImage;
             }
             else
             {
                 rightImage = new Bitmap(leftImage.Width, leftImage.Height);
-                using (Graphics grp = Graphics.FromImage(rightImage))
+                graph = Graphics.FromImage(rightImage);
+                graph.FillRectangle(Brushes.White, 0, 0, leftImage.Width + 10, leftImage.Height + 10);
+                pictureBoxRight.Image = rightImage;
+            }
+            this.Refresh();
+            pictureBoxRight.Refresh();
+        }
+
+        /// <summary>
+        /// Redraws all lines in lineList, for which their associated boolean value equals true.
+        /// </summary>
+        private void RedrawRightImage()
+        {
+            DrawEmptyCanvas();
+            foreach (Tuple<bool, Line> lineBoolTuple in lineList)
+            {
+                if (lineBoolTuple.Item1)
                 {
-                    grp.FillRectangle(Brushes.White, 0, 0, leftImage.Width + 10, leftImage.Height + 10);
+                    lineBoolTuple.Item2.DrawLine(graph);
                 }
             }
-            this.Refresh();
+        }
+
+        /// <summary>
+        /// A helper function which handles tasks associated witch changing states, 
+        /// such as checking and unchecking buttons and changing the state.
+        /// </summary>
+        /// <param name="newState">The new state of the program</param>
+        private void ChangeState(ProgramState newState)
+        {
+            switch (currentState)
+            {
+                case ProgramState.Draw:
+                    drawButton.CheckState = CheckState.Unchecked;
+                    drawTimer.Enabled = false;
+                    break;
+                default:
+                    break;
+            }
+            switch (newState)
+            {
+                case ProgramState.Draw:
+                    drawButton.CheckState = CheckState.Checked;
+                    drawTimer.Enabled = true;
+                    break;
+                default:
+                    break;
+            }
+            currentState = newState;
             pictureBoxRight.Refresh();
         }
-        
+
+        /// <summary>
+        /// A function that calculates the coordinates of a point on a zoomed in image.
+        /// </summary>
+        /// <param name="">The position of the mouse cursor</param>
+        /// <returns>The real coordinates of the mouse cursor on the image</returns>
+        private Point ConvertCoordinates(Point cursorPosition)
+        {
+            Point realCoordinates = new Point(5,3);
+            if(pictureBoxRight.Image == null)
+            {
+                return cursorPosition;
+            }
+
+            int widthImage = pictureBoxRight.Image.Width;
+            int heightImage = pictureBoxRight.Image.Height;
+            int widthBox = pictureBoxRight.Width;
+            int heightBox = pictureBoxRight.Height;
+
+            float imageRatio = (float)widthImage / (float)heightImage;
+            float containerRatio = (float)widthBox / (float)heightBox;
+
+            if (imageRatio >= containerRatio)
+            {
+                //Image is wider than it is high
+                float zoomFactor = (float)widthImage / (float)widthBox;
+                float scaledHeight = heightImage / zoomFactor;
+                float filler = (heightBox - scaledHeight) / 2;
+                realCoordinates.X = (int)(cursorPosition.X * zoomFactor);
+                realCoordinates.Y = (int)((cursorPosition.Y - filler) * zoomFactor);
+            }
+            else
+            {
+                //Image is higher than it is wide
+                float zoomFactor = (float)heightImage / (float)heightBox;
+                float scaledWidth = widthImage / zoomFactor;
+                float filler = (widthBox - scaledWidth) / 2;
+                realCoordinates.X = (int)((cursorPosition.X - filler) * zoomFactor);
+                realCoordinates.Y = (int)(cursorPosition.Y * zoomFactor);
+            }
+            return realCoordinates;
+        }
     }
 }

+ 19 - 1
SketchAssistant/SketchAssistant/Form1.resx

@@ -127,7 +127,22 @@
     <value>401, 17</value>
   </metadata>
   <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="toolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+  <data name="canvasButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+        YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+        0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+        bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+        VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+        c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+        Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+        mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+        kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+        TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="drawButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
         YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
@@ -148,6 +163,9 @@
   <metadata name="backgroundWorker2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>622, 17</value>
   </metadata>
+  <metadata name="drawTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>786, 17</value>
+  </metadata>
   <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>47</value>
   </metadata>

+ 46 - 0
SketchAssistant/SketchAssistant/Line.cs

@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Drawing;
+
+namespace SketchAssistant
+{
+    class Line
+    {
+        private List<Point> linePoints;
+
+        public Line(List<Point> points)
+        {
+            linePoints = new List<Point>(points);
+        }
+
+        public Point GetStartPoint()
+        {
+            return linePoints.First();
+        }
+
+        public Point GetEndPoint()
+        {
+            return linePoints.Last();
+        }
+
+        /// <summary>
+        /// A function that takes a Graphics element and returns it with
+        /// the line drawn on it.
+        /// </summary>
+        /// <param name="canvas">The Graphics element on which the line shall be drawn</param>
+        /// <returns>The given Graphics element with the additional line</returns>
+        public Graphics DrawLine(Graphics canvas)
+        {
+            Pen thePen = new Pen(Color.Black);
+            for(int i = 0; i < linePoints.Count - 1 ; i++)
+            {
+                canvas.DrawLine(thePen, linePoints[i], linePoints[i + 1]);
+            }
+            //canvas.DrawLine(thePen, linePoints[linePoints.Count-1], linePoints[linePoints.Count]);
+            return canvas;
+        }
+    }
+}

+ 1 - 3
SketchAssistant/SketchAssistant/SketchAssistant.csproj

@@ -47,9 +47,6 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Svg, Version=2.2.1.39233, Culture=neutral, PublicKeyToken=12a0bac221edeae2, processorArchitecture=MSIL">
-      <HintPath>..\packages\Svg.2.3.0\lib\net35\Svg.dll</HintPath>
-    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="System.Xml.Linq" />
@@ -63,6 +60,7 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Line.cs" />
     <Compile Include="Form1.cs">
       <SubType>Form</SubType>
     </Compile>