Red de conocimiento informático - Material del sitio web - ¿Cómo utilizar vtkimageplanewidget para implementar un perfil 3D?

¿Cómo utilizar vtkimageplanewidget para implementar un perfil 3D?

#Incluir "vtkDICOMImageReader.h"

#Incluir "vtkOutlineFilter.h"

#Incluir "vtkPolyDataMapper.h"

#Incluir "vtkActor.h"

#Incluir "vtkRenderer.h"

#Incluir "vtkRenderWindow.h"

#Incluir "vtkRenderWindowInteractor.h"

#Incluir " vtkImagePlaneWidget.h "

#Incluye " vtkCellPicker.h "

#Incluye " vtkProperty.h "

#Incluye " vtkImageMapToColors.h "

#Incluye " vtkImageActor.h "

#Incluye "vtkCamera.h"

#Incluye " vtkCommand.h "

#Incluye " vtkJPEGReader .h "

clase vtkWidgetWindowLevelCallback;

Clase vtkWidgetWindowLevelCallback: comando VTK público

{

Público:

estático vtkWidgetWindowLevelCallback * New()

{ return new vtkWidgetWindowLevelCallback;}

void Execute( vtkObject *llamante, vtkNotUsed( evento largo sin firmar),

void *callData )

{

vtkImagePlaneWidget * self = reinterpretar _ cast lt; vtkImagePlaneWidget * gt(llamador);

if (! self) return

doble * wl = static _ cast ltdouble * gt(datos de llamada);

if(self == this- gt; WidgetX)

{

This-gt;WidgetY-gt;SetWindowLevel(wl[0], wl[1]);

This-gt;WidgetZ-gt;SetWindowLevel(wl[0],wl[1]) ;

}

else if(self == this- gt; WidgetY)

{

This- gt; SetWindowLevel(wl[0], wl[1]);

Este- gt; SetWindowLevel(wl[0], wl[1]);

}

else if(self == this- gt; WidgetZ)

{

This- gt; SetWindowLevel(wl[0], wl [ 1]);

Este- widgetY-

gt;SetWindowLevel(wl[0], wl[1]);

}

}

vtkWidgetWindowLevelCallback(): WidgetX(0), WidgetY( 0 ), WidgetZ ( 0 ) {}

vtkImagePlaneWidget * WidgetX

vtkImagePlaneWidget * WidgetY

vtkImagePlaneWidget * WidgetZ

};

Test_02() no válido

{

vtkDICOMImageReader * Lector DICOM = vtkDICOMImageReader::New();

Lector DICOM-gt; setdatabyteorderttolittleendian () ;

Lector DICOM- gt; SetDirectoryName(" D: \ \ T _ PETCT _ Ejemplo \ \ CT 483 ");

Lector DICOM- gt; p>

vtkOutlineFilter * DicomOutline = vtkOutlineFilter::New();

Doble línea-gt;SetInputConnection(lector DICOM-gt;obtener puerto de salida());

vtkPolyDataMapper * DicomMapper = vtkPolyDataMapper::New();

DicomMapper-gt;SetInputConnection(DicomOutline-gt;obtener puerto de salida());

Actor VTK * Actor DICOM = actor VTK: :New();

Factor doble - gt; set mapper(DicomMapper);

vtkRenderWindow * ren win = vtkRenderWindow::New();

VTK render * ren = render VTK:: Nuevo();

render VTK * ren 1 = render VTK:: Nuevo();

render VTK * ren 2 = render VTK :: Nuevo();

VTK render * ren 3 = VTK render::Nuevo();

vtkrenderwindowinteract * iren = vtkRenderWindowInteractor::Nuevo();

Lunwen-gt;añadir renderizador(ren 1);

Lunwen-gt;añadir renderizador(ren 2);

Lunwen-gt;añadir renderizador(ren 3 ); >

irengt; agregar renderer(ren);

irengt; SetRenderWindow(renWin);

//Rengt;

;

vtkCellPicker * picker = vtkCellPicker::New();

Picker - gt; Tolerancia de liquidación (0.005);

vtkimagespanewidget * planeWidgetX = vtkimagespanewidget: : New();

planeWidgetX- gt; set interactor(iren);

planeWidgetX- gt; SetKeyPressActivationValue(' x '); establecer selector(selector);

planeWidgetX- gt; RestrictPlaneToVolumeOn();

planeWidgetX- gt; GetPlaneProperty()- SetColor(0.0, 0.0, 1.0);

planeWidgetX- gt; p>

planeWidgetX- gt; mostrar texton();

//planeWidgetX- gt; textura interpoleon();

planeWidgetX- gt ; texturainterpoleoff();

planeWidgetX- gt; setresliceinterpoletolinear();

planeWidgetX- gt; SetInputData((vtkDataSet *)lector DICOM- gt; obtener salida());

planeWidgetX- gt ;setplaneeorientationtoxaxes();

planeWidgetX- gt; SetSliceIndex(255);

planeWidgetX- gt; GetTexturePlaneProperty()- gt; );

