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(); + } + } +}