using Microsoft.VisualStudio.TestTools.UnitTesting; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core.ExtensionMethods; using Tango.Core.IO; using Tango.Pulse; namespace Tango.UnitTesting.Pulse { [TestClass] [TestCategory("Pulse")] public class Pulse_TST { [TestMethod] public void Validate_Reading_Writing() { String abcFile = Path.Combine(Helper.GetResourcePath(), "Pulse", "ABC.dst"); TwnFile twnFile = new TwnFile(); twnFile.Name = "My design"; twnFile.NumberOfCopies = 1; twnFile.MediaID = 0; twnFile.SpoolingMethod = SpoolingMethods.SpoolPerSegment; Bitmap thumbnail = new Bitmap(1280, 720); using (Graphics g = Graphics.FromImage(thumbnail)) { g.Clear(Color.Transparent); g.DrawString("My design", new Font(new FontFamily("Arial"), 70), Brushes.Red, 1280 / 2, 720 / 2); } twnFile.Thumbnail = thumbnail; twnFile.EmbroideryFileFormat = "dst"; twnFile.EmbroideryFile = File.ReadAllBytes(abcFile); //Add gradient segment. TwnSegment gradientSegment = new TwnSegment(); gradientSegment.Length = 10; //10 centimeters. gradientSegment.BrushStops.Add(new TwnStop(255, 0, 0, 0)); //0% gradientSegment.BrushStops.Add(new TwnStop(0, 0, 255, 1)); //100% twnFile.Segments.Add(gradientSegment); //Add solid segment. TwnSegment solidSegment = new TwnSegment(); solidSegment.Length = 20; solidSegment.BrushStops.Add(new TwnStop(0, 255, 0, 0)); twnFile.Segments.Add(solidSegment); //Validate reading/writing. using (MemoryStream ms = new MemoryStream()) { twnFile.ToStream(ms); ms.Position = 0; TwnFile twnFile2 = TwnFile.FromStream(ms); String serialized = JsonConvert.SerializeObject(twnFile, Formatting.Indented); String deserialized = JsonConvert.SerializeObject(twnFile2, Formatting.Indented); Assert.AreEqual(serialized, deserialized); } } [TestMethod] public void Read_Pulse_Sample_File() { String sampleFile = Path.Combine(Helper.GetResourcePath(), "Pulse", "Technical_Test_15.9.19.twn"); TwnFile twnFile = TwnFile.FromFile(sampleFile); var imgFile = TemporaryManager.Default.CreateFile(".png"); String json = twnFile.ToJsonString(); twnFile.Thumbnail.Save(imgFile, ImageFormat.Png); Helper.ShowInExplorer(imgFile); } [TestMethod] public void Create_Twn_Sample_File() { String abcFile = Path.Combine(Helper.GetResourcePath(), "Pulse", "ABC.dst"); TwnFile twnFile = new TwnFile(); twnFile.Name = "My design"; twnFile.NumberOfCopies = 1; twnFile.MediaID = 0; twnFile.SpoolingMethod = SpoolingMethods.SpoolPerSegment; Bitmap thumbnail = new Bitmap(1280, 720); using (Graphics g = Graphics.FromImage(thumbnail)) { g.Clear(Color.Gray); g.DrawString("My design", new Font(new FontFamily("Arial"), 70), Brushes.Red, 1280 / 2, 720 / 2); } twnFile.Thumbnail = thumbnail; twnFile.EmbroideryFileFormat = "dst"; twnFile.EmbroideryFile = File.ReadAllBytes(abcFile); //Add gradient segment. TwnSegment gradientSegment = new TwnSegment(); gradientSegment.Length = 100 * 10; //10 meters. gradientSegment.BrushStops.Add(new TwnStop(255, 0, 0, 0)); //0% gradientSegment.BrushStops.Add(new TwnStop(0, 0, 255, 1)); //100% twnFile.Segments.Add(gradientSegment); //Add solid segment. TwnSegment solidSegment = new TwnSegment(); solidSegment.Length = 100 * 20; //20 meters. solidSegment.BrushStops.Add(new TwnStop(0, 255, 0, 0)); twnFile.Segments.Add(solidSegment); var twnFilePath = TemporaryManager.Default.CreateFile(".twn"); twnFile.ToFile(twnFilePath); twnFilePath.Display(); } [TestMethod] public void Compose_Artificial_Twn_File() { String dstFile = Path.Combine(Helper.GetResourcePath(), "Pulse", "TCap", "T-CAP.dst"); String imgSolidFile = Path.Combine(Helper.GetResourcePath(), "Pulse", "TCap", "T_Cap_Solid.png"); String imgGradientFile = Path.Combine(Helper.GetResourcePath(), "Pulse", "TCap", "T_Cap.png"); TwnFile twnFile = new TwnFile(); twnFile.Version = 1f; twnFile.Name = "T Cap Solid"; twnFile.NumberOfCopies = 1; twnFile.MediaID = 0; twnFile.SpoolingMethod = SpoolingMethods.SingleSpool; twnFile.EmbroideryFile = File.ReadAllBytes(dstFile); twnFile.EmbroideryFileFormat = "dst"; //Generate solid. Bitmap thumbnail = new Bitmap(imgSolidFile); twnFile.Thumbnail = thumbnail; twnFile.Segments.Add(CreateSolidSegment(10, 252, 224, 87)); twnFile.Segments.Add(CreateSolidSegment(10, 251, 168, 45)); twnFile.Segments.Add(CreateSolidSegment(10, 237, 19, 117)); twnFile.Segments.Add(CreateSolidSegment(10, 234, 89, 56)); var tempFolder = TemporaryManager.Default.CreateFolder(); twnFile.ToFile(Path.Combine(tempFolder, "t-cap solid.twn")); twnFile.Segments.Clear(); //Generate gradient. twnFile.Name = "T Cap Gradient"; thumbnail = new Bitmap(imgGradientFile); twnFile.Thumbnail = thumbnail; twnFile.Segments.Add(CreateGradientSegment(10, 237, 19, 117, 251, 168, 45)); twnFile.Segments.Add(CreateGradientSegment(10, 237, 19, 117, 251, 168, 45)); twnFile.Segments.Add(CreateGradientSegment(10, 139, 48, 145, 251, 168, 45)); twnFile.Segments.Add(CreateGradientSegment(10, 139, 48, 145, 242, 141, 172)); twnFile.ToFile(Path.Combine(tempFolder, "t-cap gradient.twn")); tempFolder.Display(); } private TwnSegment CreateSolidSegment(float meter, byte r, byte g, byte b) { var segment = new TwnSegment() { Length = meter * 100, BrushStops = new List() { new TwnStop() { R = r, G = g, B = b }, } }; return segment; } private TwnSegment CreateGradientSegment(float meter, byte r1, byte g1, byte b1, byte r2, byte g2, byte b2) { var segment = new TwnSegment() { Length = meter * 100, BrushStops = new List() { new TwnStop() { R = r1, G = g1, B = b1, Offset = 0 }, new TwnStop() { R = r2, G = g2, B = b2, Offset = 1 }, } }; return segment; } } }