Browse Source

壳子接口更新

Jimmy 2 years ago
parent
commit
189f56efbd

+ 2 - 3
fis/Managers/Interfaces/IUltra3DManager.cs

@@ -1,4 +1,5 @@
 using fis.Managers.Interfaces;
+using fis.Win.Dev.Managers.Modules.Ultra3D;
 using fis.Win.Dev.Win.Ultra3D.manager;
 using System;
 using System.Collections.Generic;
@@ -12,8 +13,6 @@ namespace fis.Win.Dev.Managers.Interfaces
     {
         Parse3DModelManager Parse3DModelManager { get; set; }
 
-        Task RenderUltr3D(string surfacePath,string mdlPath);
-
-        void MDFileReady(string key);
+        void AccessUltra3DFiles(Ultr3DParameter ultr3DParameter);
     }
 }

+ 25 - 0
fis/Managers/Modules/Ultra3D/Ultr3DParameter.cs

@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace fis.Win.Dev.Managers.Modules.Ultra3D
+{
+   /// <summary>
+   /// 超声影像三维重建参数
+   /// </summary>
+    internal class Ultr3DParameter
+    {
+        /// <summary>
+        /// 检查记录ID
+        /// </summary>
+        public string RecordID { get; set; }
+
+        /// <summary>
+        /// 检查记录3D数据资源信息
+        /// </summary>
+
+        public List<Ultra3DResourceInfo> ResourceInfos { get; set; }
+    }
+}

+ 42 - 18
fis/Managers/Modules/Ultra3D/Ultra3DDownloadWorker.cs

@@ -1,6 +1,7 @@
 using fis.Managers;
 using fis.Win.Dev.Managers.Interfaces;
 using fis.Win.Dev.Managers.modules.storage;
