From f55a81e4c781e343a9bc8a0480e80b58ac773268 Mon Sep 17 00:00:00 2001 From: kradchen Date: Fri, 11 Jul 2025 16:30:10 +0800 Subject: [PATCH] perf: Improve polygon render performance --- src/src/Rendering/Measure/OpenPolyAnnotationActor.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/src/Rendering/Measure/OpenPolyAnnotationActor.cpp b/src/src/Rendering/Measure/OpenPolyAnnotationActor.cpp index a0d3b6b..e5ee471 100644 --- a/src/src/Rendering/Measure/OpenPolyAnnotationActor.cpp +++ b/src/src/Rendering/Measure/OpenPolyAnnotationActor.cpp @@ -34,6 +34,7 @@ void OpenPolyAnnotationActor::BuildShape() { QString stamp = QString("%1-%2").arg(BaseDataPoints->GetMTime()) .arg(Renderer->GetActiveCamera()->GetMTime()); if (mRenderTime == stamp) return; + mRenderTime = stamp; RebuildRenderPoint(); vtkNew source; source->SetClosed(this->Closed); @@ -65,6 +66,7 @@ void OpenPolyAnnotationActor::BuildShape() { void OpenPolyAnnotationActor::SetPointWorldPosition(vtkIdType index, double x, double y, double z) { BaseDataPoints->SetPoint(index, x, y, z); + BaseDataPoints->Modified(); } bool OpenPolyAnnotationActor::onMeasureLeftButtonDown(vtkRenderWindowInteractor * iren) { @@ -84,6 +86,7 @@ bool OpenPolyAnnotationActor::onMeasureLeftButtonDown(vtkRenderWindowInteractor controlP->AddObserver(vtkCommand::LeaveEvent, this, &OpenPolyAnnotationActor::HighlightOff); controlPointList.push_back(controlP); controlP->Index = BaseDataPoints->InsertNextPoint( p); + BaseDataPoints->Modified(); this->SetRenderer(renderer); iren->Render(); return true; @@ -152,6 +155,7 @@ void OpenPolyAnnotationActor::selfDragCb(vtkObject *, unsigned long event, void MapScreenPointToWorld(pos[0], pos[1], this->Renderer, result); controlPointList[i]->SetWorldPosition(result); } + BaseDataPoints->Modified(); } void OpenPolyAnnotationActor::controlPointCb(vtkObject *sender, unsigned long event, void *data) { @@ -161,6 +165,7 @@ void OpenPolyAnnotationActor::controlPointCb(vtkObject *sender, unsigned long ev double result[3] = {0, 0, 0}; MapScreenPointToWorld(pos[0], pos[1], this->Renderer, result); BaseDataPoints->SetPoint(index, result); + BaseDataPoints->Modified(); UpdatePerimeterAndAreaText(); }