planeWidgetX- gt; on();

vtkimagespanewidget * planeWidgetY = vtkimagespanewidget::New();

planeWidgetY- gt; );

planeWidgetY- gt; SetKeyPressActivationValue(' y ');

planeWidgetY- gt; establecer selector(selector);

planeWidgetY- gt;

planeWidgetY-gt; GetPlaneProperty()-gt; SetColor(1.0, 0.0, 0.0);

planeWidgetY-gt; > planeWidgetY- gt; textura interpoleon( );

planeWidgetY- gt; setresliceinterpoletolinear()

planeWidgetY- gt;

((vtkDataSet *)lector DICOM- gt; obtener salida());

planeWidgetY- gt; setplaneeorientationtoyaxes();

planeWidgetY- gt; >

planeWidgetY- gt; on();

vtkimagespanewidget * planeWidgetZ = vtkimagespanewidget::New();

planeWidgetZ- gt; >

planeWidgetZ- gt; mostrar texton();

planeWidgetZ- gt; RestrictPlaneToVolumeOn();

planeWidgetZ- gt;

planeWidgetZ- gt; establecer selector(selector);

planeWidgetZ- gt; GetPlaneProperty()- gt; SetColor(0.0, 1.0, 0.0);

planeWidgetZ- gt; textura interpoleon();

planeWidgetZ- gt; setresliceinterpoletolinear();

planeWidgetZ- gt; SetInputData((vtkDataSet *)lector DICOM- gt; obtener salida());

planeWidgetZ- gt; p>

planeWidgetZ- gt; setplaneeorientationtozaxes();

planeWidgetZ- gt; ();

vtkWidgetWindowLevelCallback * CBK = vtkWidgetWindowLevelCallback::New();

CBK- gt; planeWidgetX

CBK- gt; /p>

CBK- gt ;WidgetZ = planeWidgetZ

CBK- gt;delete();

vtkImageMapToColors * mapa de colores 1 = vtkImageMapToColors::New();

mapa de colores 1->; PassAlphaToOutputOff(); //Uso en RGBA

mapa de colores 1->;SetActiveComponent(0);

mapa de colores 1->;setoutputformatoluminance() ;

mapa de colores 1->;SetInputData((vtkDataSet *)planeWidgetX- gt;GetResliceOutput());

mapa de colores 1->;SetLookupTab

le((vtkScalarsToColors *)planeWidgetX- gt;GetLookupTable());

vtkimageoactor * actor de imagen 1 = vtkimageoactor::New();

actor de imagen 1->; ();

actor de imagen 1->;SetInputData(mapa de color 1- gt;obtener salida());

vtkimagaptocolors * mapa de color 2 = vtkimagaptocolors::New();

Tabla de mapeo de colores 2->PassAlphaToOutputOff();

Tabla de mapeo de colores 2->SetActiveComponent(0); //Para múltiples componentes

Tabla de mapeo de colores 2->setoutputformatoluminance();

Tabla de mapeo de colores 2->SetInputData((vtkDataSet *)planeWidgetY- gt; GetResliceOutput());

Tabla de mapeo de colores 2->SetLookupTable( (vtkScalarsToColors *)planeWidgetX- gt;GetLookupTable());

vtki mage actor * image actor 2 = vtki mage actor::New();

imageActor2->pickableoff( );

imageActor2->SetInputData(mapa de colores 2- gt; obtener salida());

vtkimagaptocolors * mapa de colores 3 = vtkimagaptocolors::New();

Tabla de mapeo de color 3->PassAlphaToOutputOff();

Tabla de mapeo de color 3->SetActiveComponent(0);

Tabla de mapeo de color 3->setoutputformatoluminance(); p>

Tabla de mapeo de colores 3->SetInputData((vtkDataSet *)planeWidgetZ- gt; GetResliceOutput());

Tabla de mapeo de colores 3->SetLookupTable((vtkScalarsToColors *)planeWidgetX- gt ; GetLookupTable ());

vtki mage actor * imagen actor 3 = vtki mage actor::New();

imageActor3->pickableoff();

imageActor3->SetInputData(mapa de color 3- gt; obtener salida());

Rengt- AddActor(doble factor); //Esquema

ren 1-> ;AddActor (imageactor 1);

ren 2->;añadir actor(imagen actor 2);

ren 3->;añadir actor(imagen acto

o 3);

//Está bien

Ren-gt;SetBackground(0.3, 0.3, 0.6);

ren 1->;SetBackground(1.0, 0.0, 0.0);

ren 2->;SetBackground(0.0, 1.0, 0.0);

ren 3->;SetBackground(0.0, 0.0, 1.0);

ren 3->; p>

ren-gt;SetSize(1000, 1000);

Ren-gt;SetViewport(0, 0.5, 0.5, 1);

ren 1-> ; SetViewport( 0,5, 0,5, 1,

ren 2->; ren 3->; SetViewport( 0.5 , 0, 1, 0.5

irengt;

irengt;

irengt; render();

}

int main()

{

prueba _ 02() ;

Devuelve 0;

}