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");
mRuler2->SetDistanceName(mRuler2->GetDistanceName()+"2");
mRuler3->SetDistanceName(mRuler3->GetDistanceName()+"3");
mRuler1->SetcontrolledActor(this);
mRuler2->SetcontrolledActor(this);
mRuler3->SetcontrolledActor(this);
mRuler1->AddObserver(MeasureChangedEvent,this,&EllipsoidVolumeAnnotationActor::measureCallback);
mRuler2->AddObserver(MeasureChangedEvent,this,&EllipsoidVolumeAnnotationActor::measureCallback);
mRuler3->AddObserver(MeasureChangedEvent,this,&EllipsoidVolumeAnnotationActor::measureCallback);
@@ -36,6 +39,13 @@ EllipsoidVolumeAnnotationActor::EllipsoidVolumeAnnotationActor() : DraggableActo
}
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 (mRuler2)mRuler2->Delete();
if (mRuler3)mRuler3->Delete();

View File

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

View File

@@ -65,6 +65,8 @@ public:
virtual bool Valid() { return true; }
virtual bool Removable() { return true; }
virtual vtkProp* GetProp(){return nullptr;}
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) {
auto p = static_cast<vtkProp *>(calldata);
auto da = DraggableActor::SafeDownCast(p);
if (da->IsA("ControlPointActor"))
while (da->GetcontrolledActor())
{
auto controlP = ControlPointActor::SafeDownCast(da);
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();
da = da->GetcontrolledActor();
}
else{
auto m = dynamic_cast<Measure *>(da);
if (m == nullptr) return;
if (!m->Removable())return;
ClearCurrentSliceMeasure();
measureStore->Remove(m);
this->InteractorStyle->ClearSelectedProp();
ReloadCurrentSliceMeasure();
this->Render();
}
}
void DICOMImageViewer::DeleteSelectedMeasure() {