aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Pulse/TwnFileReader.cs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2019-03-06 14:23:47 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2019-03-06 14:23:47 +0200
commit1d0a3a5c47a2ba4cdabb9f8a4fab694d4987083f (patch)
tree9500aca3038e50b9a8e0120dfcd183b4a81f5011 /Software/Visual_Studio/Tango.Pulse/TwnFileReader.cs
parent745cb5da6ddf2418258892fa49f4e03b28645bed (diff)
downloadTango-1d0a3a5c47a2ba4cdabb9f8a4fab694d4987083f.tar.gz
Tango-1d0a3a5c47a2ba4cdabb9f8a4fab694d4987083f.zip
Implemented pulse TWN file.
Diffstat (limited to 'Software/Visual_Studio/Tango.Pulse/TwnFileReader.cs')
-rw-r--r--Software/Visual_Studio/Tango.Pulse/TwnFileReader.cs109
1 files changed, 109 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.Pulse/TwnFileReader.cs b/Software/Visual_Studio/Tango.Pulse/TwnFileReader.cs
new file mode 100644
index 000000000..2efa94936
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Pulse/TwnFileReader.cs
@@ -0,0 +1,109 @@
+using System;
+using System.Drawing;
+using System.IO;
+using System.Text;
+
+namespace Tango.Pulse
+{
+ /// <summary>
+ /// Represents a Pulse, twn file reader.
+ /// </summary>
+ public class TwnFileReader
+ {
+ /// <summary>
+ /// Reads the specified TWN stream.
+ /// </summary>
+ /// <param name="twnStream">The TWN stream.</param>
+ /// <returns></returns>
+ public TwnFile Read(Stream twnStream)
+ {
+ TwnFile twnFile = new TwnFile();
+
+ BinaryReader reader = new BinaryReader(twnStream);
+
+ //Format Version (Default is 1.0).
+ twnFile.Version = reader.ReadSingle();
+
+
+ //The name of the design or other labeling information as UTF - 8 text padded with white spaces and limited to 50 bytes.
+ twnFile.Name = Encoding.UTF8.GetString(reader.ReadBytes(50)).Trim();
+
+
+ //The embedded preview image size in byte length as a 32 bit unsigned integer.
+ UInt32 thumbnail_size = reader.ReadUInt32();
+
+
+ //The total number of brush segments as a 32 bit unsigned integer.
+ UInt32 segments_count = reader.ReadUInt32();
+
+
+ //Number of copies. (The number 0 will be treated as 1, so the default is 0)
+ twnFile.NumberOfCopies = (int)reader.ReadUInt32();
+
+
+ //0 - Spool per segment. (default)
+ //1 - Spool per copy.
+ //2 - Single spool for all segments.
+ twnFile.SpoolingMethod = (SpoolingMethods)(int)reader.ReadByte();
+
+
+ //A unique code representing an optional media ID from Twine’s recommended media list.
+ twnFile.MediaID = (int)reader.ReadUInt32();
+
+
+ //3 ASCII characters representing the embedded embroidery file extension (e.g dst, pes).
+ twnFile.EmbroideryFileFormat = Encoding.ASCII.GetString(reader.ReadBytes(3));
+
+
+ //The byte array length of the embedded embroidery file.
+ UInt32 emb_file_size = reader.ReadUInt32();
+
+
+ //Array of bytes representing the design preview image in PNG format(transparent background).
+ //The size of the PNG byte array must be defined in the header. Recommended image width is 1280
+ //pixels while maintaining aspect ratio.
+ MemoryStream ms = new MemoryStream(reader.ReadBytes((int)thumbnail_size));
+ twnFile.Thumbnail = new Bitmap(ms);
+
+
+ //Array of Brush Segment. The number of brush segments must be defined in the header.
+ for (int i = 0; i < segments_count; i++)
+ {
+ TwnSegment segment = new TwnSegment();
+
+ //Required thread length in centimeters.
+ segment.Length = reader.ReadSingle();
+
+ //Number of brush stops.
+ UInt32 stop_count = reader.ReadUInt32();
+
+ //Array of brush stops.
+ for (int j = 0; j < stop_count; j++)
+ {
+ TwnStop stop = new TwnStop();
+
+ //The RGB red component.
+ stop.R = reader.ReadByte();
+
+ //The RGB green component.
+ stop.G = reader.ReadByte();
+
+ //The RGB blue component.
+ stop.B = reader.ReadByte();
+
+ //The Brush stop offset position within the parent brush length in percentage (0-1).
+ stop.Offset = reader.ReadSingle();
+
+ segment.BrushStops.Add(stop);
+ }
+
+ twnFile.Segments.Add(segment);
+ }
+
+ //Byte array representing the standard embroidery file which can be extracted and inserted into an embroidery machine.
+ twnFile.EmbroideryFile = reader.ReadBytes((int)emb_file_size);
+
+ return twnFile;
+ }
+ }
+}