/*========================================================================= 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 "vtkGDCMPolyDataReader.h" //#include "vtkGDCMPolyDataWriter.h" #include "vtkAppendPolyData.h" #include "vtkPolyDataWriter.h" #include "vtkPolyDataMapper.h" #include "vtkPolyDataMapper2D.h" #include "vtkActor2D.h" #include "vtkRenderWindowInteractor.h" #include "vtkRenderWindow.h" #include "vtkRenderer.h" #include "vtkCamera.h" #include "vtkProperty.h" #include "vtkProperty2D.h" // gdcmDataExtra/gdcmNonImageData/exRT_Structure_Set_Storage.dcm // gdcmDataExtra/gdcmNonImageData/RTSTRUCT_1.3.6.1.4.1.22213.1.1396.2.dcm // gdcmDataExtra/gdcmNonImageData/RT/RTStruct.dcm int main(int argc, char *argv[]) { if( argc < 2 ) { std::cerr << argv[0] << " filename1.dcm\n"; return 1; } const char * filename = argv[1]; vtkGDCMPolyDataReader * reader = vtkGDCMPolyDataReader::New(); reader->SetFileName( filename ); reader->Update(); // vtkGDCMPolyDataWriter * writer2 = vtkGDCMPolyDataWriter::New(); // for(int num = 0; num < reader->GetNumberOfOutputPorts(); ++num ) // writer2->SetInput( num, reader->GetOutput(num) ); // writer2->SetFileName( "rtstruct.dcm" ); // writer2->Write(); // print reader output: reader->Print( std::cout ); // print first output: reader->GetOutput()->Print( std::cout ); vtkAppendPolyData *append = vtkAppendPolyData::New(); int n = reader->GetNumberOfOutputPorts(); for(int i = 0; i < n; ++i) { #if (VTK_MAJOR_VERSION >= 6) append->AddInputConnection( reader->GetOutputPort(i) ); #else append->AddInput( reader->GetOutput(i) ); #endif } vtkPolyDataWriter * writer = vtkPolyDataWriter::New(); #if (VTK_MAJOR_VERSION >= 6) writer->SetInputConnection( reader->GetOutputPort() ); #else writer->SetInput( reader->GetOutput() ); #endif writer->SetFileName( "rtstruct.vtk" ); //writer->Write(); // Now we'll look at it. vtkPolyDataMapper *cubeMapper = vtkPolyDataMapper::New(); //vtkPolyDataMapper2D* cubeMapper = vtkPolyDataMapper2D::New(); //cubeMapper->SetInput( reader->GetOutput() ); #if (VTK_MAJOR_VERSION >= 6) cubeMapper->SetInputConnection( append->GetOutputPort() ); #else cubeMapper->SetInput( append->GetOutput() ); #endif cubeMapper->SetScalarRange(0,7); vtkActor *cubeActor = vtkActor::New(); //vtkActor2D* cubeActor = vtkActor2D::New(); cubeActor->SetMapper(cubeMapper); vtkProperty * property = cubeActor->GetProperty(); property->SetRepresentationToWireframe(); //cubeActor->GetProperty()->SetColor(1, 0, 0); // The usual rendering stuff. // vtkCamera *camera = vtkCamera::New(); // camera->SetPosition(1,1,1); // camera->SetFocalPoint(0,0,0); vtkRenderer *renderer = vtkRenderer::New(); vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->AddRenderer(renderer); vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renWin); renderer->AddActor(cubeActor); //renderer->AddActor2D(cubeActor); //renderer->SetActiveCamera(camera); renderer->ResetCamera(); renderer->SetBackground(1,1,1); renWin->SetSize(300,300); // interact with data renWin->Render(); iren->Start(); reader->Delete(); append->Delete(); cubeMapper->Delete(); cubeActor->Delete(); // camera->Delete(); renderer->Delete(); renWin->Delete(); iren->Delete(); writer->Delete(); return 0; }