fix: fix measure delete bug when measure select by control point
This commit is contained in:
@@ -15,7 +15,8 @@
|
||||
vtkStandardNewMacro(ControlPointActor)
|
||||
|
||||
ControlPointActor::ControlPointActor()
|
||||
: shadowData(vtkPolyData::New()) {
|
||||
: shadowData(vtkPolyData::New())
|
||||
, controlledActor(nullptr) {
|
||||
BaseDataPoints->SetNumberOfPoints(1);
|
||||
renderPoints->SetNumberOfPoints(1);
|
||||
renderPoints->SetPoint(0, 0, 0, 0);
|
||||
|
||||
@@ -27,6 +27,9 @@ public:
|
||||
void SetWorldPosition(double *pos) {
|
||||
SetWorldPosition(pos[0], pos[1], pos[2]);
|
||||
}
|
||||
vtkSetObjectMacro(controlledActor,DraggableActor);
|
||||
vtkGetObjectMacro(controlledActor,DraggableActor);
|
||||
|
||||
|
||||
protected:
|
||||
ControlPointActor();
|
||||
@@ -34,6 +37,7 @@ protected:
|
||||
~ControlPointActor() override;
|
||||
|
||||
vtkPolyData *shadowData;
|
||||
DraggableActor * controlledActor;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -47,6 +47,10 @@ AngleAnnotationActor::AngleAnnotationActor()
|
||||
controlP1->AddObserver(DraggableActorEvents::DragEvent, this, &AngleAnnotationActor::controlPointCb);
|
||||
controlP2->AddObserver(DraggableActorEvents::DragEvent, this, &AngleAnnotationActor::controlPointCb);
|
||||
controlP3->AddObserver(DraggableActorEvents::DragEvent, this, &AngleAnnotationActor::controlPointCb);
|
||||
controlP1->SetcontrolledActor(this);
|
||||
controlP2->SetcontrolledActor(this);
|
||||
controlP3->SetcontrolledActor(this);
|
||||
|
||||
this->AddObserver(DraggableActorEvents::DragEvent, this, &AngleAnnotationActor::selfDragCb);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,9 @@ ArrowAnnotationActor::ArrowAnnotationActor()
|
||||
controlP2->AddObserver(DraggableActorEvents::DragEvent, this, &ArrowAnnotationActor::controlPointCb);
|
||||
controlP2->AddObserver(vtkCommand::EnterEvent, this, &ArrowAnnotationActor::HighlightOn);
|
||||
controlP2->AddObserver(vtkCommand::LeaveEvent, this, &ArrowAnnotationActor::HighlightOff);
|
||||
controlP1->SetcontrolledActor(this);
|
||||
controlP2->SetcontrolledActor(this);
|
||||
|
||||
this->AddObserver(DraggableActorEvents::DragEvent, this, &ArrowAnnotationActor::selfDragCb);
|
||||
}
|
||||
|
||||
|
||||
@@ -80,6 +80,12 @@ EllipseAnnotationActor::EllipseAnnotationActor() {
|
||||
controlP_lb->AddObserver(DraggableActorEvents::DragEvent, this, &EllipseAnnotationActor::controlPointCb);
|
||||
controlP_rb->AddObserver(DraggableActorEvents::DragEvent, this, &EllipseAnnotationActor::controlPointCb);
|
||||
|
||||
controlP_lt->SetcontrolledActor(this);
|
||||
controlP_rt->SetcontrolledActor(this);
|
||||
controlP_lb->SetcontrolledActor(this);
|
||||
controlP_rb->SetcontrolledActor(this);
|
||||
|
||||
|
||||
//this->AddObserver(DraggableActorEvents::DragEvent, this, &EllipseAnnotationActor::selfDragCb);
|
||||
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@ LineAnnotationActor::LineAnnotationActor()
|
||||
renderPoints->SetNumberOfPoints(2);
|
||||
controlP1->AddObserver(DraggableActorEvents::DragEvent, this, &LineAnnotationActor::controlPointCb);
|
||||
controlP2->AddObserver(DraggableActorEvents::DragEvent, this, &LineAnnotationActor::controlPointCb);
|
||||
controlP1->SetcontrolledActor(this);
|
||||
controlP2->SetcontrolledActor(this);
|
||||
this->AddObserver(DraggableActorEvents::DragEvent, this, &LineAnnotationActor::selfDragCb);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,11 +22,12 @@
|
||||
#include <vtkTextActor.h>
|
||||
#include <vtkTextProperty.h>
|
||||
|
||||
#include "Rendering/Core/ControlPointActor.h"
|
||||
#include "Rendering/Core/MarginCornerAnnotation.h"
|
||||
#include "Rendering/Measure/MeasureStore.h"
|
||||
#include "Rendering/Legend/FastCornerAnnotationActor.h"
|
||||
#include "IO/General/ColorMapReader.h"
|
||||
#include "Interaction/ActorDraggableInteractorStyle.h"
|
||||
#include "Rendering/Core/MarginCornerAnnotation.h"
|
||||
|
||||
namespace {
|
||||
//扭转存在偏转的坐标轴
|
||||
@@ -1022,13 +1023,30 @@ 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);
|
||||
auto m = dynamic_cast<Measure *>(da);
|
||||
if (da->IsA("ControlPointActor"))
|
||||
{
|
||||
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();
|
||||
}
|
||||
else{
|
||||
auto m = dynamic_cast<Measure *>(da);
|
||||
if (m == nullptr) return;
|
||||
ClearCurrentSliceMeasure();
|
||||
measureStore->Remove(m);
|
||||
this->InteractorStyle->ClearSelectedProp();
|
||||
ReloadCurrentSliceMeasure();
|
||||
this->Render();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void DICOMImageViewer::DeleteSelectedMeasure() {
|
||||
if (this->InteractorStyle->GetSelectedProp()) {
|
||||
|
||||
Reference in New Issue
Block a user