¿Cómo utilizar vtkimageplanewidget para implementar un perfil 3D?
#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()); p>
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()); p>
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> 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;
}