The event handler receives an argument of type MedicalViewerMPRPolygonEventsArgs containing data related to this event. The following MedicalViewerMPRPolygonEventsArgs properties provide information specific to this event.
Property | Description |
---|---|
Polygon | Gets the MPR polygon that the user just created. |
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 MedicalViewerPolygonCreatedForm : 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 MedicalViewerPolygonCreatedForm(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);
cell.AddAction(MedicalViewerActionType.PanoramicPolygon);
// 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.PanoramicPolygon, 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();
cell.MPRPolygonCreated += new EventHandler<MedicalViewerMPRPolygonEventsArgs>(cell_MPRPolygonCreated);
cell.PanoramicDataRequested += new EventHandler<MedicalViewerPanoramicDataRequestedEventArgs>(cell_PanoramicDataRequested);
cell.MPRPolygonClicked += new EventHandler<MedicalViewerMPRPolygonClickedEventsArgs>(cell_MPRPolygonClicked);
cell.Data3DRequested += new EventHandler<MedicalViewerData3DRequestedEventArgs>(cell_Data3DRequested);
cell.AutoDisposeInternalData = true;
}
void cell_Data3DRequested(object sender, MedicalViewerData3DRequestedEventArgs e)
{
e.Succeed = Medical3DEngine.Provide3DInformation(e);
}
void cell_MPRPolygonCreated(object sender, MedicalViewerMPRPolygonEventsArgs e)
{
MedicalViewerMultiCell cellSource = (MedicalViewerMultiCell)sender;
MedicalViewerPanoramicCell cell = new MedicalViewerPanoramicCell(e.Polygon);
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);
_medicalViewer.Cells.Add(cell);
MedicalViewerParaxialCutCell paraxialCell = new MedicalViewerParaxialCutCell(e.Polygon, 0);
paraxialCell.ParaxialDistance = 20;
paraxialCell.ParaxialLength = 200;
_medicalViewer.Cells.Add(paraxialCell);
cellSource.SetAction(MedicalViewerActionType.WindowLevel, MedicalViewerMouseButtons.Left, MedicalViewerActionFlags.Active);
}
void cell_MPRPolygonClicked(object sender, MedicalViewerMPRPolygonClickedEventsArgs e)
{
// get the cell that contaisn the polygon clicked by the user.
MedicalViewerMultiCell cell = (MedicalViewerMultiCell)sender;
// get paraxial cell.
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)
{
MedicalViewerMultiCell cell = (MedicalViewerMultiCell)sender;
RasterCodecs _codecs = new RasterCodecs();
String fileName = (string)(_seriesManager.Stacks[0].Items[e.FrameIndex].Data);
e.Frame = _codecs.Load(fileName);
}
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; }
}
}
MedicalViewerPolygonCreatedForm GetMedicalViewerPolygonCreatedForm()
{
MedicalViewerSeriesManagerFrom form = new MedicalViewerSeriesManagerFrom();
MedicalViewerSeriesManager output = form.LoadJamesHead();
return new MedicalViewerPolygonCreatedForm(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 MedicalViewerPolygonCreatedExample()
{
MedicalViewerPolygonCreatedForm myForm = GetMedicalViewerPolygonCreatedForm();
MedicalViewer medicalViewer = myForm.Viewer;
MessageBox.Show("Click to draw a polygon using the left mouse click, each click will create a new point, when done double-click");
myForm.ShowDialog();
}