V6Drawing.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing.Imaging;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using InABox.Core;
  8. using InABox.Dxf;
  9. namespace PRSDesktop.Integrations.V6
  10. {
  11. public class V6DrawingIndexEntry
  12. {
  13. public string FileName { get; set; }
  14. public string FileType { get; set; }
  15. public string NodeName { get; set; }
  16. public string FaceIndex { get; set; }
  17. public string CutDescriptor { get; set; }
  18. public string CutLocation { get; set; }
  19. }
  20. public class V6DrawingIndex
  21. {
  22. public V6DrawingIndexEntry[] Files { get; set; } = new V6DrawingIndexEntry[] { };
  23. public string? Version { get; set; }
  24. }
  25. public class V6Drawing
  26. {
  27. public string FileName { get; set; }
  28. public V6DrawingIndexEntry Metadata { get; set; }
  29. public byte[] Data { get; set; }
  30. }
  31. public class V6Drawings : V6Object
  32. {
  33. public byte[] BinaryData { get; set; }
  34. public override void ValidateQuery(string sql, List<string> errors)
  35. {
  36. ValidateField(sql, nameof(BinaryData), errors);
  37. }
  38. public List<V6Drawing> DecodeDrawings(string[]? filetypes)
  39. {
  40. string StreamToString(Stream stream)
  41. {
  42. stream.Position = 0;
  43. using (StreamReader _reader = new StreamReader(stream, Encoding.UTF8))
  44. return _reader.ReadToEnd();
  45. }
  46. byte[] StreamToByteArray(Stream stream)
  47. {
  48. using(var _memoryStream = new MemoryStream())
  49. {
  50. stream.Position = 0;
  51. stream.CopyTo(_memoryStream);
  52. return _memoryStream.ToArray();
  53. }
  54. }
  55. List<V6Drawing> _result = new();
  56. if (BinaryData?.Any() == true)
  57. {
  58. Syncfusion.Compression.Zip.ZipArchive _zip = new Syncfusion.Compression.Zip.ZipArchive();
  59. using (var _ms = new MemoryStream(BinaryData))
  60. {
  61. _zip.Open(_ms,false);
  62. var _descriptor = _zip.Items.FirstOrDefault(x =>
  63. string.Equals(x.ItemName, "descriptor.json", StringComparison.CurrentCultureIgnoreCase));
  64. if (_descriptor != null)
  65. {
  66. var _json = StreamToString(_descriptor.DataStream);
  67. var _drawings = Serialization.Deserialize<V6DrawingIndex>(_json) ?? new V6DrawingIndex();
  68. foreach (var _file in _drawings.Files)
  69. {
  70. if (filetypes == null || filetypes.Any(x =>
  71. String.Equals(x, _file.FileType, StringComparison.CurrentCultureIgnoreCase)))
  72. {
  73. var _frame = _zip.Items.FirstOrDefault(x =>
  74. string.Equals(x.ItemName, _file.FileName, StringComparison.CurrentCultureIgnoreCase));
  75. if (_frame != null)
  76. {
  77. //var _bmp = DxfUtils.ProcessImage(_frame.DataStream);
  78. //using (var _bmpStream = new MemoryStream())
  79. //{
  80. // _bmp.Save(_bmpStream, ImageFormat.Png);
  81. var _drawing = new V6Drawing();
  82. _drawing.Data = StreamToByteArray(_frame.DataStream);
  83. _drawing.FileName = _file.FileName; //Path.ChangeExtension(_file.FileName, ".png");
  84. _drawing.Metadata = _file;
  85. _result.Add(_drawing);
  86. //File.WriteAllBytes(System.IO.Path.Combine(@"c:\development\ecoview",_file.FileName),_file.Data);
  87. //}
  88. }
  89. }
  90. }
  91. }
  92. }
  93. }
  94. return _result;
  95. }
  96. public static string SQL = $@"select
  97. id.drawings as {nameof(BinaryData)}
  98. from
  99. quote_item_drawings id
  100. left outer join
  101. quote_item qi on qi.quote_item_id = id.quote_item_id
  102. left outer join
  103. quote q on q.quote_id = qi.quote_id
  104. where
  105. 1=1
  106. and
  107. qi.quote_vers_start <= q.quote_vers and qi.quote_vers_stop >= q.quote_vers";
  108. }
  109. }