Browse Source

Refactor to allow loading dicom header by uid or filename

Allow flexibility for user of the class to go either through
the database or directly to the file.
Steve Pieper 14 years ago
parent
commit
868415cd40
2 changed files with 27 additions and 18 deletions
  1. 25 17
      Libs/DICOM/Core/ctkDICOMDatabase.cpp
  2. 2 1
      Libs/DICOM/Core/ctkDICOMDatabase.h

+ 25 - 17
Libs/DICOM/Core/ctkDICOMDatabase.cpp

@@ -272,7 +272,7 @@ QStringList ctkDICOMDatabase::filesForSeries(QString seriesUID)
 }
 
 //------------------------------------------------------------------------------
-void ctkDICOMDatabase::loadHeader (QString sopInstanceUID)
+void ctkDICOMDatabase::loadInstanceHeader (QString sopInstanceUID)
 {
   Q_D(ctkDICOMDatabase);
   QSqlQuery query(d->Database);
@@ -283,24 +283,32 @@ void ctkDICOMDatabase::loadHeader (QString sopInstanceUID)
   if (query.next())
     {
     QString fileName = query.value(0).toString();
-    DcmFileFormat fileFormat;
-    OFCondition status = fileFormat.loadFile(fileName.toLatin1().data());
-    if (status.good())
+    this->loadFileHeader(fileName);
+    }
+  return;
+}
+
+//------------------------------------------------------------------------------
+void ctkDICOMDatabase::loadFileHeader (QString fileName)
+{
+  Q_D(ctkDICOMDatabase);
+  DcmFileFormat fileFormat;
+  OFCondition status = fileFormat.loadFile(fileName.toLatin1().data());
+  if (status.good())
+    {
+    DcmDataset *dataset = fileFormat.getDataset();
+    DcmStack stack;
+    while (dataset->nextObject(stack, true) == EC_Normal)
       {
-      DcmDataset *dataset = fileFormat.getDataset();
-      DcmStack stack;
-      while (dataset->nextObject(stack, true) == EC_Normal)
+      DcmObject *dO = stack.top();
+      if (dO->isaString())
         {
-        DcmObject *dO = stack.top();
-        if (dO->isaString())
-          {
-          QString tag = QString("%1,%2").arg(
-              dO->getGTag(),4,16,QLatin1Char('0')).arg(
-              dO->getETag(),4,16,QLatin1Char('0'));
-          std::ostringstream s;
-          dO->print(s);
-          d->LoadedHeader[tag] = QString(s.str().c_str());
-          }
+        QString tag = QString("%1,%2").arg(
+            dO->getGTag(),4,16,QLatin1Char('0')).arg(
+            dO->getETag(),4,16,QLatin1Char('0'));
+        std::ostringstream s;
+        dO->print(s);
+        d->LoadedHeader[tag] = QString(s.str().c_str());
         }
       }
     }

+ 2 - 1
Libs/DICOM/Core/ctkDICOMDatabase.h

@@ -69,7 +69,8 @@ public:
 
   ///
   /// \brief load the header from a file and allow access to elements
-  Q_INVOKABLE void loadHeader (QString sopInstanceUID);
+  Q_INVOKABLE void loadInstanceHeader (QString sopInstanceUID);
+  Q_INVOKABLE void loadFileHeader (QString fileName);
   Q_INVOKABLE QStringList headerKeys ();
   Q_INVOKABLE QString headerValue (QString key);