fix: fix Volume measure selected delete bug

This commit is contained in:
kradchen
2025-07-22 15:58:40 +08:00
parent f718b2c919
commit fe34280471
4 changed files with 17 additions and 15 deletions

View File

@@ -29,6 +29,9 @@ EllipsoidVolumeAnnotationActor::EllipsoidVolumeAnnotationActor() : DraggableActo
mRuler1->SetDistanceName(mRuler1->GetDistanceName()+"1"); mRuler1->SetDistanceName(mRuler1->GetDistanceName()+"1");
mRuler2->SetDistanceName(mRuler2->GetDistanceName()+"2"); mRuler2->SetDistanceName(mRuler2->GetDistanceName()+"2");
mRuler3->SetDistanceName(mRuler3->GetDistanceName()+"3"); mRuler3->SetDistanceName(mRuler3->GetDistanceName()+"3");
mRuler1->SetcontrolledActor(this);
mRuler2->SetcontrolledActor(this);
mRuler3->SetcontrolledActor(this);
mRuler1->AddObserver(MeasureChangedEvent,this,&EllipsoidVolumeAnnotationActor::measureCallback); mRuler1->AddObserver(MeasureChangedEvent,this,&EllipsoidVolumeAnnotationActor::measureCallback);
mRuler2->AddObserver(MeasureChangedEvent,this,&EllipsoidVolumeAnnotationActor::measureCallback); mRuler2->AddObserver(MeasureChangedEvent,this,&EllipsoidVolumeAnnotationActor::measureCallback);
mRuler3->AddObserver(MeasureChangedEvent,this,&EllipsoidVolumeAnnotationActor::measureCallback); mRuler3->AddObserver(MeasureChangedEvent,this,&EllipsoidVolumeAnnotationActor::measureCallback);
@@ -36,6 +39,13 @@ EllipsoidVolumeAnnotationActor::EllipsoidVolumeAnnotationActor() : DraggableActo
} }
EllipsoidVolumeAnnotationActor::~EllipsoidVolumeAnnotationActor() { EllipsoidVolumeAnnotationActor::~EllipsoidVolumeAnnotationActor() {
mRuler1->SetcontrolledActor(nullptr);
mRuler2->SetcontrolledActor(nullptr);
mRuler3->SetcontrolledActor(nullptr);
mRuler1->SetRenderer(nullptr);
mRuler2->SetRenderer(nullptr);
mRuler3->SetRenderer(nullptr);
SetRenderer(nullptr);
if (mRuler1)mRuler1->Delete(); if (mRuler1)mRuler1->Delete();
if (mRuler2)mRuler2->Delete(); if (mRuler2)mRuler2->Delete();
if (mRuler3)mRuler3->Delete(); if (mRuler3)mRuler3->Delete();

View File

@@ -34,6 +34,7 @@ public:
void ClearRenderingState(vtkRenderer* aRenderer = nullptr); void ClearRenderingState(vtkRenderer* aRenderer = nullptr);
virtual bool Removable() { return false; }
protected: protected:
EllipsoidVolumeAnnotationActor(); EllipsoidVolumeAnnotationActor();

View File

@@ -65,6 +65,8 @@ public:
virtual bool Valid() { return true; } virtual bool Valid() { return true; }
virtual bool Removable() { return true; }
virtual vtkProp* GetProp(){return nullptr;} virtual vtkProp* GetProp(){return nullptr;}
protected: protected:

View File

@@ -1181,29 +1181,18 @@ void DICOMImageViewer::AddMeasures(vtkObject *, unsigned long eventid, void *cal
void DICOMImageViewer::RemoveMeasures(vtkObject *, unsigned long eventid, void *calldata) { void DICOMImageViewer::RemoveMeasures(vtkObject *, unsigned long eventid, void *calldata) {
auto p = static_cast<vtkProp *>(calldata); auto p = static_cast<vtkProp *>(calldata);
auto da = DraggableActor::SafeDownCast(p); auto da = DraggableActor::SafeDownCast(p);
if (da->IsA("ControlPointActor")) while (da->GetcontrolledActor())
{ {
auto controlP = ControlPointActor::SafeDownCast(da); da = da->GetcontrolledActor();
if (nullptr == controlP) return;
if (nullptr == controlP->GetcontrolledActor()) return;
auto m = dynamic_cast<Measure *>(controlP->GetcontrolledActor());
if (m == nullptr) return;
ClearCurrentSliceMeasure();
measureStore->Remove(m);
this->InteractorStyle->ClearSelectedProp();
ReloadCurrentSliceMeasure();
this->Render();
} }
else{
auto m = dynamic_cast<Measure *>(da); auto m = dynamic_cast<Measure *>(da);
if (m == nullptr) return; if (m == nullptr) return;
if (!m->Removable())return;
ClearCurrentSliceMeasure(); ClearCurrentSliceMeasure();
measureStore->Remove(m); measureStore->Remove(m);
this->InteractorStyle->ClearSelectedProp(); this->InteractorStyle->ClearSelectedProp();
ReloadCurrentSliceMeasure(); ReloadCurrentSliceMeasure();
this->Render(); this->Render();
}
} }
void DICOMImageViewer::DeleteSelectedMeasure() { void DICOMImageViewer::DeleteSelectedMeasure() {