Add reset function to DicomLoader

This commit is contained in:
Krad
2022-03-03 14:05:52 +08:00
parent f308dee45e
commit f31e0857b7
2 changed files with 21 additions and 37 deletions

View File

@@ -50,16 +50,12 @@ public:
{
return m_patients;
}
SeriesImageSet* getSeriesImageSet(const std::string& uniqueID);
SeriesInfo_t* getSerieInfo(const std::string& seriesUnique);
//for export use
void getOpenedInstancesVec(InstancesVecType& retVec);
void reset();
private:
explicit DicomLoader();
~DicomLoader();

View File

@@ -128,12 +128,6 @@ DicomLoader::DicomLoader(){
}
DicomLoader::~DicomLoader() {
if (reader)reader->Delete();
reader = nullptr;
delete instance;
// for(auto item : imageProperties){
// item->UnRegister(&placeHolder);
// }
placeHolder->Delete();
imageProperties.clear();
}
@@ -162,38 +156,15 @@ SeriesImageSet* DicomLoader::getSeriesImageSet(const std::string& uniqueID)//, D
reader->SetFileNames(*(*iter)->GetFileNames());
reader->Update();
SeriesImageSet* result = new SeriesImageSet((*iter),reader->GetOutput());
auto imageData = reader->GetOutput();
SeriesImageSet* result = new SeriesImageSet((*iter),imageData);
// imageData->Register(placeHolder);
reader->Delete();
reader = nullptr;
store[uniqueID] = result;
return result;
}
void DicomLoader::getOpenedInstancesVec(InstancesVecType& retVec)
{
for (PatientsMapType::const_iterator cur_patient_iter = m_patients.begin(); cur_patient_iter !=
m_patients.end(); cur_patient_iter++)
{
StudiesMapType *cur_studies = cur_patient_iter->second->studies;
for (StudiesMapType::const_iterator cur_study_iter = cur_studies->begin(); cur_study_iter !=
cur_studies->end(); cur_study_iter++)
{
SeriesMapType *cur_series = cur_study_iter->second->series;
for (SeriesMapType::const_iterator cur_series_iter = cur_series->begin(); cur_series_iter !=
cur_series->end(); cur_series_iter++)
{
//default export instance: the recently added one
SeriesImageSet *last = cur_series_iter->second->instances->back();
if(nullptr!=last)
{
retVec.push_back(last);
}
}
}
}
}
SeriesInfo_t* DicomLoader::getSerieInfo(const std::string& seriesUnique)
{
@@ -369,3 +340,20 @@ void DicomLoader::readSeries() {
}
}
void DicomLoader::reset() {
currentImageProperty = nullptr;
reader = nullptr;
for(auto item: store){
delete item.second;
}
store.clear();
for(auto item: m_patients){
delete item.second;
}
m_patients.clear();
placeHolder->Delete();
placeHolder = vtkObject::New();
imageProperties.clear();
}