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 };
|
double fp[3] = { 0.0,0.0,0.0 };
|
||||||
Renderer->GetActiveCamera()->GetPosition(fp);
|
Renderer->GetActiveCamera()->GetPosition(fp);
|
||||||
fp[0] = fp[0] + p[0];
|
fp[0] = fp[0] + p[0];
|
||||||
@@ -969,7 +1000,8 @@ void infinitiViewer::Render()
|
|||||||
//camera->GetPosition(cameraPosition);
|
//camera->GetPosition(cameraPosition);
|
||||||
int currentIndex = ImageMapper->GetSliceNumber();
|
int currentIndex = ImageMapper->GetSliceNumber();
|
||||||
if (currentIndex != lastIndex) this->SetSlice(lastIndex);
|
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
|
//calibration of image by VFlip
|
||||||
//this->Renderer->GetActiveCamera()->Elevation(-180);
|
//this->Renderer->GetActiveCamera()->Elevation(-180);
|
||||||
//this->Renderer->GetActiveCamera()->Roll(180);
|
//this->Renderer->GetActiveCamera()->Roll(180);
|
||||||
@@ -1165,9 +1197,8 @@ void infinitiViewer::SetSliceOrientation(int orientation)
|
|||||||
|
|
||||||
if (this->Renderer && this->GetInput())
|
if (this->Renderer && this->GetInput())
|
||||||
{
|
{
|
||||||
double scale = this->Renderer->GetActiveCamera()->GetParallelScale();
|
|
||||||
this->Renderer->ResetCamera();
|
this->Renderer->ResetCamera();
|
||||||
this->Renderer->GetActiveCamera()->SetParallelScale(scale);
|
ResetZoomScaleToFitWindowSize();
|
||||||
}
|
}
|
||||||
// first render to update imageMapper slice
|
// first render to update imageMapper slice
|
||||||
this->Render();
|
this->Render();
|
||||||
|
|||||||
@@ -160,7 +160,8 @@ public:
|
|||||||
//@}
|
//@}
|
||||||
|
|
||||||
void SetZoomScale(double scale);
|
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
|
* Get the position (x and y) of the rendering window in
|
||||||
@@ -393,7 +394,8 @@ private:
|
|||||||
bool rulerActive = false;
|
bool rulerActive = false;
|
||||||
void RenderRuler();
|
void RenderRuler();
|
||||||
int currentPresetIndex=1;
|
int currentPresetIndex=1;
|
||||||
|
int viewUpIndex = 0;
|
||||||
|
int viewRightIndex = 1;
|
||||||
DicomCornerInfo m_cornerInfo;
|
DicomCornerInfo m_cornerInfo;
|
||||||
char SOP_UID[20]={0};
|
char SOP_UID[20]={0};
|
||||||
vtkNew<vtkMatrix4x4> matrix;
|
vtkNew<vtkMatrix4x4> matrix;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "view/dicomimageview.h"
|
#include "view/dicomimageview.h"
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include "view/thumbnailImage.h"
|
#include "view/thumbnailImage.h"
|
||||||
@@ -566,13 +566,9 @@ void DicomImageView::SetPanOffset(double * pan)
|
|||||||
//FIXME:这个函数有问题,会导致MPR显示出错!!!
|
//FIXME:这个函数有问题,会导致MPR显示出错!!!
|
||||||
void DicomImageView::ResetPanZoom()
|
void DicomImageView::ResetPanZoom()
|
||||||
{
|
{
|
||||||
return;
|
|
||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
//necessary to reset pan
|
_ImageViewer->ResetZoomScaleToFitWindowSize();
|
||||||
_ImageViewer->GetRenderer()->ResetCamera();
|
|
||||||
//necessary to reset zoom
|
|
||||||
_ImageViewer->GetRenderer()->GetActiveCamera()->SetParallelScale(_Series->GetExtent());
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -622,7 +618,6 @@ void DicomImageView::HFlip()
|
|||||||
{
|
{
|
||||||
if (HasSeries()) {
|
if (HasSeries()) {
|
||||||
int slice = _ImageViewer->GetSlice();
|
int slice = _ImageViewer->GetSlice();
|
||||||
ResetPanZoom();
|
|
||||||
//HFlip
|
//HFlip
|
||||||
//_ImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0, 1, 0);
|
//_ImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0, 1, 0);
|
||||||
_ImageViewer->GetRenderer()->GetActiveCamera()->Azimuth(180);
|
_ImageViewer->GetRenderer()->GetActiveCamera()->Azimuth(180);
|
||||||
@@ -643,7 +638,6 @@ void DicomImageView::VFlip()
|
|||||||
//double scale = _ImageViewer->GetRenderer()->GetActiveCamera()->GetParallelScale();
|
//double scale = _ImageViewer->GetRenderer()->GetActiveCamera()->GetParallelScale();
|
||||||
|
|
||||||
int slice = _ImageViewer->GetSlice();
|
int slice = _ImageViewer->GetSlice();
|
||||||
ResetPanZoom();
|
|
||||||
//Method 2: Order matters
|
//Method 2: Order matters
|
||||||
_ImageViewer->GetRenderer()->GetActiveCamera()->Elevation(-180);
|
_ImageViewer->GetRenderer()->GetActiveCamera()->Elevation(-180);
|
||||||
_ImageViewer->GetRenderer()->GetActiveCamera()->Roll(180);
|
_ImageViewer->GetRenderer()->GetActiveCamera()->Roll(180);
|
||||||
@@ -664,7 +658,6 @@ void DicomImageView::Rotate(double angle, TransFormType operation)
|
|||||||
{
|
{
|
||||||
if (HasSeries()) {
|
if (HasSeries()) {
|
||||||
int slice = _ImageViewer->GetSlice();
|
int slice = _ImageViewer->GetSlice();
|
||||||
ResetPanZoom();
|
|
||||||
_ImageViewer->GetRenderer()->GetActiveCamera()->Roll(angle);
|
_ImageViewer->GetRenderer()->GetActiveCamera()->Roll(angle);
|
||||||
//to avoid black out problem during slicing
|
//to avoid black out problem during slicing
|
||||||
//slcing is related with rotation, you have to recalculate to get it right
|
//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);
|
_scrollBar->setValue(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int DicomImageView::GetSliceOrientation() {
|
int DicomImageView::GetSliceOrientation() {
|
||||||
return slice_orientation;
|
return slice_orientation;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user