diff --git a/src/src/Rendering/Viewer/ResliceImageViewer.cpp b/src/src/Rendering/Viewer/ResliceImageViewer.cpp index c4a9111..5a7cd4f 100644 --- a/src/src/Rendering/Viewer/ResliceImageViewer.cpp +++ b/src/src/Rendering/Viewer/ResliceImageViewer.cpp @@ -26,6 +26,7 @@ ResliceImageViewer::ResliceImageViewer() : vtkObject() , RenderWindow(nullptr) , Renderer(vtkRenderer::New()) + , MeasureRenderer(vtkRenderer::New()) , InteractorStyle(ResliceImageInteractorStyle::New()) , Interactor(nullptr) , Mapper(vtkImageResliceMapper::New()) @@ -145,12 +146,18 @@ void ResliceImageViewer::Render() { if (FirstRender){ //some first render logic FirstRender = false; - Renderer->AddActor2D(cursor1); - Renderer->AddActor2D(cursor2); - cursor1->SetSlicePoint(Renderer->GetActiveCamera()->GetFocalPoint()); - cursor2->SetSlicePoint(Renderer->GetActiveCamera()->GetFocalPoint()); - cursor1->SetProjectDirectionVector(Renderer->GetActiveCamera()->GetDirectionOfProjection()); - cursor2->SetProjectDirectionVector(Renderer->GetActiveCamera()->GetDirectionOfProjection()); + MeasureRenderer->SetActiveCamera(Renderer->GetActiveCamera()); + RenderWindow->AddRenderer(MeasureRenderer); + MeasureRenderer->Delete(); + RenderWindow->SetNumberOfLayers(2); + Renderer->SetLayer(0); + MeasureRenderer->SetLayer(1); + MeasureRenderer->AddActor2D(cursor1); + MeasureRenderer->AddActor2D(cursor2); + cursor1->SetSlicePoint(MeasureRenderer->GetActiveCamera()->GetFocalPoint()); + cursor2->SetSlicePoint(MeasureRenderer->GetActiveCamera()->GetFocalPoint()); + cursor1->SetProjectDirectionVector(MeasureRenderer->GetActiveCamera()->GetDirectionOfProjection()); + cursor2->SetProjectDirectionVector(MeasureRenderer->GetActiveCamera()->GetDirectionOfProjection()); double sliceDirection1[4]{.0, .0, .0, 1.}; double sliceDirection2[4]{.0, .0, .0, 1.}; switch (DefaultOrientation) { @@ -192,8 +199,9 @@ void ResliceImageViewer::Render() { cursor1->AddObserver(ResliceCursorLegendActor::MOVE,this, &ResliceImageViewer::handleMove); cursor2->AddObserver(ResliceCursorLegendActor::ROLL,this, &ResliceImageViewer::handleRoll); cursor2->AddObserver(ResliceCursorLegendActor::MOVE,this, &ResliceImageViewer::handleMove); - Renderer->AddActor2D(Square); + MeasureRenderer->AddActor2D(Square); Render(); + return; } Interactor->Render(); @@ -230,6 +238,7 @@ void ResliceImageViewer::SetDefaultSliceOrientation(int orientation) { camera->SetPosition(position); camera->SetViewUp(ViewUp); Renderer->ResetCamera(); + AdjustOrthogonalScale(); } void ResliceImageViewer::SetCoordsTransformMatrix(vtkMatrix4x4 *matrix4X4) { @@ -300,3 +309,13 @@ void ResliceImageViewer::handleResize() { cursor1->Modified(); cursor2->Modified(); } + +void ResliceImageViewer::AdjustOrthogonalScale() { + vtkCamera* camera = Renderer->GetActiveCamera(); + double * viewUp = camera->GetViewUp(); + vtkImageData * data = Mapper->GetInput(); + int index = abs(((int)viewUp[0]) * 0 + ((int)viewUp[1]) * 1 + ((int)viewUp[2]) * 2); + + double pixelScale = data->GetDimensions()[index]*data->GetSpacing()[index]; + camera->SetParallelScale(pixelScale/2-3); +} diff --git a/src/src/Rendering/Viewer/ResliceImageViewer.h b/src/src/Rendering/Viewer/ResliceImageViewer.h index 958991e..b477141 100644 --- a/src/src/Rendering/Viewer/ResliceImageViewer.h +++ b/src/src/Rendering/Viewer/ResliceImageViewer.h @@ -47,6 +47,7 @@ public: double* GetCursorSliceDirection1(); double* GetCursorSliceDirection2(); + void AdjustOrthogonalScale(); void ChangeSlicePoint(double * point); void ChangeSliceNormal(double * normal); void EndDrag();