Ultra3DManager.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using fis.Log;
  2. using fis.Win.Dev.Helpers;
  3. using fis.Win.Dev.Managers.Interfaces;
  4. using fis.Win.Dev.Managers.Modules.Ultra3D;
  5. using fis.Win.Dev.Utilities;
  6. using fis.Win.Dev.Win.Ultra3D.manager;
  7. using fis.Win.Dev.Win.Ultra3D.Manager;
  8. using fis.Win.Dev.Win.Ultra3D.Utils;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.IO;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading;
  15. using System.Threading.Tasks;
  16. namespace fis.Win.Dev.Managers
  17. {
  18. internal class Ultra3DManager : IUltra3DManager
  19. {
  20. public Parse3DModelManager Parse3DModelManager { get; }
  21. public MeasureImageManager MeasureImageManager { get; }
  22. public CarotidModelAdjustManager CarotidModelAdjustManager { get; }
  23. private Ultra3DDownloadWorker _ultr3DFileWorker;
  24. private object _lock = new object();
  25. internal Ultra3DManager()
  26. {
  27. Parse3DModelManager = new Parse3DModelManager();
  28. MeasureImageManager=new MeasureImageManager();
  29. CarotidModelAdjustManager = new CarotidModelAdjustManager(Parse3DModelManager, MeasureImageManager);
  30. _ultr3DFileWorker = new Ultra3DDownloadWorker();
  31. _ultr3DFileWorker.MainSurfaceFileReady += OnMainSurfaceReady ;
  32. _ultr3DFileWorker.MainMDFileReady += OnMainMDFileReady;
  33. }
  34. public async void AccessUltra3DFiles(Ultr3DParameter ultr3DParameter)
  35. {
  36. _ultr3DFileWorker.InitFileWorkItem(ultr3DParameter.ResourceInfos);
  37. await _ultr3DFileWorker.AccessUltraFiles();
  38. }
  39. public void Dispose()
  40. {
  41. throw new NotImplementedException();
  42. }
  43. private async void OnMainSurfaceReady(object? sender, string e)
  44. {
  45. lock (_lock)
  46. {
  47. Parse3DModelManager.ParseSurface(e);
  48. }
  49. }
  50. private void OnMainMDFileReady(object? sender, MDFileArgs e)
  51. {
  52. lock (_lock)
  53. {
  54. Parse3DModelManager.ParseMdl(e.FilePath, e.CarotidScanType, e.CarotidScanDirection);
  55. MDFileReady(e.FileUrl);
  56. }
  57. }
  58. private async Task LoadSurfaceFile()
  59. {
  60. try
  61. {
  62. var path = InfoConstant.SurfaceFolder.Replace("\\", "/");
  63. var files = Directory.GetFiles(path);
  64. var paras = new List<string>(); ;
  65. foreach (var c in files)
  66. {
  67. var data= await File.ReadAllBytesAsync(c);
  68. var base64 = Convert.ToBase64String(data,Base64FormattingOptions.InsertLineBreaks);
  69. paras.Add("data:image/jpeg;base64,"+base64);
  70. }
  71. var surfaceFiles = string.Join("surface", paras);
  72. var method = $"setSurface({Parse3DModelManager.SurfaceFile.Width - 1}, {Parse3DModelManager.SurfaceFile.Depth - 1}, " +
  73. $"{Parse3DModelManager.SurfaceFile.Height - 1}, \"{path}\");";
  74. var width = (Parse3DModelManager.SurfaceFile.Width - 1).ToString();
  75. var height = (Parse3DModelManager.SurfaceFile.Height - 1).ToString();
  76. var depth = (Parse3DModelManager.SurfaceFile.Depth - 1).ToString();
  77. var args = new List<string>{
  78. width,
  79. depth,
  80. height,
  81. surfaceFiles
  82. };
  83. var callString = PlatFormHelper.GetMethodStr("externalNotification", TargetMethodName.SetSurface, args);
  84. AvaloniaCefBrowserHelper.browser?.ExecuteJavaScript(callString, null, 0);
  85. }
  86. catch (Exception exception)
  87. {
  88. Logger.WriteShellLog($"Load 3D model failed : {exception}");
  89. }
  90. }
  91. private void MDFileReady(string key)
  92. {
  93. var callString = PlatFormHelper.GetMethodStr("externalNotification", TargetMethodName.MdlFileLoaded, new List<string>() { key});
  94. AvaloniaCefBrowserHelper.MeasureWindowBrowser?.ExecuteJavaScript(callString, null, 0);
  95. }
  96. }
  97. }