MedicalViewerMPRPolygonHitTest Enumeration

Summary
Represents the enumeration that will be sent through the MedicalViewerCell.MPRPolygonClicked.
Syntax
C#
C++/CLI
public enum MedicalViewerMPRPolygonHitTest 
            public enum class MedicalViewerMPRPolygonHitTest : public System.Enum, System.IComparable, System.IConvertible, System.IFormattable   
Members
ValueMemberDescription
0None None.
1Handle The user clicked on one of the polygon handles.
2Body The user clicked on the one of the polygon lines.
Remarks

The event MedicalViewerCell.MPRPolygonClicked occurs when the user clicks on the MPR polygon. This enumeration is used by the event to determine which part of the polygon was actually clicked.

Example
C#
using Leadtools; 
using Leadtools.Dicom; 
using Leadtools.Medical3D; 
using Leadtools.Codecs; 
using Leadtools.MedicalViewer; 
using Leadtools.ImageProcessing; 
using Leadtools.ImageProcessing.Core; 
using Leadtools.ImageProcessing.Color; 
using Leadtools.Annotations.Engine; 
using Leadtools.Annotations.Designers; 
 
class MedicalViewerMPRPolygonForm : Form 
{ 
   private MedicalViewer _medicalViewer; 
   private MedicalViewerSeriesManager _seriesManager; 
 
   void MedicalViewerLocalizer_SizeChanged(object sender, EventArgs e) 
   { 
      _medicalViewer.Size = new Size(this.ClientRectangle.Right, this.ClientRectangle.Bottom); 
   } 
 
