Add reslice size fit window (When orthogonal slice)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ public:
|
||||
double* GetCursorSliceDirection1();
|
||||
double* GetCursorSliceDirection2();
|
||||
|
||||
void AdjustOrthogonalScale();
|
||||
void ChangeSlicePoint(double * point);
|
||||
void ChangeSliceNormal(double * normal);
|
||||
void EndDrag();
|
||||
|
||||
Reference in New Issue
Block a user