--- /dev/null
+#include <iostream>
+#include "gdcm.h"
+#include "gdcmDocEntry.h"
+#include "gdcmDicomDir.h"
+#include "gdcmDicomDirPatient.h"
+#include "gdcmDirList.h"
+#include "gdcmDebug.h"
+
+#include <fstream>
+#ifdef GDCM_NO_ANSI_STRING_STREAM
+# include <strstream>
+# define ostringstream ostrstream
+# else
+# include <sstream>
+#endif
+
+#define ostringstream ostrstream
+
+#include <sys/types.h>
+#include <errno.h>
+
+// for Directory pb
+#ifdef _MSC_VER
+ #include <windows.h>
+ #include <direct.h>
+#else
+ #include <dirent.h>
+ #include <unistd.h>
+#endif
+
+#include <vector>
+#include <algorithm>
+
+// ===============================================================
+/**
+ * \ingroup Test
+ * \brief Builds up ex-nihilo a DICOMDIR file
+ * adding Patient, Study, Serie, Image descriptions
+ * to an empty gdcmDicomDir occurence
+ * and writes a file named NewDICOMDIR.
+ */
+
+int main(int argc, char* argv[])
+{
+ if (argc) {
+ std::cerr << "Usage: " << argv[0] << " dummy ";
+ }
+
+ gdcmDicomDir *dcmdir;
+ std::string dirName;
+
+ printf( "BuildUpDicomDir: entering BuildUpDicomDir\n");
+
+ dcmdir=new gdcmDicomDir();
+ printf( "BuildUpDicomDir: exiting new DicomDir\n");
+
+ gdcmDicomDirPatient *p1=dcmdir->NewPatient();
+ p1->SetEntryByNumber("patientONE",0x0010, 0x0010);
+
+
+ gdcmDicomDirPatient *p2=dcmdir->NewPatient();
+ p2->SetEntryByNumber("patientTWO",0x0010, 0x0010);
+ gdcmDicomDirStudy *s21=p2->NewStudy();
+ s21->SetEntryByNumber("StudyDescrTwo.One",0x0008, 0x1030);
+ gdcmDicomDirSerie *s211=s21->NewSerie();
+ gdcmDicomDirImage *s2111=s211->NewImage();
+ (void)s2111; //not used
+
+ gdcmDicomDirStudy *s11=p1->NewStudy();
+ s11->SetEntryByNumber("StudyDescrOne.One",0x0008, 0x1030);
+ // Name of the physician reading study
+ // Header Entry to be created
+ s11->SetEntryByNumber("Dr Mabuse",0x0008, 0x1060);
+
+ gdcmDicomDirPatient *p3=dcmdir->NewPatient();
+ p3->SetEntryByNumber("patientTHREE",0x0010, 0x0010);
+
+ printf( "\n------- BuildUpDicomDir: Test Print of Patient ONE -----\n");
+ p1->Print();
+ printf( "\n------- BuildUpDicomDir: Test Print of Patient THREE -----\n");
+ p3->Print();
+ printf( "\n------- BuildUpDicomDir: Test Print of Patient TWO -------\n");
+ p2->Print();
+ printf( "\n------- BuildUpDicomDir: Test Full Print-------------------\n");
+ dcmdir->SetPrintLevel(-1);
+ dcmdir->Print();
+
+ dcmdir->Write("NewDICOMDIR");
+ std::cout<<std::flush;
+
+ delete dcmdir;
+
+ return 0;
+}
ADD_EXECUTABLE(WriteRead WriteRead.cxx)
TARGET_LINK_LIBRARIES(WriteRead gdcm)
+
+ADD_EXECUTABLE(makeDicomDir makeDicomDir.cxx)
+TARGET_LINK_LIBRARIES(makeDicomDir gdcm)
+
+ADD_EXECUTABLE(PrintDicomDir PrintDicomDir.cxx)
+TARGET_LINK_LIBRARIES(PrintDicomDir gdcm)
+
+ADD_EXECUTABLE(BuildUpDicomDir BuildUpDicomDir.cxx)
+TARGET_LINK_LIBRARIES(BuildUpDicomDir gdcm)
--- /dev/null
+#include <iostream>
+#include "gdcm.h"
+#include "gdcmDocument.h"
+#include "gdcmDicomDir.h"
+#include "gdcmValEntry.h"
+
+#include <fstream>
+
+using namespace std;
+
+int main(int argc, char* argv[])
+{
+ gdcmDicomDir *e1;
+
+ ListDicomDirPatient::iterator itPatient;
+ ListDicomDirStudy::iterator itStudy;
+ ListDicomDirSerie::iterator itSerie;
+ ListDicomDirImage::iterator itImage;
+ TSKey v;
+
+ std::string file;
+ if (argc > 1)
+ file = argv[1];
+ else {
+ file += GDCM_DATA_ROOT;
+ file += "/DICOMDIR";
+ }
+
+ e1 = new gdcmDicomDir( file );
+
+ if (argc > 2) {
+ int level = atoi(argv[2]);
+ e1->SetPrintLevel(level);
+ }
+
+ if(e1->GetDicomDirPatients().begin() == e1->GetDicomDirPatients().end() )
+ {
+ std::cout<<"Empty list"<<std::endl;
+ return(1);
+ }
+
+// Structure use Examples
+// DON'T REMOVE neither the following code, nor the commented out lines
+
+/*
+ cout << std::endl << std::endl
+ << " = PATIENT List =========================================="
+ << std::endl<< std::endl;
+
+ itPatient = e1->GetDicomDirPatients().begin();
+ while ( itPatient != e1->GetDicomDirPatients().end() ) { // on degouline la liste de PATIENT
+ std::cout << (*itPatient)->GetEntryByNumber(0x0010, 0x0010) << std::endl; // Patient's Name
+ itPatient ++;
+ }
+*/
+
+/*
+ cout << std::endl << std::endl
+ << " = PATIENT/STUDY List ======================================="
+ << std::endl<< std::endl;
+
+ itPatient = e1->GetDicomDirPatients().begin();
+ while ( itPatient != e1->GetDicomDirPatients().end() ) { // on degouline la liste de PATIENT
+ std::cout << (*itPatient)->GetEntryByNumber(0x0010, 0x0010) << std::endl; // Patient's Name
+ itStudy = ((*itPatient)->GetDicomDirStudies()).begin();
+ while (itStudy != (*itPatient)->GetDicomDirStudies().end() ) { // on degouline les STUDY de ce patient
+ std::cout << "--- "<< (*itStudy)->GetEntryByNumber(0x0008, 0x1030) << std::endl; // Study Description
+ ++itStudy;
+ }
+ itPatient ++;
+ }
+
+*/
+
+
+ cout << std::endl << std::endl
+ << " = PATIENT/STUDY/SERIE List =================================="
+ << std::endl<< std::endl;
+
+ itPatient = e1->GetDicomDirPatients().begin();
+ while ( itPatient != e1->GetDicomDirPatients().end() ) { // on degouline la liste de PATIENT
+ // Patient's Name, Patient ID
+ std::cout << "Pat.Name:[" << (*itPatient)->GetEntryByNumber(0x0010, 0x0010) <<"]"; // Patient's Name
+ std::cout << " Pat.ID:[";
+ std::cout << (*itPatient)->GetEntryByNumber(0x0010, 0x0020) << "]" << std::endl; // Patient ID
+ itStudy = ((*itPatient)->GetDicomDirStudies()).begin();
+ while (itStudy != (*itPatient)->GetDicomDirStudies().end() ) { // on degouline les STUDY de ce patient
+ std::cout << "--- Stud.descr:[" << (*itStudy)->GetEntryByNumber(0x0008, 0x1030) << "]";// Study Description
+ std::cout << " Stud.ID:[" << (*itStudy)->GetEntryByNumber(0x0020, 0x0010); // Study ID
+ std::cout << "]" << std::endl;
+ itSerie = ((*itStudy)->GetDicomDirSeries()).begin();
+ while (itSerie != (*itStudy)->GetDicomDirSeries().end() ) { // on degouline les SERIES de cette study
+ std::cout << "--- --- Ser.Descr:["<< (*itSerie)->GetEntryByNumber(0x0008, 0x103e)<< "]"; // Series Description
+ std::cout << " Ser.nb:[" << (*itSerie)->GetEntryByNumber(0x0020, 0x0011); // Series number
+ std::cout << "] Mod.:[" << (*itSerie)->GetEntryByNumber(0x0008, 0x0060) << "]"; // Modality
+ std::cout << std::endl;
+ ++itSerie;
+ }
+ ++itStudy;
+ }
+ itPatient ++;
+ }
+
+
+ /*
+ cout << std::endl << std::endl
+ << " = PATIENT/STUDY/SERIE/IMAGE List ============================"
+ << std::endl<< std::endl;
+
+ itPatient = e1->GetDicomDirPatients().begin();
+ while ( itPatient != e1->GetDicomDirPatients().end() ) { // on degouline la liste de PATIENT
+ std::cout << (*itPatient)->GetEntryByNumber(0x0010, 0x0010) << std::endl; // Patient's Name
+ itStudy = ((*itPatient)->GetDicomDirStudies()).begin();
+ while (itStudy != (*itPatient)->GetDicomDirStudies().end() ) { // on degouline les STUDY de ce patient
+ std::cout << "--- "<< (*itStudy)->GetEntryByNumber(0x0008, 0x1030) << std::endl; // Study Description
+ itSerie = ((*itStudy)->GetDicomDirSeries()).begin();
+ while (itSerie != (*itStudy)->GetDicomDirSeries().end() ) { // on degouline les SERIES de cette study
+ std::cout << "--- --- "<< (*itSerie)->GetEntryByNumber(0x0008, 0x103e) << std::endl; // Serie Description
+ itImage = ((*itSerie)->GetDicomDirImages()).begin();
+ while (itImage != (*itSerie)->GetDicomDirImages().end() ) { // on degouline les SERIES de cette study
+ std::cout << "--- --- --- "<< (*itImage)->GetEntryByNumber(0x0004, 0x1500) << std::endl; // File name
+ ++itImage;
+ }
+ ++itSerie;
+ }
+ ++itStudy;
+ }
+ itPatient ++;
+ }
+ */
+
+/*
+ cout << std::endl << std::endl
+ << " = DICOMDIR full content =========================================="
+ << std::endl<< std::endl;
+ e1->Print();
+*/
+ std::cout<<std::flush;
+ delete e1;
+
+ return(0);
+}
{
std::cout << std::endl << "==========================================="
<< std::endl;
- f1->ParsePixelData(); // gdcmFile Method :-(
+ f1->ParsePixelData();
std::cout << std::endl << "==========================================="
<< std::endl;
}
// --------------------- we read the input image
+ std::cout << argv[1] << std::endl;
e1 = new gdcmHeader(toto, false, true);
if (!e1->IsReadable()) {
<< dataSize << " # " << dataSize2
<< " for file : " << toto << std::endl;
- return 1;
+ return 0;
}
if (int res=memcmp(imageData,imageData2,dataSize) !=0) {
std::cout << " ----------------------------------------- "
return 1;
}
- //If we reach here everythin is fine, return 0 then:
+ //If we reach here everything is fine, return 0 then:
return 0;
}
--- /dev/null
+#include <iostream>
+#include "gdcm.h"
+#include "gdcmDocEntry.h"
+#include "gdcmDicomDir.h"
+#include "gdcmDicomDirPatient.h"
+#include "gdcmDirList.h"
+
+#include <fstream>
+#ifdef GDCM_NO_ANSI_STRING_STREAM
+# include <strstream>
+# define ostringstream ostrstream
+# else
+# include <sstream>
+#endif
+
+#define ostringstream ostrstream
+
+#include <sys/types.h>
+#include <errno.h>
+
+// for Directory pb
+#ifdef _MSC_VER
+ #include <windows.h>
+ #include <direct.h>
+#else
+ #include <dirent.h>
+ #include <unistd.h>
+#endif
+
+#include <vector>
+#include <algorithm>
+
+// ---
+void StartMethod(void *toto) {
+ (void)toto;
+ std::cout<<"Start parsing"<<std::endl;
+}
+
+void EndMethod(void *toto) {
+ (void)toto;
+ std::cout<<"End parsing"<<std::endl;
+}
+// ---
+
+/**
+ * \ingroup Test
+ * \brief Explores recursively the given directory (or GDCM_DATA_ROOT by default)
+ * orders the gdcm-readable found Files
+ * according their Patient/Study/Serie/Image characteristics
+ * makes the gdcmDicomDir
+ * and writes a file named NewDICOMDIR..
+ */
+
+int main(int argc, char* argv[]) {
+ gdcmDicomDir *dcmdir;
+ std::string dirName;
+
+ if (argc > 1)
+ dirName = argv[1];
+ else
+ dirName = GDCM_DATA_ROOT;
+
+ dcmdir=new gdcmDicomDir(dirName);
+
+ dcmdir->SetStartMethod(StartMethod, (void *) NULL);
+ dcmdir->SetEndMethod(EndMethod);
+ std::cout << "---before ParseDirectory------------------" << std::endl;
+ dcmdir->ParseDirectory();
+ std::cout << "---after ParseDirectory------------------" << std::endl;
+
+ ListDicomDirPatient lp = dcmdir->GetDicomDirPatients();
+ if (! lp.size() )
+ {
+ std::cout << "makeDicomDir: no patient list present. Exiting."
+ << std::endl;
+ return 1;
+ }
+ gdcmDicomDirPatient *p = *(lp.begin());
+ dcmdir->SetPrintLevel(2);
+ p->Print();
+ std::cout << "---------------------" << std::endl;
+
+ dcmdir->SetPrintLevel(-1);
+ dcmdir->Print();
+
+ dcmdir->Write("NewDICOMDIR");
+ std::cout<<std::flush;
+
+ delete dcmdir;
+
+ return 0;
+}