GDCM 2.2.0

- Main Page
- Related Pages
- Namespaces
- Classes
- Files
- Directories
- Examples

rtstructapp.cxx

    /*=========================================================================

      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 )
        writer->SetInput( num, reader->GetOutput(num) );
      //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)
       {
       append->AddInput( reader->GetOutput(i) );
       }

      // Now we'll look at it.
      vtkPolyDataMapper *cubeMapper = vtkPolyDataMapper::New();
      cubeMapper->SetInput( append->GetOutput());
      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;
    }