   public MedicalViewerMPRPolygonForm(MedicalViewerSeriesManager output) 
   { 
      DicomEngine.Startup(); 
      RasterCodecs _codecs = new RasterCodecs(); 
 
      this.SizeChanged += new EventHandler(MedicalViewerLocalizer_SizeChanged); 
 
      // Create the medical viewer and adjust the size and the location. 
      _medicalViewer = new MedicalViewer(1, 2); 
      _medicalViewer.Location = new Point(0, 0); 
      _medicalViewer.Size = new Size(this.ClientRectangle.Right, this.ClientRectangle.Bottom); 
 
      _seriesManager = output; 
 
      MedicalViewerMultiCell cell = new MedicalViewerMultiCell(null, true, 1, 1); 
 
      int index; 
      int count = output.Stacks[0].Items.Count; 
      CodecsImageInfo codecsInformation; 
 
      MedicalViewerImageInformation[] imageInformation = new MedicalViewerImageInformation[count]; 
 
      for (index = 0; index < count; index++) 
      { 
         codecsInformation = _codecs.GetInformation((string)(output.Stacks[0].Items[index].Data), true); 
 
         imageInformation[index] = new MedicalViewerImageInformation(); 
         imageInformation[index].ImageHeight = codecsInformation.Width; 
         imageInformation[index].ImageWidth = codecsInformation.Width; 
         imageInformation[index].XResolution = codecsInformation.XResolution; 
         imageInformation[index].YResolution = codecsInformation.YResolution; 
      } 
 
      cell.FramesRequested += new EventHandler<MedicalViewerRequestedFramesInformationEventArgs>(cell_FramesRequested); 
      FormClosing += new FormClosingEventHandler(MedicalViewerLocalizer_FormClosing); 
      cell.EnableLowMemoryUsage(2, count, imageInformation); 
 
      _medicalViewer.Cells.Add(cell); 
 
      // add some actions that will be used to change the properties of the images inside the control. 
      cell.AddAction(MedicalViewerActionType.WindowLevel); 
      cell.AddAction(MedicalViewerActionType.Alpha); 
      cell.AddAction(MedicalViewerActionType.Offset); 
 
      // assign the added actions to a mouse button, meaning that when the user clicks and drags the mouse button, the associated action will be activated. 
      cell.SetAction(MedicalViewerActionType.WindowLevel, MedicalViewerMouseButtons.Left, MedicalViewerActionFlags.Active); 
      cell.SetAction(MedicalViewerActionType.Alpha, MedicalViewerMouseButtons.Middle, MedicalViewerActionFlags.Active); 
      cell.SetAction(MedicalViewerActionType.Offset, MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.Active); 
 
      cell.ReferenceLine.Enabled = true; 
      cell.ReferenceLine.Color = Color.Yellow; 
      cell.ShowCellBoundaries = true; 
 
      // adjust some properties of the cell and add some tags. 
      _medicalViewer.Cells[0].SetTag(2, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.UserData, "EX. ID 230-36-5448"); 
      _medicalViewer.Cells[0].SetTag(4, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Frame); 
      _medicalViewer.Cells[0].SetTag(6, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Scale); 
      _medicalViewer.Cells[0].SetTag(2, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.WindowLevelData); 
      _medicalViewer.Cells[0].SetTag(1, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.FieldOfView); 
 
      cell.PixelSpacing = output.Stacks[0].PixelSpacing; 
 
      for (index = 0; index < count; index++) 
      { 
         cell.SetImagePosition(index, output.Stacks[0].Items[index].ImagePosition, (index == count - 1)); 
      } 
      cell.ImageOrientation = output.Stacks[0].Items[0].ImageOrientationArray; 
      cell.FrameOfReferenceUID = output.Stacks[0].Items[0].FrameOfReferenceUID; 
 
      int width = cell.VirtualImage[cell.ActiveSubCell].Image.Width; 
      int height = cell.VirtualImage[cell.ActiveSubCell].Image.Height; 
 
 
 
      Controls.Add(_medicalViewer); 
      _medicalViewer.Dock = DockStyle.Fill; 
      DicomEngine.Shutdown(); 
 
      // create a new polygon 
      MedicalViewerMPRPolygon polygon = new MedicalViewerMPRPolygon(); 
 
      // set some point, here we created a polygon that resembles a rectangle with a missing bottom line. 
      polygon.Points.Add(new PointF(width * 1 / 4, height * 3 / 4)); 
      polygon.Points.Add(new PointF(width * 1 / 4, height * 1 / 4)); 
      polygon.Points.Add(new PointF(width * 3 / 4, height * 1 / 4)); 
      polygon.Points.Add(new PointF(width * 3 / 4, height * 3 / 4)); 
 
 
      // now add this polygon you prepared to the cell. 
      cell.Polygons.Add(polygon); 
 
      // This event is important, because it's used to request the data that is need to create the internal panoramic data. 
      cell.PanoramicDataRequested += new EventHandler<MedicalViewerPanoramicDataRequestedEventArgs>(cell_PanoramicDataRequested); 
 
      // This event communicate with the Medical3D dll which contains all the internal panormaic calculations. 
      cell.Data3DRequested += new EventHandler<MedicalViewerData3DRequestedEventArgs>(cell_Data3DRequested); 
 
      // Dispose the internal data automatically if the use decided to delete the polygon. 
      cell.AutoDisposeInternalData = true; 
 
      // register the polygon click  
      cell.MPRPolygonClicked += new EventHandler<MedicalViewerMPRPolygonClickedEventsArgs>(cell_MPRPolygonClicked); 
 
      CreatePanoramicCell(cell, polygon); 
      polygon.Recalculate(); 
   } 
 
   void cell_Data3DRequested(object sender, MedicalViewerData3DRequestedEventArgs e) 
   { 
      e.Succeed = Medical3DEngine.Provide3DInformation(e); 
   } 
 
   void CreatePanoramicCell(MedicalViewerMultiCell cellSource, MedicalViewerMPRPolygon polygon) 
   { 
      // create a new panoramic cell assigned to the polygon you created. 
      MedicalViewerPanoramicCell cell = new MedicalViewerPanoramicCell(polygon); 
 
      // add some action, not necessary though. 
      cell.AddAction(MedicalViewerActionType.WindowLevel); 
      cell.AddAction(MedicalViewerActionType.Scale); 
      cell.AddAction(MedicalViewerActionType.Offset); 
      cell.AddAction(MedicalViewerActionType.Stack); 
      cell.SetAction(MedicalViewerActionType.Offset, MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.AllCells | MedicalViewerActionFlags.RealTime); 
      cell.SetAction(MedicalViewerActionType.Stack, MedicalViewerMouseButtons.Wheel, MedicalViewerActionFlags.Active); 
      cell.SetAction(MedicalViewerActionType.Scale, MedicalViewerMouseButtons.Middle, MedicalViewerActionFlags.Active); 
 
      // Add the panoramic cell the viewer. 
      _medicalViewer.Cells.Add(cell); 
 
      // Create a paraxial cell, and assign it to the polygon you just created. 
      MedicalViewerParaxialCutCell paraxialCell = new MedicalViewerParaxialCutCell (polygon, 0); 
 
      // set the distance and the length of the paraxial cuts. 
      paraxialCell.ParaxialDistance = 20; 
      paraxialCell.ParaxialLength = 200; 
 
      // Add the paraxial cuts to the viewer. 
      _medicalViewer.Cells.Add(paraxialCell); 
   } 
 
