ParaxialLength Property

Summary
Gets or sets the length of the paraxial lines.
Syntax
C#
C++/CLI
public float ParaxialLength { get; set; } 
            public: 
property float ParaxialLength { 
   float get(); 
   void set (    float ); 
} 

Property Value

Value that determines the length of the paraxial lines.

Remarks

To show or hide the paraxial line representation altogether, use the property ShowLines. The user can manually change the length of the paraxial line by clicking and dragging on the paraxial lines handles which appears on edge of each paraxial line.

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 22.0.2023.2.5
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.MedicalViewer Assembly

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