+using fis.Win.Dev.Win.Ultra3D.Utils;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -9,17 +10,27 @@ using System.Threading.Tasks;
 
 namespace fis.Win.Dev.Managers.Modules.Ultra3D
 {
+    internal class MDFileArgs
+    { 
+        public string FilePath { get; set; }
+
+        public CarotidScanType CarotidScanType { get; set; }
+
+        public CarotidScanDirection CarotidScanDirection { get; set; }
+    }
     internal class Ultra3DDownloadWorker
     {
-        public EventHandler<byte[]> MainSurfaceFileReady;
+        public EventHandler<string> MainSurfaceFileReady;
 
-        public EventHandler<byte[]>MainMDFileReady;
+        public EventHandler<MDFileArgs> MainMDFileReady;
 
         public List<Ultr3dUnionWorkItems> Ultra3DFileWorkItems;
 
         private Ultra3DStorage _ultra3DStorage;
 
-        public string MainFileID { get; set; }
+        public List<Ultra3DResourceInfo> _resourceInfo;
+
+        public string MainDataID { get; set; }
 
         public Ultra3DDownloadWorker()
         {
@@ -30,48 +41,61 @@ namespace fis.Win.Dev.Managers.Modules.Ultra3D
 
         public void InitFileWorkItem(List<Ultra3DResourceInfo> ultra3DFileWorkInfos)
         {
-            var mainItem = ultra3DFileWorkInfos.FirstOrDefault();
-            MainFileID = mainItem?.ID;
+            _resourceInfo = ultra3DFileWorkInfos;
+           var mainItem = ultra3DFileWorkInfos.FirstOrDefault();
+            MainDataID = mainItem?.DataId;
             foreach (var u in ultra3DFileWorkInfos)
             {
-                if (Ultra3DFileWorkItems.Any(x => x.FileId == u.ID))
+                if (Ultra3DFileWorkItems.Any(x => x.DataId == u.DataId))
                 {
                     continue;
                 }
-                var surfaceItem = new Ultra3DFileWorkItem(_ultra3DStorage, mainItem.SurfaceUlr, mainItem.ID);
-                var mdItem = new Ultra3DFileWorkItem(_ultra3DStorage, mainItem.MdFileUlr, mainItem.ID);
-                var union = new Ultr3dUnionWorkItems(mainItem.ID, surfaceItem, mdItem);
+                var surfaceItem = new Ultra3DFileWorkItem(_ultra3DStorage, mainItem.SurfaceUrl, mainItem.DataId);
+                var mdItem = new Ultra3DFileWorkItem(_ultra3DStorage, mainItem.MdFileUrl, mainItem.DataId);
+                var union = new Ultr3dUnionWorkItems(mainItem.DataId, surfaceItem, mdItem);
                 union.SurfaceFileCanbeAccess += OnSurfaceFileReady;
                 union.ModelFileCanbeAccess += OnModelFileReady;
                 Ultra3DFileWorkItems.Add(union);
             }        
         }
 
- 
-
         public async Task AccessUltraFiles()
         {
+            var mainData = Ultra3DFileWorkItems.First(x => x.DataId == MainDataID);
+            await mainData.StartAccessFiles();
             foreach (var ulr in Ultra3DFileWorkItems)
             {
-               await ulr.StartAccessFiles();
+                if (ulr.DataId == MainDataID)
+                {
+                    continue;
+                }
+                var acceeFileTask = Task.Run(async () =>
+                {
+                   await ulr.StartAccessFiles();
+                });              
             }
         }
 
         private void OnSurfaceFileReady(object? sender,string e)
         {
-            if (e == MainFileID)
+            if (e == MainDataID)
             {
-                var workUnion = Ultra3DFileWorkItems.FirstOrDefault(x => x.FileId == e);
-                MainSurfaceFileReady?.Invoke(this, workUnion.SurfaceWorkItem.FileBytes);
+                var workUnion = Ultra3DFileWorkItems.FirstOrDefault(x => x.DataId == e);
+                MainSurfaceFileReady?.Invoke(this, workUnion.SurfaceWorkItem.FilePath);
             }
         }
 
         private void OnModelFileReady(object? sender, string e)
         {
-            if (e == MainFileID)
+            if (e == MainDataID)
             {
-                var workUnion = Ultra3DFileWorkItems.FirstOrDefault(x => x.FileId == e);
-                MainSurfaceFileReady?.Invoke(this, workUnion.MdFileWorkItem.FileBytes);
+                var workUnion = Ultra3DFileWorkItems.FirstOrDefault(x => x.DataId == e);
+                var info = _resourceInfo.FirstOrDefault(x => x.DataId == e);
+                MainMDFileReady?.Invoke(this, new MDFileArgs { 
+                FilePath= workUnion.MdFileWorkItem.FilePath,
+                CarotidScanType = info.CarotidScanType,
+                CarotidScanDirection=info.CarotidScanDirection
+                });
             }
         }
     }

+ 24 - 50
fis/Managers/Modules/Ultra3D/Ultra3DFileWorkItem.cs

@@ -17,7 +17,7 @@ namespace fis.Win.Dev.Managers.Modules.Ultra3D
 
         public string FileName { get; set; }
 
-        public byte[] FileBytes { get; set; }
+        public string FilePath { get; set; }
 
         public FileAccessStatus FileAccessStatus { get; set; }
 
@@ -30,47 +30,27 @@ namespace fis.Win.Dev.Managers.Modules.Ultra3D
             var fileInfo = GetVidNameFromUrl(fileUri);
             ultra3DStorage = ultraStorage;
             FileName = $"{fileId}{fileInfo.Item2}";
-            var filePath = Path.Combine(ultra3DStorage.StoragePath, FileName);
-            if (File.Exists(filePath))
+            FilePath = Path.Combine(ultra3DStorage.StoragePath, FileName);
+
+            if (File.Exists(FilePath))
             {
-                FileAccessStatus = FileAccessStatus.CachedInDiskOnly;
+                FileAccessStatus = FileAccessStatus.CachedOnDisk;
             }
             else {
                 FileAccessStatus = FileAccessStatus.ReadyToDownload;
             }
         }
 
-        public async Task<byte[]> ReadFromDisk()
-        {
-            FileAccessStatus = FileAccessStatus.ReadingCachedFile;
-            FileBytes = await ultra3DStorage.ReadCacheFile(FileName);
-            FileAccessStatus = FileAccessStatus.ReadCacheedFileInMemory;
-            return FileBytes;
-        }
-
         public async Task<byte[]> ReadFromNetwork()
         {
             FileAccessStatus = FileAccessStatus.Downloading;
             var bytes = await HttpHelper.httpClient.GetByteArrayAsync(FileUri);
-            FileAccessStatus = FileAccessStatus.CachedInMemoryOnly;
+            await ultra3DStorage.WriteCacehFile(bytes, FileName);
+            FileAccessStatus = FileAccessStatus.CachedOnDisk;
             return bytes;
         }
 
 
-        public async Task<byte[]> CacheFromNetwork()
-        {
-            FileAccessStatus = FileAccessStatus.Downloading;
-            FileBytes = await HttpHelper.httpClient.GetByteArrayAsync(FileUri);
-            FileAccessStatus = FileAccessStatus.CachedInMemoryOnly;
-            return FileBytes;
-        }
-
-        public async void CacheToDisk()
-        {
-            await ultra3DStorage.WriteCacehFile(FileBytes, FileName);
-            FileAccessStatus = FileAccessStatus.CachedInMemoryAndDisk;
-        }
-
         private Tuple<string,string> GetVidNameFromUrl(string url)
         {
             var fragments = url.Split('/');
@@ -90,19 +70,13 @@ namespace fis.Win.Dev.Managers.Modules.Ultra3D
     internal enum FileAccessStatus
     {
         ReadyToDownload,
-        Downloading,
-        CachedInMemoryOnly,
-        CachedInMemoryAndDisk,
-        
-        ///AlreadyCached
-        CachedInDiskOnly,
-        ReadingCachedFile,
-        ReadCacheedFileInMemory
+        Downloading,       
+        CachedOnDisk
     }
 
     internal class Ultr3dUnionWorkItems
     {
-        public string FileId { get; set; }
+        public string DataId { get; set; }
 
         public Ultra3DFileWorkItem SurfaceWorkItem { get; set; }
 
@@ -117,35 +91,35 @@ namespace fis.Win.Dev.Managers.Modules.Ultra3D
             //访问表面数据
             if (SurfaceWorkItem.FileAccessStatus == FileAccessStatus.ReadyToDownload)
             {
-                await SurfaceWorkItem.CacheFromNetwork();
-                SurfaceFileCanbeAccess?.Invoke(this,FileId);
-                SurfaceWorkItem.CacheToDisk();
+                await SurfaceWorkItem.ReadFromNetwork();
+                SurfaceFileCanbeAccess?.Invoke(this,DataId);
             }
 
-            if (SurfaceWorkItem.FileAccessStatus == FileAccessStatus.CachedInDiskOnly)
+            if (SurfaceWorkItem.FileAccessStatus == FileAccessStatus.CachedOnDisk)
             {
-                await SurfaceWorkItem.ReadFromDisk();
-                SurfaceFileCanbeAccess?.Invoke(this, FileId);
+                SurfaceFileCanbeAccess?.Invoke(this, DataId);
             }
+
+      
+
             //访问模型数据
 
-            if (SurfaceWorkItem.FileAccessStatus == FileAccessStatus.ReadyToDownload)
+            if (MdFileWorkItem.FileAccessStatus == FileAccessStatus.ReadyToDownload)
             {
-                await MdFileWorkItem.CacheFromNetwork();
-                ModelFileCanbeAccess?.Invoke(this, FileId);
-                MdFileWorkItem.CacheToDisk();
+                await MdFileWorkItem.ReadFromNetwork();
+                ModelFileCanbeAccess?.Invoke(this, DataId);
             }
 
-            if (SurfaceWorkItem.FileAccessStatus == FileAccessStatus.CachedInDiskOnly)
+            if (MdFileWorkItem.FileAccessStatus == FileAccessStatus.CachedOnDisk)
             {
-                await MdFileWorkItem.ReadFromDisk();
-                ModelFileCanbeAccess?.Invoke(this, FileId);
+                ModelFileCanbeAccess?.Invoke(this, DataId);
             }
+            
         }
 
         public Ultr3dUnionWorkItems(string fileId, Ultra3DFileWorkItem surface, Ultra3DFileWorkItem model)
         {
-            FileId = fileId;
+            DataId = fileId;
             SurfaceWorkItem=surface;
             MdFileWorkItem = model;
         }

+ 31 - 4
fis/Managers/Modules/Ultra3D/Ultra3DResourceInfo.cs

@@ -1,4 +1,5 @@
-using System;
+using fis.Win.Dev.Win.Ultra3D.Utils;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -6,12 +7,38 @@ using System.Threading.Tasks;
 
 namespace fis.Win.Dev.Managers.Modules.Ultra3D
 {
+    /// <summary>
+    /// 三维重建文件信息
+    /// </summary>
     internal class Ultra3DResourceInfo
     {
-        public string ID { get; set; }
+        /// <summary>
+        /// 影像数据ID
+        /// </summary>
+        public string DataId { get; set; }
 
-        public string SurfaceUlr { get; set; }
+        /// <summary>
+        /// 表面文件地址
+        /// </summary>
 
-        public string MdFileUlr { get; set; }
+        public string SurfaceUrl { get; set; }
+
+        /// <summary>
+        /// 模型文件地址
+        /// </summary>
+
+        public string MdFileUrl { get; set; }
+
+        /// <summary>
+        /// 颈动脉扫查类型
+        /// </summary>
+
+        public CarotidScanType CarotidScanType { get; set; }
+
+        /// <summary>
+        /// 颈动脉扫查方向
+        /// </summary>
+
+        public CarotidScanDirection CarotidScanDirection { get; set; }
     }
 }

+ 19 - 11
fis/Managers/Ultra3DManager.cs

@@ -19,34 +19,40 @@ namespace fis.Win.Dev.Managers
     {
         public Parse3DModelManager Parse3DModelManager { get; set; }
         private Ultra3DDownloadWorker _ultr3DFileWorker;
+
+
         internal Ultra3DManager()
         {
             Parse3DModelManager = new Parse3DModelManager();
             _ultr3DFileWorker = new Ultra3DDownloadWorker();
-            _ultr3DFileWorker.MainSurfaceFileReady += OnMainSurfaceReady;
+            _ultr3DFileWorker.MainSurfaceFileReady += OnMainSurfaceReady ;
             _ultr3DFileWorker.MainMDFileReady += OnMainMDFileReady;
         }
 
-        private void OnMainMDFileReady(object? sender, byte[] e)
+        public async void AccessUltra3DFiles(Ultr3DParameter ultr3DParameter)
         {
-            throw new NotImplementedException();
+            _ultr3DFileWorker.InitFileWorkItem(ultr3DParameter.ResourceInfos);
+            await _ultr3DFileWorker.AccessUltraFiles();
         }
 
-        private void OnMainSurfaceReady(object? sender, byte[] e)
+        public void Dispose()
         {
             throw new NotImplementedException();
         }
 
-        public void Dispose()
+
+
+
+        private async void OnMainSurfaceReady(object? sender, string e)
         {
-            throw new NotImplementedException();
+            Parse3DModelManager.ParseSurface(e);
+            await LoadSurfaceFile();
         }
 
-        public async Task RenderUltr3D(string surfacePath, string mdlPath)
+        private void OnMainMDFileReady(object? sender, MDFileArgs e)
         {
-            Parse3DModelManager.ParseSurface(surfacePath);
-            Parse3DModelManager.ParseMdl(mdlPath,CarotidScanType.CarotidLeft,CarotidScanDirection.TopToBottom);
-            await LoadSurfaceFile();
+            Parse3DModelManager.ParseMdl(e.FilePath, e.CarotidScanType, e.CarotidScanDirection);
+            MDFileReady(e.FilePath);
         }
 
         private async Task LoadSurfaceFile()
@@ -84,10 +90,12 @@ namespace fis.Win.Dev.Managers
             }
         }
 
-        public void MDFileReady(string key)
+        private void MDFileReady(string key)
         {
             var callString = PlatFormHelper.GetMethodStr("externalNotification", TargetMethodName.MdlFileLoaded, new List<string>());
             AvaloniaCefBrowserHelper.browser?.ExecuteJavaScript(callString, null, 0);
         }
+
+
     }
 }

