/*========================================================================= 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 "vtkPolyDataWriter.h" #include "vtkPolyDataMapper.h" #include "vtkPolyDataMapper2D.h" #include "vtkActor2D.h" #include "vtkRenderWindowInteractor.h" #include "vtkMedicalImageProperties.h" #include "vtkRenderWindow.h" #include "vtkRenderer.h" #include "vtkCamera.h" #include "vtkProperty.h" #include "vtkProperty2D.h" #include "vtkAppendPolyData.h" #include "vtkImageData.h" /* * Small example to read in a RTSTUCT and write it out (displays it too). */ // 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 < 3 ) { std::cerr << argv[0] << " input.dcm output.dcm\n"; return 1; } const char * filename = argv[1]; const char * outfilename = argv[2]; vtkGDCMPolyDataReader * reader = vtkGDCMPolyDataReader::New(); reader->SetFileName( filename ); reader->Update(); //std::cout << reader->GetMedicalImageProperties()->GetStudyDate() << std::endl; vtkGDCMPolyDataWriter * writer = vtkGDCMPolyDataWriter::New(); writer->SetNumberOfInputPorts( reader->GetNumberOfOutputPorts() ); writer->SetFileName( outfilename ); for(int num = 0; num < reader->GetNumberOfOutputPorts(); ++num ) #if (VTK_MAJOR_VERSION >= 6) writer->SetInputConnection( num, reader->GetOutputPort(num) ); #else writer->SetInput( num, reader->GetOutput(num) ); #endif //doesn't look like the medical properties are actually written out writer->SetMedicalImageProperties( reader->GetMedicalImageProperties() ); writer->SetRTStructSetProperties( reader->GetRTStructSetProperties() ); writer->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 } // Now we'll look at it. vtkPolyDataMapper *cubeMapper = vtkPolyDataMapper::New(); #if (VTK_MAJOR_VERSION >= 6) cubeMapper->SetInputConnection( append->GetOutputPort()); #else cubeMapper->SetInput( append->GetOutput()); #endif cubeMapper->SetScalarRange(0,7); vtkActor *cubeActor = vtkActor::New(); cubeActor->SetMapper(cubeMapper); vtkProperty * property = cubeActor->GetProperty(); property->SetRepresentationToWireframe(); vtkRenderer *renderer = vtkRenderer::New(); vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->AddRenderer(renderer); vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renWin); renderer->AddActor(cubeActor); renderer->ResetCamera(); renderer->SetBackground(1,1,1); renWin->SetSize(300,300); renWin->Render(); iren->Start(); reader->Delete(); append->Delete(); cubeMapper->Delete(); cubeActor->Delete(); renderer->Delete(); renWin->Delete(); iren->Delete(); writer->Delete(); return 0; }