From b8eef7da99d83e85969d8f16d45ac3de470ebf16 Mon Sep 17 00:00:00 2001 From: jpr Date: Fri, 17 Mar 2006 14:51:46 +0000 Subject: [PATCH] Example a using new features . DO NOT use right now; checking not achieved ! --- vtk/vtkWriteDicomExtended.cxx | 161 ++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100755 vtk/vtkWriteDicomExtended.cxx diff --git a/vtk/vtkWriteDicomExtended.cxx b/vtk/vtkWriteDicomExtended.cxx new file mode 100755 index 00000000..5d36725d --- /dev/null +++ b/vtk/vtkWriteDicomExtended.cxx @@ -0,0 +1,161 @@ +// This example illustrates how the vtkGdcmWriter vtk class can be +// used in order to: +// +// Usage: +// +//---------------------------------------------------------------------------- +#include + +#include +#include +#include + +#include "vtkGdcmReader.h" +#include "vtkGdcmWriter.h" + +#ifndef vtkFloatingPointType +#define vtkFloatingPointType float +#endif + +#include "gdcmArgMgr.h" // for Argument Manager functions + +//---------------------------------------------------------------------------- +int main(int argc, char *argv[]) +{ + START_USAGE(usage) + " \n vtkWriteDicomExtended : \n", + " Reads a DICOM file and re writes it according to user's requierements. ", + " ", + " usage: vtkWriteDicomExtended filein=dicom file to read ", + " [filecontent = ] [2D] ", + " [noshadowseq][noshadow][noseq] ", + " [debug] ", + " filecontent = 1 : USER_OWN_IMAGE ", + " = 2 : FILTERED_IMAGE ", + " = 3 : CREATED_IMAGE ", + " = 4 : UNMODIFIED_PIXELS_IMAGE ", + " noshadowseq: user doesn't want to load Private Sequences ", + " noshadow : user doesn't want to load Private groups (odd number) ", + " noseq : user doesn't want to load Sequences ", + " debug : user wants to run the program in 'debug mode' ", + FINISH_USAGE + + + // Initialize Arguments Manager + gdcm::ArgMgr *am= new gdcm::ArgMgr(argc, argv); + + if (argc == 1 || am->ArgMgrDefined("usage") ) + { + am->ArgMgrUsage(usage); // Display 'usage' + delete am; + return 0; + } + + int loadMode = gdcm::LD_ALL; + if ( am->ArgMgrDefined("noshadowseq") ) + loadMode |= gdcm::LD_NOSHADOWSEQ; + else + { + if ( am->ArgMgrDefined("noshadow") ) + loadMode |= gdcm::LD_NOSHADOW; + if ( am->ArgMgrDefined("noseq") ) + loadMode |= gdcm::LD_NOSEQ; + } + + int filecontent = am->ArgMgrGetInt("filecontent", 1); + + char *filein = am->ArgMgrWantString("filein",usage); + char *fileout = am->ArgMgrWantString("fileout",usage); + + if (am->ArgMgrDefined("debug")) + gdcm::Debug::DebugOn(); + + bool deuxD = am->ArgMgrDefined("2D"); + + /* if unused Param we give up */ + if ( am->ArgMgrPrintUnusedLabels() ) + { + am->ArgMgrUsage(usage); + delete am; + return 0; + } + +// ------------------------------------------------------------ + + vtkGdcmReader *reader = vtkGdcmReader::New(); + reader->AllowLookupTableOff(); + reader->SetFileName( argv[1] ); + reader->Update(); + + vtkImageData *output; + if( reader->GetLookupTable() ) + { + //convert to color: + vtkImageMapToColors *map = vtkImageMapToColors::New (); + map->SetInput (reader->GetOutput()); + map->SetLookupTable (reader->GetLookupTable()); + map->SetOutputFormatToRGB(); + output = map->GetOutput(); + map->Delete(); + } + else + { + output = reader->GetOutput(); + } + + //print debug info: + output->Print(cout); + + ////////////////////////////////////////////////////////// + // WRITE... + //if you wish you can export dicom to a vtk file + // this file will have the add of .tmp.dcm extention + + std::string fileName(filein); + vtkGdcmWriter *writer = vtkGdcmWriter::New(); + + switch (filecontent) + { + case 1: + writer->SetContentTypeToUserOwnImage(); + fileName = fileName + "_UserOwnImage.dcm"; + break; + + case 2: + writer->SetContentTypeToFilteredImage(); + fileName = fileName + "_FilteredImage.dcm"; + break; + + case 3: + writer->SetContentTypeToUserCreatedImage(); + fileName = fileName + "_FilteredImage.dcm"; + break; + + case 4: + writer->SetContentTypeToUserCreatedImage(); + fileName = fileName + "_UnmodifiedPixelsImage.dcm"; + break; + } + + fileName += ".dcm"; + + // For 3D + writer->SetFileDimensionality(3); + writer->SetFileName(fileName.c_str()); + if(deuxD) + { + writer->SetFileDimensionality(2); + writer->SetFilePrefix(fileout); + writer->SetFilePattern("%s%d.dcm"); + } + + writer->SetInput(output); + writer->Write(); + ////////////////////////////////////////////////////////// + + // Clean up + writer->Delete(); + reader->Delete(); + + return 0; +} -- 2.45.1