浏览代码

Precache all tags with a single load of the dataset

This change avoids doing a new load of the dataset for each tag
in the precache list.
Steve Pieper 12 年之前
父节点
当前提交
1cb4c934a7
共有 1 个文件被更改,包括 10 次插入1 次删除
  1. 10 1
      Libs/DICOM/Core/ctkDICOMDatabase.cpp

+ 10 - 1
Libs/DICOM/Core/ctkDICOMDatabase.cpp

@@ -1029,9 +1029,18 @@ const QStringList ctkDICOMDatabase::tagsToPrecache()
 void ctkDICOMDatabasePrivate::precacheTags( const QString sopInstanceUID )
 {
   Q_Q(ctkDICOMDatabase);
+
+  ctkDICOMDataset dataset;
+  QString fileName = q->fileForInstance(sopInstanceUID);
+  dataset.InitializeFromFile(fileName);
+
   foreach (const QString &tag, this->TagsToPrecache)
     {
-    q->instanceValue(sopInstanceUID, tag);
+    unsigned short group, element;
+    q->tagToGroupElement(tag, group, element);
+    DcmTagKey tagKey(group, element);
+    QString value = dataset.GetAllElementValuesAsString(tagKey);
+    q->cacheTag(sopInstanceUID, tag, value);
     }
 }