Bläddra i källkod

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 år sedan
förälder
incheckning
868415cd40
2 ändrade filer med 27 tillägg och 18 borttagningar
  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);