Explorar el Código

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 hace 14 años
padre
commit
868415cd40
Se han modificado 2 ficheros con 27 adiciones y 18 borrados
  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);