Selaa lähdekoodia

Changed ctkDICOMDataset to use DcmItem instead of DcmDataset

This commit contains only the necessary changes to enable an insert
of DcmItem into the database. The class should also be renamed to reflect
the change.
Marco Nolden 12 vuotta sitten
vanhempi
commit
088af316b1

+ 1 - 1
Libs/DICOM/Core/Testing/Cpp/ctkDICOMDatasetTest1.cpp

@@ -29,7 +29,7 @@ int ctkDICOMDatasetTest1( int argc, char * argv [] )
   Q_UNUSED(argc);
   Q_UNUSED(argc);
   Q_UNUSED(argv);
   Q_UNUSED(argv);
   ctkDICOMDataset dataset;
   ctkDICOMDataset dataset;
-  dataset.InitializeFromDataset(0);
+  dataset.InitializeFromItem(0);
   dataset.InitializeFromFile(QString());
   dataset.InitializeFromFile(QString());
   try
   try
     {
     {

+ 3 - 3
Libs/DICOM/Core/ctkDICOMDatabase.cpp

@@ -849,14 +849,14 @@ QString ctkDICOMDatabase::groupElementToTag(const unsigned short& group, const u
 //
 //
 
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
-void ctkDICOMDatabase::insert( DcmDataset *dataset, bool storeFile, bool generateThumbnail)
+void ctkDICOMDatabase::insert( DcmItem *item, bool storeFile, bool generateThumbnail)
 {
 {
-  if (!dataset)
+  if (!item)
     {
     {
       return;
       return;
     }
     }
   ctkDICOMDataset ctkDataset;
   ctkDICOMDataset ctkDataset;
-  ctkDataset.InitializeFromDataset(dataset, false /* do not take ownership */);
+  ctkDataset.InitializeFromItem(item, false /* do not take ownership */);
   this->insert(ctkDataset,storeFile,generateThumbnail);
   this->insert(ctkDataset,storeFile,generateThumbnail);
 }
 }
 void ctkDICOMDatabase::insert( const ctkDICOMDataset& ctkDataset, bool storeFile, bool generateThumbnail)
 void ctkDICOMDatabase::insert( const ctkDICOMDataset& ctkDataset, bool storeFile, bool generateThumbnail)

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

@@ -179,7 +179,7 @@ public:
   ///
   ///
   Q_INVOKABLE void insert( const ctkDICOMDataset& ctkDataset,
   Q_INVOKABLE void insert( const ctkDICOMDataset& ctkDataset,
                               bool storeFile, bool generateThumbnail);
                               bool storeFile, bool generateThumbnail);
-  void insert ( DcmDataset *dataset,
+  void insert ( DcmItem *item,
                               bool storeFile = true, bool generateThumbnail = true);
                               bool storeFile = true, bool generateThumbnail = true);
   Q_INVOKABLE void insert ( const QString& filePath,
   Q_INVOKABLE void insert ( const QString& filePath,
                             bool storeFile = true, bool generateThumbnail = true,
                             bool storeFile = true, bool generateThumbnail = true,

+ 34 - 29
Libs/DICOM/Core/ctkDICOMDataset.cpp

@@ -32,14 +32,14 @@ class ctkDICOMDatasetPrivate
 {
 {
   public:
   public:
 
 
-    ctkDICOMDatasetPrivate() : m_DcmDataset(0), m_TakeOwnership(true) {}
+    ctkDICOMDatasetPrivate() : m_DcmItem(0), m_TakeOwnership(true) {}
 
 
     QString m_SpecificCharacterSet;
     QString m_SpecificCharacterSet;
 
 
     bool m_DICOMDataSetInitialized;
     bool m_DICOMDataSetInitialized;
     bool m_StrictErrorHandling;
     bool m_StrictErrorHandling;
 
 
-    DcmDataset* m_DcmDataset;
+    DcmItem* m_DcmItem;
     bool m_TakeOwnership;
     bool m_TakeOwnership;
 };
 };
 
 
@@ -48,7 +48,7 @@ ctkDICOMDataset::ctkDICOMDataset(bool strictErrorHandling)
 :d_ptr(new ctkDICOMDatasetPrivate)
 :d_ptr(new ctkDICOMDatasetPrivate)
 {
 {
   Q_D(ctkDICOMDataset);
   Q_D(ctkDICOMDataset);
-  d->m_DcmDataset = new DcmDataset();
+  d->m_DcmItem = new DcmDataset();
   d->m_TakeOwnership = true;
   d->m_TakeOwnership = true;
   d->m_DICOMDataSetInitialized = false;
   d->m_DICOMDataSetInitialized = false;
   d->m_StrictErrorHandling = strictErrorHandling;
   d->m_StrictErrorHandling = strictErrorHandling;
@@ -59,27 +59,27 @@ ctkDICOMDataset::~ctkDICOMDataset()
   Q_D(ctkDICOMDataset);
   Q_D(ctkDICOMDataset);
   if ( d->m_TakeOwnership)
   if ( d->m_TakeOwnership)
   {
   {
-    delete d->m_DcmDataset;
+    delete d->m_DcmItem;
   }
   }
 }
 }
 
 
 
 
-void ctkDICOMDataset::InitializeFromDataset(DcmDataset* dataset, bool takeOwnership)
+void ctkDICOMDataset::InitializeFromItem(DcmItem *dataset, bool takeOwnership)
 {
 {
   Q_D(ctkDICOMDataset);
   Q_D(ctkDICOMDataset);
 
 
-  if(d->m_DcmDataset != dataset)
+  if(d->m_DcmItem != dataset)
   {
   {
     if (d->m_TakeOwnership)
     if (d->m_TakeOwnership)
     {
     {
-      delete d->m_DcmDataset;
+      delete d->m_DcmItem;
     }
     }
-    d->m_DcmDataset = NULL;
+    d->m_DcmItem = NULL;
   }
   }
 
 
   if (dataset)
   if (dataset)
   {
   {
-    d->m_DcmDataset=dataset;
+    d->m_DcmItem=dataset;
     d->m_TakeOwnership = takeOwnership;
     d->m_TakeOwnership = takeOwnership;
     if (!d->m_DICOMDataSetInitialized)
     if (!d->m_DICOMDataSetInitialized)
     {
     {
@@ -125,7 +125,7 @@ void ctkDICOMDataset::InitializeFromFile(const QString& filename,
     return;
     return;
   }
   }
 
 
-  InitializeFromDataset(dataset, true);
+  InitializeFromItem(dataset, true);
 }
 }
 
 
 void ctkDICOMDataset::Serialize()
 void ctkDICOMDataset::Serialize()
@@ -139,9 +139,9 @@ void ctkDICOMDataset::Serialize()
 
 
   // write into buffer
   // write into buffer
   DcmOutputBufferStream dcmbuffer(writebuffer, buffersize);
   DcmOutputBufferStream dcmbuffer(writebuffer, buffersize);
-  d->m_DcmDataset->transferInit();
-  OFCondition condition = d->m_DcmDataset->write(dcmbuffer, EXS_LittleEndianImplicit, EET_UndefinedLength, NULL );
-  d->m_DcmDataset->transferEnd();
+  d->m_DcmItem->transferInit();
+  OFCondition condition = d->m_DcmItem->write(dcmbuffer, EXS_LittleEndianImplicit, EET_UndefinedLength, NULL );
+  d->m_DcmItem->transferEnd();
   if ( condition.bad() )
   if ( condition.bad() )
   {
   {
     std::cerr << "Could not DcmDataset::write(..): " << condition.text() << std::endl;
     std::cerr << "Could not DcmDataset::write(..): " << condition.text() << std::endl;
@@ -221,7 +221,7 @@ void ctkDICOMDataset::Deserialize()
   dataset.transferEnd();
   dataset.transferEnd();
 
 
   // do this in all cases, even when reading reported an error
   // do this in all cases, even when reading reported an error
-  this->InitializeFromDataset(&dataset);
+  this->InitializeFromItem(&dataset);
 
 
   if ( condition.bad() )
   if ( condition.bad() )
   {
   {
@@ -240,24 +240,24 @@ void ctkDICOMDataset::Deserialize()
   }
   }
 }
 }
 
 
-DcmDataset& ctkDICOMDataset::GetDcmDataset() const
+DcmItem& ctkDICOMDataset::GetDcmItem() const
 {
 {
   const Q_D(ctkDICOMDataset);
   const Q_D(ctkDICOMDataset);
-  return *d->m_DcmDataset;
+  return *d->m_DcmItem;
 }
 }
 
 
 OFCondition ctkDICOMDataset::findAndGetElement(const DcmTag& tag, DcmElement*& element, const OFBool searchIntoSub) const
 OFCondition ctkDICOMDataset::findAndGetElement(const DcmTag& tag, DcmElement*& element, const OFBool searchIntoSub) const
 {
 {
   EnsureDcmDataSetIsInitialized();
   EnsureDcmDataSetIsInitialized();
   // this one const_cast allows us to declare quite a lot of methods nicely with const
   // this one const_cast allows us to declare quite a lot of methods nicely with const
-  return GetDcmDataset().findAndGetElement(tag, element, searchIntoSub);
+  return GetDcmItem().findAndGetElement(tag, element, searchIntoSub);
 }
 }
 
 
 OFCondition ctkDICOMDataset::findAndGetOFString(const DcmTag& tag, OFString& value, const unsigned long pos, const OFBool searchIntoSub) const
 OFCondition ctkDICOMDataset::findAndGetOFString(const DcmTag& tag, OFString& value, const unsigned long pos, const OFBool searchIntoSub) const
 {
 {
   EnsureDcmDataSetIsInitialized();
   EnsureDcmDataSetIsInitialized();
   // this second const_cast allows us to declare quite a lot of methods nicely with const
   // this second const_cast allows us to declare quite a lot of methods nicely with const
-  return GetDcmDataset().findAndGetOFString(tag, value, pos, searchIntoSub);
+  return GetDcmItem().findAndGetOFString(tag, value, pos, searchIntoSub);
 }
 }
 
 
 bool ctkDICOMDataset::CheckCondition(const OFCondition& condition)
 bool ctkDICOMDataset::CheckCondition(const OFCondition& condition)
@@ -292,7 +292,7 @@ bool ctkDICOMDataset::CopyElement( DcmDataset* dataset, const DcmTagKey& tag, in
   bool copied(true);
   bool copied(true);
 
 
   if (!dataset) return false;
   if (!dataset) return false;
-  if (dataset == d->m_DcmDataset)
+  if (dataset == d->m_DcmItem)
   {
   {
     throw std::logic_error("Trying to copy tag to yourself. Please check application logic!"); 
     throw std::logic_error("Trying to copy tag to yourself. Please check application logic!"); 
   }
   }
@@ -316,7 +316,7 @@ bool ctkDICOMDataset::CopyElement( DcmDataset* dataset, const DcmTagKey& tag, in
     dataset->findAndGetElement( tag, element, OFFalse, OFTrue ); // OFTrue is important (copies element), DcmDataset takes ownership and deletes elements on its own destruction
     dataset->findAndGetElement( tag, element, OFFalse, OFTrue ); // OFTrue is important (copies element), DcmDataset takes ownership and deletes elements on its own destruction
     if (element)
     if (element)
     {
     {
-      copied = CheckCondition( d->m_DcmDataset->insert(element) );
+      copied = CheckCondition( d->m_DcmItem->insert(element) );
     }
     }
   }
   }
 
 
@@ -692,7 +692,7 @@ bool ctkDICOMDataset::SetElementAsString( const DcmTag& tag, QString string )
   Q_D(ctkDICOMDataset);
   Q_D(ctkDICOMDataset);
   this->EnsureDcmDataSetIsInitialized();
   this->EnsureDcmDataSetIsInitialized();
   // TODO: Evaluate DICOM tag for proper encoding (see GetElementAsString())
   // TODO: Evaluate DICOM tag for proper encoding (see GetElementAsString())
-  return CheckCondition( d->m_DcmDataset->putAndInsertString( tag, string.toLatin1().data() ) );
+  return CheckCondition( d->m_DcmItem->putAndInsertString( tag, string.toLatin1().data() ) );
 }
 }
 
 
 bool ctkDICOMDataset::SetElementAsStringList( const DcmTag& /*tag*/, QStringList /*stringList*/ )
 bool ctkDICOMDataset::SetElementAsStringList( const DcmTag& /*tag*/, QStringList /*stringList*/ )
@@ -716,7 +716,7 @@ bool ctkDICOMDataset::SetElementAsPersonName( const DcmTag& tag, ctkDICOMPersonN
     Encode( tag, personName.namePrefix() ),
     Encode( tag, personName.namePrefix() ),
     Encode( tag, personName.nameSuffix() ) ) ) )
     Encode( tag, personName.nameSuffix() ) ) ) )
   {
   {
-    return CheckCondition( d->m_DcmDataset->insert( dcmPersonName ) );
+    return CheckCondition( d->m_DcmItem->insert( dcmPersonName ) );
   }
   }
 
 
   return false;
   return false;
@@ -741,7 +741,7 @@ bool ctkDICOMDataset::SetElementAsDate( const DcmTag& tag, QDate date )
 
 
   if ( CheckCondition( dcmDate->setOFDate( ofDate ) ) )
   if ( CheckCondition( dcmDate->setOFDate( ofDate ) ) )
   {
   {
-    return CheckCondition( d->m_DcmDataset->insert( dcmDate ) );
+    return CheckCondition( d->m_DcmItem->insert( dcmDate ) );
   }
   }
 
 
   return false;
   return false;
@@ -756,7 +756,7 @@ bool ctkDICOMDataset::SetElementAsTime( const DcmTag& tag, QTime time )
 
 
   if ( CheckCondition( dcmTime->setOFTime( ofTime ) ) )
   if ( CheckCondition( dcmTime->setOFTime( ofTime ) ) )
   {
   {
-    return CheckCondition( d->m_DcmDataset->insert( dcmTime ) );
+    return CheckCondition( d->m_DcmItem->insert( dcmTime ) );
   }
   }
 
 
   return false;
   return false;
@@ -775,7 +775,7 @@ bool ctkDICOMDataset::SetElementAsDateTime( const DcmTag& tag, QDateTime dateTim
 
 
   if ( CheckCondition( dcmDateTime->setOFDateTime( ofDateTime ) ) )
   if ( CheckCondition( dcmDateTime->setOFDateTime( ofDateTime ) ) )
   {
   {
-    return CheckCondition( d->m_DcmDataset->insert( dcmDateTime ) );
+    return CheckCondition( d->m_DcmItem->insert( dcmDateTime ) );
   }
   }
 
 
   return false;
   return false;
@@ -786,7 +786,7 @@ bool ctkDICOMDataset::SetElementAsInteger( const DcmTag& tag, long value, unsign
   Q_D(ctkDICOMDataset);
   Q_D(ctkDICOMDataset);
   this->EnsureDcmDataSetIsInitialized();
   this->EnsureDcmDataSetIsInitialized();
   //std::cerr << "TagVR: " << TagVR( tag ).toStdString() << std::endl;
   //std::cerr << "TagVR: " << TagVR( tag ).toStdString() << std::endl;
-  return CheckCondition( d->m_DcmDataset->putAndInsertSint32( tag, value, pos ) );
+  return CheckCondition( d->m_DcmItem->putAndInsertSint32( tag, value, pos ) );
 }
 }
 
 
 bool ctkDICOMDataset::SetElementAsSignedShort( const DcmTag& tag, int value, unsigned long pos )
 bool ctkDICOMDataset::SetElementAsSignedShort( const DcmTag& tag, int value, unsigned long pos )
@@ -794,7 +794,7 @@ bool ctkDICOMDataset::SetElementAsSignedShort( const DcmTag& tag, int value, uns
   Q_D(ctkDICOMDataset);
   Q_D(ctkDICOMDataset);
   this->EnsureDcmDataSetIsInitialized();
   this->EnsureDcmDataSetIsInitialized();
   //std::cerr << "TagVR: " << TagVR( tag ).toStdString() << std::endl;
   //std::cerr << "TagVR: " << TagVR( tag ).toStdString() << std::endl;
-  return CheckCondition( d->m_DcmDataset->putAndInsertSint16( tag, value, pos ) );
+  return CheckCondition( d->m_DcmItem->putAndInsertSint16( tag, value, pos ) );
 }
 }
 
 
 bool ctkDICOMDataset::SetElementAsUnsignedShort( const DcmTag& tag, int value, unsigned long pos )
 bool ctkDICOMDataset::SetElementAsUnsignedShort( const DcmTag& tag, int value, unsigned long pos )
