Add reslice size fit window (When orthogonal slice)

This commit is contained in:
Krad
2022-12-29 13:14:52 +08:00
parent 5d51716405
commit 6b096c9d60
2 changed files with 27 additions and 7 deletions

View File

@@ -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);
}

View File

@@ -47,6 +47,7 @@ public:
double* GetCursorSliceDirection1();
double* GetCursorSliceDirection2();
void AdjustOrthogonalScale();
void ChangeSlicePoint(double * point);
void ChangeSliceNormal(double * normal);
void EndDrag();