123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- using fis.Win.Dev.Win.Ultra3D.Carotid;
- using fis.Win.Dev.Win.Ultra3D.manager;
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace fis.Win.Dev.Win.Ultra3D.Manager
- {
- public class DisplayModeArgs
- {
- public DisplayMode DisplayMode { get; }
- public bool IsAiClip { get; }
- public DisplayModeArgs(DisplayMode displayMode, bool isAiClip)
- {
- DisplayMode = displayMode;
- IsAiClip = isAiClip;
- }
- }
- /// <summary>
- /// Carotid measure image manager
- /// </summary>
- public class MeasureImageManager
- {
-
- /// <summary>
- /// Enter measure mode event
- /// </summary>
- public event EventHandler MeasureModeChanged;
- /// <summary>
- /// Current 3D Model measure bitmap
- /// </summary>
- public Bitmap CurrentMeasureBitmap { get; private set; }
- /// <summary>
- /// Trigger when display mode change.
- /// </summary>
- public event EventHandler<DisplayModeArgs> DisplayModeChanged;
- /// <summary>
- /// Switch display mode.
- /// </summary>
- /// <param name="displayMode">display mode.</param>
- public void SwitchDisplayMode(DisplayMode displayMode, CefInputData cefInputData, Parse3DModelManager parse3DModelManager)
- {
- var isAiClip = false;
- if (displayMode == DisplayMode.Measure)
- {
- if (cefInputData != null && parse3DModelManager.SurfaceFile.AiPoints != null)
- {
- isAiClip = IsAiPoints(parse3DModelManager.SurfaceFile.AiPoints, cefInputData);
- }
- CurrentMeasureBitmap = parse3DModelManager.GetSurfaceBitmap(cefInputData);
- }
- DisplayModeChanged?.Invoke(this, new DisplayModeArgs(displayMode, isAiClip));
- }
- /// <summary>
- /// Regist get clip info data func
- /// </summary>
- /// <param name="getClipInfoDataFunc">get clip info data func.</param>
- public void RegistGetClipInfoDataFunc(Func<Task<CefInputData>> getClipInfoDataFunc)
- {
- _getClipInfoDataFunc = getClipInfoDataFunc;
- }
- /// <summary>
- /// Enter measure mode
- /// </summary>
- public void EnterMeasureMode()
- {
- MeasureModeChanged?.Invoke(this, EventArgs.Empty);
- }
- public string GetCurrentMeasureData()
- {
- return ImgToBase64String(CurrentMeasureBitmap);
- }
- private bool IsAiPoints(Vector3D[] aiPoints, CefInputData inputData)
- {
- foreach (var point in aiPoints)
- {
- if (!inputData.PointsList.Contains(point))
- {
- return false;
- }
- }
- return true;
- }
- protected void OnDisposeManagedResource()
- {
- CurrentMeasureBitmap?.Dispose();
- }
- public static string ImgToBase64String(Bitmap bmp)
- {
- try
- {
- MemoryStream ms = new MemoryStream();
- bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
- byte[] arr = new byte[ms.Length];
- ms.Position = 0;
- ms.Read(arr, 0, (int)ms.Length);
- ms.Close();
- var data = Convert.ToBase64String(arr);
- return "data:image/jpeg;base64," + data;
- }
- catch (Exception ex)
- {
- return null;
- }
- }
- }
- }
|