diff --git a/EduNetworkBuilder/EduNetworkBuilder.csproj b/EduNetworkBuilder/EduNetworkBuilder.csproj
index 1a73c03..eb0eed2 100644
--- a/EduNetworkBuilder/EduNetworkBuilder.csproj
+++ b/EduNetworkBuilder/EduNetworkBuilder.csproj
@@ -117,6 +117,7 @@
+
Form
diff --git a/EduNetworkBuilder/NB.cs b/EduNetworkBuilder/NB.cs
index 6730202..ff62721 100644
--- a/EduNetworkBuilder/NB.cs
+++ b/EduNetworkBuilder/NB.cs
@@ -29,6 +29,7 @@ namespace EduNetworkBuilder
finished //There was an appropriate reason this packet finished. It stopped
}
public enum VLANTagType { Tagged, Untagged, Forbidden }
+ public enum NetShapeType { none, circle, rectangle, filled_circle, filled_rectangle }
public enum LinkType { normal, wireless, broken }
public enum PacketType { none, ping_request, ping_answer, arp_request, arp_answer, dhcp_request,
dhcp_answer, vpn_packet, tun_packet, tracert_request, tracert_reply }
diff --git a/EduNetworkBuilder/NetShape.cs b/EduNetworkBuilder/NetShape.cs
new file mode 100644
index 0000000..f045d3e
--- /dev/null
+++ b/EduNetworkBuilder/NetShape.cs
@@ -0,0 +1,88 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Drawing;
+using System.Xml;
+
+namespace EduNetworkBuilder
+{
+ ///
+ /// For drawing shapes on a network. Rectangles, circles. Filled or not
+ ///
+ public class NetShape
+ {
+ public NetShapeType MyShape = NetShapeType.none;
+ public Rectangle InArea;
+ public Color WhatColor = Color.Empty;
+
+ public NetShape(NetShapeType What, Rectangle Where, Color color)
+ {
+ MyShape = What;
+ InArea = Where;
+ WhatColor = color;
+ }
+
+ ///
+ /// Draw the specified shape on the image
+ ///
+ ///
+ public void Draw(Image baseImage)
+ {
+ Graphics G = Graphics.FromImage(baseImage);
+ Pen coloredPen = new Pen(WhatColor);
+ Brush coloredBrush = new SolidBrush(WhatColor);
+ switch(MyShape)
+ {
+ case NetShapeType.circle:
+ G.DrawEllipse(coloredPen, InArea);
+ break;
+ case NetShapeType.filled_circle:
+ G.FillEllipse(coloredBrush,InArea);
+ break;
+ case NetShapeType.rectangle:
+ G.DrawRectangle(coloredPen, InArea);
+ break;
+ case NetShapeType.filled_rectangle:
+ G.FillRectangle(coloredBrush, InArea);
+ break;
+ }
+ G.Dispose();
+ }
+
+ public void Load(XmlNode theNode)
+ {
+ foreach (XmlNode Individual in theNode.ChildNodes)
+ {
+ XmlNodeType myNodetype = Individual.NodeType;
+ if (myNodetype == XmlNodeType.Element)
+ {
+ switch (Individual.Name.ToLower())
+ {
+ case "what":
+ MyShape = NB.TryParseEnum(Individual.InnerText, NetShapeType.none);
+ break;
+ case "where":
+ RectangleConverter converter = new RectangleConverter();
+ InArea = (Rectangle)converter.ConvertFromString(Individual.InnerText);
+ break;
+ case "color":
+ WhatColor = Color.FromName(Individual.InnerText);
+ break;
+ }
+ }
+ }
+ }
+
+ public void Save(XmlWriter writer)
+ {
+ writer.WriteStartElement("shape");
+ writer.WriteElementString("what", MyShape.ToString());
+ RectangleConverter converter = new RectangleConverter();
+ writer.WriteElementString("where", converter.ConvertToString(InArea));
+ writer.WriteElementString("color", WhatColor.ToString());
+ writer.WriteEndElement();
+ }
+ }
+}