   void cell_MPRPolygonClicked(object sender, MedicalViewerMPRPolygonClickedEventsArgs e) 
   { 
      MedicalViewerMultiCell cell = (MedicalViewerMultiCell)sender; 
      MedicalViewerParaxialCutCell paraxialCell = (MedicalViewerParaxialCutCell)_medicalViewer.Cells[2]; 
 
      // if the user clicks on other polygon lines, the paraxial cut will be assigned to that line 
      if ((e.Button == MouseButtons.Left) && e.Type == MedicalViewerMPRPolygonHitTest.Body) 
      { 
         paraxialCell.PolygonLineIndex = e.Index; 
      } 
   } 
 
 
   void cell_PanoramicDataRequested(object sender, MedicalViewerPanoramicDataRequestedEventArgs e) 
   { 
      // get the cell that requested the MPR data. 
      MedicalViewerMultiCell cell = (MedicalViewerMultiCell)sender; 
 
      // instantiate a new raster codecs, which will be used to load the requested image. 
      RasterCodecs _codecs = new RasterCodecs(); 
 
      // the file name of the images loaded in the original cell. 
      String fileName = (string)(_seriesManager.Stacks[0].Items[e.FrameIndex].Data); 
 
      // load the image and set it to e.Frame. 
      e.Frame = _codecs.Load(fileName, 0, CodecsLoadByteOrder.BgrOrGrayOrRomm, e.FrameIndex + 1, e.FrameIndex + 1); 
   } 
 
   void MedicalViewerLocalizer_FormClosing(object sender, FormClosingEventArgs e) 
   { 
   } 
 
   void cell_FramesRequested(object sender, MedicalViewerRequestedFramesInformationEventArgs e) 
   { 
      MedicalViewerMultiCell cell = (MedicalViewerMultiCell)(sender); 
      RasterCodecs _codecs = new RasterCodecs(); 
      int i; 
      RasterImage image; 
      string fileName; 
 
      if (e.RequestedFramesIndexes.Length > 0) 
      { 
         fileName = (string)(_seriesManager.Stacks[0].Items[e.RequestedFramesIndexes[0]].Data); 
         image = _codecs.Load(fileName); 
      } 
      else 
         return; 
 
      for (i = 1; i < e.RequestedFramesIndexes.Length; i++) 
      { 
         fileName = (string)(_seriesManager.Stacks[0].Items[e.RequestedFramesIndexes[i]].Data); 
         image.AddPage(_codecs.Load(fileName)); 
      } 
 
      cell.SetRequestedImage(image, e.RequestedFramesIndexes, MedicalViewerSetImageOptions.Insert); 
   } 
 
   public MedicalViewer Viewer 
   { 
      get { return _medicalViewer; } 
   } 
} 
 
MedicalViewerMPRPolygonForm GetMedicalViewerMPRPolygonForm() 
{ 
   MedicalViewerSeriesManagerFrom form = new MedicalViewerSeriesManagerFrom(); 
   MedicalViewerSeriesManager output = form.LoadJamesHead(); 
 
   return new MedicalViewerMPRPolygonForm(output); 
} 
 
// This example changes the default window level value by decrease the width by 100. Then resets the images based on the new value. 
public void MedicalViewerMPRPolygonExample() 
{ 
   MedicalViewerMPRPolygonForm myForm = GetMedicalViewerMPRPolygonForm(); 
   MedicalViewer medicalViewer = myForm.Viewer; 
 
   myForm.ShowDialog(); 
} 
Requirements

Target Platforms

Help Version 23.0.2024.2.29
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.MedicalViewer Assembly
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.