@@ -802,7 +802,7 @@ bool ctkDICOMDataset::SetElementAsUnsignedShort( const DcmTag& tag, int value, u
   Q_D(ctkDICOMDataset);
   Q_D(ctkDICOMDataset);
   this->EnsureDcmDataSetIsInitialized();
   this->EnsureDcmDataSetIsInitialized();
   //std::cerr << "TagVR: " << TagVR( tag ).toStdString() << std::endl;
   //std::cerr << "TagVR: " << TagVR( tag ).toStdString() << std::endl;
-  return CheckCondition( d->m_DcmDataset->putAndInsertUint16( tag, value, pos ) );
+  return CheckCondition( d->m_DcmItem->putAndInsertUint16( tag, value, pos ) );
 }
 }
 
 
 QString ctkDICOMDataset::GetStudyInstanceUID() const
 QString ctkDICOMDataset::GetStudyInstanceUID() const
@@ -984,7 +984,12 @@ void ctkDICOMDataset::SetStoredSerialization(QString serializedDataset)
 bool ctkDICOMDataset::SaveToFile(const QString& filePath) const
 bool ctkDICOMDataset::SaveToFile(const QString& filePath) const
 {
 {
   Q_D(const ctkDICOMDataset);
   Q_D(const ctkDICOMDataset);
-  DcmFileFormat* fileformat = new DcmFileFormat ( d->m_DcmDataset );
+
+  if (! dynamic_cast<DcmDataset*>(d->m_DcmItem) )
+  {
+    return false;
+  }
+  DcmFileFormat* fileformat = new DcmFileFormat ( dynamic_cast<DcmDataset*>(d->m_DcmItem) );
   OFCondition status = fileformat->saveFile ( qPrintable(QDir::toNativeSeparators( filePath)) );
   OFCondition status = fileformat->saveFile ( qPrintable(QDir::toNativeSeparators( filePath)) );
   delete fileformat;
   delete fileformat;
   return status.good();
   return status.good();

+ 2 - 2
Libs/DICOM/Core/ctkDICOMDataset.h

@@ -78,7 +78,7 @@ public:
     /// should copy information from a DcmDataset object.
     /// should copy information from a DcmDataset object.
 
 
     /// \warning Derived classes must call PDICOMDataset::InitializeFromDataset(...) to correctly copy encoding information.
     /// \warning Derived classes must call PDICOMDataset::InitializeFromDataset(...) to correctly copy encoding information.
-    virtual void InitializeFromDataset(DcmDataset* dataset, bool takeOwnership = false);
+    virtual void InitializeFromItem(DcmItem* dataset, bool takeOwnership = false);
 
 
     ///
     ///
     /// \brief For initialization from file in a constructor / assignment.
     /// \brief For initialization from file in a constructor / assignment.
@@ -250,7 +250,7 @@ protected:
 
 
   QScopedPointer<ctkDICOMDatasetPrivate> d_ptr;
   QScopedPointer<ctkDICOMDatasetPrivate> d_ptr;
 
 
-  DcmDataset& GetDcmDataset() const;
+  DcmItem& GetDcmItem() const;
 
 
 private:
 private:
   Q_DECLARE_PRIVATE(ctkDICOMDataset);
   Q_DECLARE_PRIVATE(ctkDICOMDataset);