Add reslice size fit window (When orthogonal slice)
This commit is contained in:
@@ -26,6 +26,7 @@ ResliceImageViewer::ResliceImageViewer()
|
|||||||
: vtkObject()
|
: vtkObject()
|
||||||
, RenderWindow(nullptr)
|
, RenderWindow(nullptr)
|
||||||
, Renderer(vtkRenderer::New())
|
, Renderer(vtkRenderer::New())
|
||||||
|
, MeasureRenderer(vtkRenderer::New())
|
||||||
, InteractorStyle(ResliceImageInteractorStyle::New())
|
, InteractorStyle(ResliceImageInteractorStyle::New())
|
||||||
, Interactor(nullptr)
|
, Interactor(nullptr)
|
||||||
, Mapper(vtkImageResliceMapper::New())
|
, Mapper(vtkImageResliceMapper::New())
|
||||||
@@ -145,12 +146,18 @@ void ResliceImageViewer::Render() {
|
|||||||
if (FirstRender){
|
if (FirstRender){
|
||||||
//some first render logic
|
//some first render logic
|
||||||
FirstRender = false;
|
FirstRender = false;
|
||||||
Renderer->AddActor2D(cursor1);
|
MeasureRenderer->SetActiveCamera(Renderer->GetActiveCamera());
|
||||||
Renderer->AddActor2D(cursor2);
|
RenderWindow->AddRenderer(MeasureRenderer);
|
||||||
cursor1->SetSlicePoint(Renderer->GetActiveCamera()->GetFocalPoint());
|
MeasureRenderer->Delete();
|
||||||
cursor2->SetSlicePoint(Renderer->GetActiveCamera()->GetFocalPoint());
|
RenderWindow->SetNumberOfLayers(2);
|
||||||
cursor1->SetProjectDirectionVector(Renderer->GetActiveCamera()->GetDirectionOfProjection());
|
Renderer->SetLayer(0);
|
||||||
cursor2->SetProjectDirectionVector(Renderer->GetActiveCamera()->GetDirectionOfProjection());
|
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 sliceDirection1[4]{.0, .0, .0, 1.};
|
||||||
double sliceDirection2[4]{.0, .0, .0, 1.};
|
double sliceDirection2[4]{.0, .0, .0, 1.};
|
||||||
switch (DefaultOrientation) {
|
switch (DefaultOrientation) {
|
||||||
@@ -192,8 +199,9 @@ void ResliceImageViewer::Render() {
|
|||||||
cursor1->AddObserver(ResliceCursorLegendActor::MOVE,this, &ResliceImageViewer::handleMove);
|
cursor1->AddObserver(ResliceCursorLegendActor::MOVE,this, &ResliceImageViewer::handleMove);
|
||||||
cursor2->AddObserver(ResliceCursorLegendActor::ROLL,this, &ResliceImageViewer::handleRoll);
|
cursor2->AddObserver(ResliceCursorLegendActor::ROLL,this, &ResliceImageViewer::handleRoll);
|
||||||
cursor2->AddObserver(ResliceCursorLegendActor::MOVE,this, &ResliceImageViewer::handleMove);
|
cursor2->AddObserver(ResliceCursorLegendActor::MOVE,this, &ResliceImageViewer::handleMove);
|
||||||
Renderer->AddActor2D(Square);
|
MeasureRenderer->AddActor2D(Square);
|
||||||
Render();
|
Render();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Interactor->Render();
|
Interactor->Render();
|
||||||
@@ -230,6 +238,7 @@ void ResliceImageViewer::SetDefaultSliceOrientation(int orientation) {
|
|||||||
camera->SetPosition(position);
|
camera->SetPosition(position);
|
||||||
camera->SetViewUp(ViewUp);
|
camera->SetViewUp(ViewUp);
|
||||||
Renderer->ResetCamera();
|
Renderer->ResetCamera();
|
||||||
|
AdjustOrthogonalScale();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResliceImageViewer::SetCoordsTransformMatrix(vtkMatrix4x4 *matrix4X4) {
|
void ResliceImageViewer::SetCoordsTransformMatrix(vtkMatrix4x4 *matrix4X4) {
|
||||||
@@ -300,3 +309,13 @@ void ResliceImageViewer::handleResize() {
|
|||||||
cursor1->Modified();
|
cursor1->Modified();
|
||||||
cursor2->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);
|
||||||
|
}
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ public:
|
|||||||
double* GetCursorSliceDirection1();
|
double* GetCursorSliceDirection1();
|
||||||
double* GetCursorSliceDirection2();
|
double* GetCursorSliceDirection2();
|
||||||
|
|
||||||
|
void AdjustOrthogonalScale();
|
||||||
void ChangeSlicePoint(double * point);
|
void ChangeSlicePoint(double * point);
|
||||||
void ChangeSliceNormal(double * normal);
|
void ChangeSliceNormal(double * normal);
|
||||||
void EndDrag();
|
void EndDrag();
|
||||||
|
|||||||
Reference in New Issue
Block a user