/*========================================================================= Program: GDCM (Grassroots DICOM). A DICOM library Copyright (c) 2006-2011 Mathieu Malaterre All rights reserved. See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ #include "vtkGDCMImageReader.h" #include "vtkRenderer.h" #include "vtkAssembly.h" #include "vtkRenderWindow.h" #include "vtkAnnotatedCubeActor.h" #include "vtkTransform.h" #include "vtkAxesActor.h" #include "vtkTextProperty.h" #include "vtkCaptionActor2D.h" #include "vtkPropAssembly.h" #include "vtkOrientationMarkerWidget.h" #include "vtkRenderWindowInteractor.h" #include "vtkPolyDataMapper.h" #include "vtkActor.h" #include "vtkImageData.h" #include "vtkLookupTable.h" #include "vtkTexture.h" #include "vtkPlaneSource.h" int main( int argc, char *argv[] ) { if( argc < 2 ) return 1; vtkGDCMImageReader *reader = vtkGDCMImageReader::New(); reader->SetFileName( argv[1] ); reader->Update(); vtkImageData* ima = reader->GetOutput(); vtkLookupTable* table = vtkLookupTable::New(); table->SetNumberOfColors(1000); table->SetTableRange(0,1000); table->SetSaturationRange(0,0); table->SetHueRange(0,1); table->SetValueRange(0,1); table->SetAlphaRange(1,1); table->Build(); // Texture vtkTexture* texture = vtkTexture::New(); #if (VTK_MAJOR_VERSION >= 6) texture->SetInputData(ima); #else texture->SetInput(ima); #endif texture->InterpolateOn(); texture->SetLookupTable(table); // PlaneSource vtkPlaneSource* plane = vtkPlaneSource::New(); plane->SetOrigin( -0.5, -0.5, 0.0); plane->SetPoint1( 0.5, -0.5, 0.0); plane->SetPoint2( -0.5, 0.5, 0.0); // PolyDataMapper vtkPolyDataMapper *planeMapper = vtkPolyDataMapper::New(); #if (VTK_MAJOR_VERSION >= 6) planeMapper->SetInputConnection(plane->GetOutputPort()); #else planeMapper->SetInput(plane->GetOutput()); #endif // Actor vtkActor* planeActor = vtkActor::New(); planeActor->SetTexture(texture); planeActor->SetMapper(planeMapper); planeActor->PickableOn(); // Final rendering with simple interactor: vtkRenderer *ren = vtkRenderer::New(); vtkRenderWindow *renwin = vtkRenderWindow::New(); renwin->AddRenderer(ren); vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renwin); ren->AddActor(planeActor); ren->SetBackground(0,0,0.5); vtkAnnotatedCubeActor* cube = vtkAnnotatedCubeActor::New(); cube->SetXPlusFaceText ( "L" ); cube->SetXMinusFaceText( "R" ); cube->SetYPlusFaceText ( "A" ); cube->SetYMinusFaceText( "P" ); cube->SetZPlusFaceText ( "H" ); cube->SetZMinusFaceText( "F" ); vtkAxesActor* axes2 = vtkAxesActor::New(); // simulate a left-handed coordinate system // vtkTransform *transform = vtkTransform::New(); transform->Identity(); //transform->RotateY(180); reader->GetDirectionCosines()->Print(std::cout); transform->Concatenate(reader->GetDirectionCosines()); //axes2->SetShaftTypeToCylinder(); axes2->SetUserTransform( transform ); //cube->SetUserTransform( transform ); // cant get it to work cube->GetAssembly()->SetUserTransform( transform ); // cant get it to work vtkPropAssembly* assembly = vtkPropAssembly::New(); assembly->AddPart( axes2 ); assembly->AddPart( cube ); vtkOrientationMarkerWidget* widget = vtkOrientationMarkerWidget::New(); //widget->SetOutlineColor( 0.9300, 0.5700, 0.1300 ); widget->SetOrientationMarker( assembly ); widget->SetInteractor( iren ); //widget->SetViewport( 0.0, 0.0, 0.4, 0.4 ); widget->SetEnabled( 1 ); widget->InteractiveOff(); widget->InteractiveOn(); renwin->Render(); iren->Start(); // Clean up: reader->Delete(); table->Delete(); texture->Delete(); plane->Delete(); planeMapper->Delete(); planeActor->Delete(); ren->Delete(); renwin->Delete(); iren->Delete(); return 0; }