Add ResetScale too fit window function.(After First render and MPR change)
This commit is contained in:
@@ -665,7 +665,38 @@ void infinitiViewer::SetZoomScale(double scale) {
|
||||
}
|
||||
}
|
||||
|
||||
void infinitiViewer::SetPanOffset(double* p) {
|
||||
void infinitiViewer::ResetZoomScaleToFitWindowSize() {
|
||||
vtkImageData * inputData = nullptr;
|
||||
if (Renderer && (inputData = GetInput())){
|
||||
double proj[4] ={0,0,0,1};
|
||||
Renderer->GetActiveCamera()->GetDirectionOfProjection(proj);
|
||||
double viewUp[4]= {0,0,0,1};
|
||||
this->Renderer->GetActiveCamera()->GetViewUp(viewUp);
|
||||
double viewRight[4]= {0,0,0,1};
|
||||
vtkMath::Cross(viewUp,proj,viewRight);
|
||||
int upIndex = (int) abs(round(1.0*viewUp[1]+2.0*viewUp[2]));
|
||||
int rightIndex = (int)abs(round(1.0*viewRight[1]+2.0*viewRight[2]));
|
||||
int* size = this->RenderWindow->GetSize();
|
||||
double whFactor = 0.5;
|
||||
double ws = 1.0* size[0];
|
||||
double hs = 1.0* size[1];
|
||||
double hp = 1.0 * inputData->GetBounds()[upIndex*2+1];
|
||||
double wp = 1.0 * inputData->GetBounds()[rightIndex*2+1];
|
||||
//because Parallel Scale is campare with half height
|
||||
if(wp/hp>ws/hs){
|
||||
double aspect = hs/ws;
|
||||
SetZoomScale((wp)*aspect*0.5+3.0);
|
||||
}
|
||||
else{
|
||||
SetZoomScale((hp)*0.5+3.0);
|
||||
}
|
||||
}
|
||||
else{
|
||||
SetZoomScale(1.0);
|
||||
}
|
||||
}
|
||||
|
||||
void infinitiViewer::SetPanOffset(const double* p) {
|
||||
double fp[3] = { 0.0,0.0,0.0 };
|
||||
Renderer->GetActiveCamera()->GetPosition(fp);
|
||||
fp[0] = fp[0] + p[0];
|
||||
@@ -969,7 +1000,8 @@ void infinitiViewer::Render()
|
||||
//camera->GetPosition(cameraPosition);
|
||||
int currentIndex = ImageMapper->GetSliceNumber();
|
||||
if (currentIndex != lastIndex) this->SetSlice(lastIndex);
|
||||
this->Renderer->GetActiveCamera()->SetParallelScale(xs < 150 ? 75 : (xs - 1) / 2.0);
|
||||
ResetZoomScaleToFitWindowSize();
|
||||
// this->Renderer->GetActiveCamera()->SetParallelScale(xs < 150 ? 75 : (xs - 1) / 2.0);
|
||||
//calibration of image by VFlip
|
||||
//this->Renderer->GetActiveCamera()->Elevation(-180);
|
||||
//this->Renderer->GetActiveCamera()->Roll(180);
|
||||
@@ -1165,9 +1197,8 @@ void infinitiViewer::SetSliceOrientation(int orientation)
|
||||
|
||||
if (this->Renderer && this->GetInput())
|
||||
{
|
||||
double scale = this->Renderer->GetActiveCamera()->GetParallelScale();
|
||||
this->Renderer->ResetCamera();
|
||||
this->Renderer->GetActiveCamera()->SetParallelScale(scale);
|
||||
ResetZoomScaleToFitWindowSize();
|
||||
}
|
||||
// first render to update imageMapper slice
|
||||
this->Render();
|
||||
|
||||
@@ -160,7 +160,8 @@ public:
|
||||
//@}
|
||||
|
||||
void SetZoomScale(double scale);
|
||||
void SetPanOffset(double* point);
|
||||
void SetPanOffset(const double* point);
|
||||
void ResetZoomScaleToFitWindowSize();
|
||||
//@{
|
||||
/**
|
||||
* Get the position (x and y) of the rendering window in
|
||||
@@ -393,7 +394,8 @@ private:
|
||||
bool rulerActive = false;
|
||||
void RenderRuler();
|
||||
int currentPresetIndex=1;
|
||||
|
||||
int viewUpIndex = 0;
|
||||
int viewRightIndex = 1;
|
||||
DicomCornerInfo m_cornerInfo;
|
||||
char SOP_UID[20]={0};
|
||||
vtkNew<vtkMatrix4x4> matrix;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#include "view/dicomimageview.h"
|
||||
#include "view/dicomimageview.h"
|
||||
#include <QMessageBox>
|
||||
#include <QDebug>
|
||||
#include "view/thumbnailImage.h"
|
||||
@@ -566,13 +566,9 @@ void DicomImageView::SetPanOffset(double * pan)
|
||||
//FIXME:这个函数有问题,会导致MPR显示出错!!!
|
||||
void DicomImageView::ResetPanZoom()
|
||||
{
|
||||
return;
|
||||
if (HasSeries())
|
||||
{
|
||||
//necessary to reset pan
|
||||
_ImageViewer->GetRenderer()->ResetCamera();
|
||||
//necessary to reset zoom
|
||||
_ImageViewer->GetRenderer()->GetActiveCamera()->SetParallelScale(_Series->GetExtent());
|
||||
_ImageViewer->ResetZoomScaleToFitWindowSize();
|
||||
|
||||
}
|
||||
}
|
||||
@@ -622,7 +618,6 @@ void DicomImageView::HFlip()
|
||||
{
|
||||
if (HasSeries()) {
|
||||
int slice = _ImageViewer->GetSlice();
|
||||
ResetPanZoom();
|
||||
//HFlip
|
||||
//_ImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0, 1, 0);
|
||||
_ImageViewer->GetRenderer()->GetActiveCamera()->Azimuth(180);
|
||||
@@ -643,7 +638,6 @@ void DicomImageView::VFlip()
|
||||
//double scale = _ImageViewer->GetRenderer()->GetActiveCamera()->GetParallelScale();
|
||||
|
||||
int slice = _ImageViewer->GetSlice();
|
||||
ResetPanZoom();
|
||||
//Method 2: Order matters
|
||||
_ImageViewer->GetRenderer()->GetActiveCamera()->Elevation(-180);
|
||||
_ImageViewer->GetRenderer()->GetActiveCamera()->Roll(180);
|
||||
@@ -664,7 +658,6 @@ void DicomImageView::Rotate(double angle, TransFormType operation)
|
||||
{
|
||||
if (HasSeries()) {
|
||||
int slice = _ImageViewer->GetSlice();
|
||||
ResetPanZoom();
|
||||
_ImageViewer->GetRenderer()->GetActiveCamera()->Roll(angle);
|
||||
//to avoid black out problem during slicing
|
||||
//slcing is related with rotation, you have to recalculate to get it right
|
||||
@@ -843,6 +836,7 @@ void DicomImageView::SetSliceOrientation(int orientation) {
|
||||
_scrollBar->setValue(0);
|
||||
}
|
||||
|
||||
|
||||
int DicomImageView::GetSliceOrientation() {
|
||||
return slice_orientation;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user