From 8e66686c7cea15989c5524b52a1089ce5830daa8 Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Wed, 13 Mar 2019 00:18:21 +0100 Subject: [PATCH] Create SVG Icons --- Lora-Map/Lora-Map.csproj | 11 +- Lora-Map/Model/Marker.cs | 37 ++++ Lora-Map/Server.cs | 13 ++ Lora-Map/resources/icons/marker/Marker.svg | 180 ++++++++---------- Lora-Map/resources/icons/marker/din1451m.woff | Bin 0 -> 11668 bytes 5 files changed, 142 insertions(+), 99 deletions(-) create mode 100644 Lora-Map/Model/Marker.cs create mode 100644 Lora-Map/resources/icons/marker/din1451m.woff diff --git a/Lora-Map/Lora-Map.csproj b/Lora-Map/Lora-Map.csproj index 112ba83..c6dac2c 100644 --- a/Lora-Map/Lora-Map.csproj +++ b/Lora-Map/Lora-Map.csproj @@ -45,6 +45,7 @@ + @@ -66,6 +67,9 @@ PreserveNewest + + PreserveNewest + @@ -95,7 +99,12 @@ PreserveNewest - + + PreserveNewest + + + Designer + PreserveNewest diff --git a/Lora-Map/Model/Marker.cs b/Lora-Map/Model/Marker.cs new file mode 100644 index 0000000..962a158 --- /dev/null +++ b/Lora-Map/Model/Marker.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace Fraunhofer.Fit.IoT.LoraMap.Model { + class Marker { + private readonly XmlDocument svg = new XmlDocument(); + + public Marker(String hash) { + this.svg.LoadXml(File.ReadAllText("resources/icons/marker/Marker.svg")); + this.ParseParams(hash); + } + + private void ParseParams(String hash) { + String[] parts = hash.Split('&'); + foreach(String part in parts) { + String[] keyvalue = part.Split('='); + if(keyvalue.Length == 2) { + switch(keyvalue[0].ToLower()) { + case "name": + XmlNodeList node = this.svg.DocumentElement.SelectNodes("//*[local-name()='tspan'][@id='marker-name-text']"); + if(node.Count == 1) { + node.Item(0).InnerText = keyvalue[1]; + } + break; + } + } + } + } + + public override String ToString() => this.svg.OuterXml; + } +} diff --git a/Lora-Map/Server.cs b/Lora-Map/Server.cs index 4af7e80..4901f79 100644 --- a/Lora-Map/Server.cs +++ b/Lora-Map/Server.cs @@ -15,6 +15,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap { { private readonly SortedDictionary locations = new SortedDictionary(); private readonly JsonData marker; + private readonly Dictionary markertable = new Dictionary(); public Server(ADataBackend backend, Dictionary settings, InIReader requests) : base(backend, settings, requests) => this.marker = JsonMapper.ToObject(File.ReadAllText("names.json")); @@ -63,6 +64,18 @@ namespace Fraunhofer.Fit.IoT.LoraMap { return; } } + if(cont.Request.Url.PathAndQuery.StartsWith("/icons/marker/Marker.svg") && cont.Request.Url.PathAndQuery.Contains("?")) { + String hash = cont.Request.Url.PathAndQuery.Substring(cont.Request.Url.PathAndQuery.IndexOf('?')+1); + if(!this.markertable.ContainsKey(hash)) { + this.markertable.Add(hash, new Marker(hash)); + } + cont.Response.ContentType = "image/svg+xml"; + Byte[] buf = Encoding.UTF8.GetBytes(this.markertable[hash].ToString()); + cont.Response.ContentLength64 = buf.Length; + cont.Response.OutputStream.Write(buf, 0, buf.Length); + Console.WriteLine("200 - " + cont.Request.Url.PathAndQuery); + return; + } base.SendResponse(cont); } } diff --git a/Lora-Map/resources/icons/marker/Marker.svg b/Lora-Map/resources/icons/marker/Marker.svg index ad598d4..8034f2e 100644 --- a/Lora-Map/resources/icons/marker/Marker.svg +++ b/Lora-Map/resources/icons/marker/Marker.svg @@ -1,123 +1,107 @@ - - - - - + + + + + - 27/92 + 27/92 - + + - - + - + - + - + - + - + @@ -130,40 +114,40 @@ - + - - + + - - - + + + - B1 + B1 - B2 + B2 - B + B - TZ-1 + TZ-1 - TZ-2 + TZ-2 - TZ + TZ diff --git a/Lora-Map/resources/icons/marker/din1451m.woff b/Lora-Map/resources/icons/marker/din1451m.woff new file mode 100644 index 0000000000000000000000000000000000000000..8f5f7e9d1f800abb2132dcb9b0f69b5e8c4a58b4 GIT binary patch literal 11668 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 literal 0 HcmV?d00001