+ 17 - 3
fis/Utilities/FisBrowserScriptObject.cs

@@ -4,6 +4,7 @@ using fis.Log;
 using fis.Managers;
 using fis.Win.Dev.Helpers;
 using fis.Win.Dev.Managers.Interfaces;
+using fis.Win.Dev.Managers.Modules.Ultra3D;
 using fis.Win.Dev.Win.Ultra3D.Carotid;
 using fis.Win.Dev.Win.Ultra3D.Utils;
 using Newtonsoft.Json;
@@ -24,12 +25,13 @@ namespace fis.Win.Dev.Utilities
         private string _lastClipData;
         private readonly SliceHelper _sliceHelper;
         public event EventHandler<bool> MeasureStateChanged;
+        private readonly IUltra3DManager _ultr3DManager;
         internal FisBrowserScriptObject(TextBlock title, IPlatformService platformService)
         {
             _title = title;
             _platformService = platformService;
-            var manager = AppManager.Get<IUltra3DManager>();
-            _sliceHelper = manager.Parse3DModelManager.SliceHelper;
+             _ultr3DManager = AppManager.Get<IUltra3DManager>();
+            _sliceHelper = _ultr3DManager.Parse3DModelManager.SliceHelper;
         }
 
         /// <summary>
@@ -65,11 +67,23 @@ namespace fis.Win.Dev.Utilities
         /// <summary>
         /// Get clip plane data.
         /// </summary>
-        public string GetClipPlaneData(string cefInputDataStr)
+        public string  GetClipPlaneData(string cefInputDataStr)
         {
             return CaculateClipPlaneData(cefInputDataStr);
         }
 
+        /// <summary>
+        /// Get clip plane data.
+        /// </summary>
+        public void SetUltr3DData(string ultr3DDataStr)
+        {
+            var ultrParameter = JsonConvert.DeserializeObject<Ultr3DParameter>(ultr3DDataStr.ToString());
+            if (ultrParameter != null)
+            {
+                _ultr3DManager.AccessUltra3DFiles(ultrParameter);
+            }
+        }
+
         /// <summary>
         /// get vessel plane points
         /// </summary>