123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- using System;
- using System.Collections.Generic;
- using System.Drawing.Imaging;
- using System.IO;
- using System.Linq;
- using System.Text;
- using InABox.Core;
- using InABox.Dxf;
- namespace PRSDesktop.Integrations.V6
- {
-
- public class V6DrawingIndexEntry
- {
- public string FileName { get; set; }
- public string FileType { get; set; }
- public string NodeName { get; set; }
- public string FaceIndex { get; set; }
- public string CutDescriptor { get; set; }
- public string CutLocation { get; set; }
- }
-
- public class V6DrawingIndex
- {
- public V6DrawingIndexEntry[] Files { get; set; } = new V6DrawingIndexEntry[] { };
-
- public string? Version { get; set; }
-
- }
-
- public class V6Drawing
- {
- public string FileName { get; set; }
- public V6DrawingIndexEntry Metadata { get; set; }
- public byte[] Data { get; set; }
- }
-
- public class V6Drawings : V6Object
- {
- public byte[] BinaryData { get; set; }
-
- public override void ValidateQuery(string sql, List<string> errors)
- {
- ValidateField(sql, nameof(BinaryData), errors);
- }
-
- public List<V6Drawing> DecodeDrawings(string[]? filetypes)
- {
- string StreamToString(Stream stream)
- {
- stream.Position = 0;
- using (StreamReader _reader = new StreamReader(stream, Encoding.UTF8))
- return _reader.ReadToEnd();
- }
- byte[] StreamToByteArray(Stream stream)
- {
- using(var _memoryStream = new MemoryStream())
- {
- stream.Position = 0;
- stream.CopyTo(_memoryStream);
- return _memoryStream.ToArray();
- }
- }
- List<V6Drawing> _result = new();
- if (BinaryData?.Any() == true)
- {
- Syncfusion.Compression.Zip.ZipArchive _zip = new Syncfusion.Compression.Zip.ZipArchive();
- using (var _ms = new MemoryStream(BinaryData))
- {
- _zip.Open(_ms,false);
- var _descriptor = _zip.Items.FirstOrDefault(x =>
- string.Equals(x.ItemName, "descriptor.json", StringComparison.CurrentCultureIgnoreCase));
- if (_descriptor != null)
- {
- var _json = StreamToString(_descriptor.DataStream);
- var _drawings = Serialization.Deserialize<V6DrawingIndex>(_json) ?? new V6DrawingIndex();
- foreach (var _file in _drawings.Files)
- {
- if (filetypes == null || filetypes.Any(x =>
- String.Equals(x, _file.FileType, StringComparison.CurrentCultureIgnoreCase)))
- {
- var _frame = _zip.Items.FirstOrDefault(x =>
- string.Equals(x.ItemName, _file.FileName, StringComparison.CurrentCultureIgnoreCase));
- if (_frame != null)
- {
- //var _bmp = DxfUtils.ProcessImage(_frame.DataStream);
- //using (var _bmpStream = new MemoryStream())
- //{
- // _bmp.Save(_bmpStream, ImageFormat.Png);
- var _drawing = new V6Drawing();
- _drawing.Data = StreamToByteArray(_frame.DataStream);
- _drawing.FileName = _file.FileName; //Path.ChangeExtension(_file.FileName, ".png");
- _drawing.Metadata = _file;
- _result.Add(_drawing);
- //File.WriteAllBytes(System.IO.Path.Combine(@"c:\development\ecoview",_file.FileName),_file.Data);
- //}
- }
- }
- }
- }
- }
- }
- return _result;
- }
- public static string SQL = $@"select
- id.drawings as {nameof(BinaryData)}
- from
- quote_item_drawings id
- left outer join
- quote_item qi on qi.quote_item_id = id.quote_item_id
- left outer join
- quote q on q.quote_id = qi.quote_id
- where
- 1=1
- and
- qi.quote_vers_start <= q.quote_vers and qi.quote_vers_stop >= q.quote_vers";
-
- }
- }
|