feat: reset zoom & pan before rotate & flip

This commit is contained in:
kradchen
2025-05-22 16:59:53 +08:00
parent d238e3819f
commit c820fa4f7d
3 changed files with 9 additions and 3 deletions

View File

@@ -426,7 +426,7 @@ int DICOMImageViewer::GetSliceMax() {
} }
int DICOMImageViewer::GetSlice() { int DICOMImageViewer::GetSlice() {
return this->ImageMapper->GetSliceNumber(); return Slice;
} }
void DICOMImageViewer::SetSlice(int slice) { void DICOMImageViewer::SetSlice(int slice) {

View File

@@ -24,7 +24,7 @@ DicomImageView::DicomImageView(QWidget *parent)
mSeries(nullptr), mScrollBar(new ClickableScrollBar(Qt::Orientation::Vertical, this)), mSeries(nullptr), mScrollBar(new ClickableScrollBar(Qt::Orientation::Vertical, this)),
mTitleBar(createMyTitleBar()), mGLWidget(new QVTKOpenGLNativeWidget), mVcrToolbar(nullptr), mVcrController(nullptr), mTitleBar(createMyTitleBar()), mGLWidget(new QVTKOpenGLNativeWidget), mVcrToolbar(nullptr), mVcrController(nullptr),
mOverlayView(nullptr), mBaseView(nullptr), mIsCine(false), mIsNegative(false), mOverlayView(nullptr), mBaseView(nullptr), mIsCine(false), mIsNegative(false),
mIsOverlay(false), mIsSlotInited(false) mIsOverlay(false), mIsSlotInited(false),mCurrentRAngle(0)
{ {
//main container //main container
QFrame *wrapper = new QFrame(this); QFrame *wrapper = new QFrame(this);
@@ -610,6 +610,7 @@ void DicomImageView::hFlipImage() {
int slice = mImageViewer->GetSlice(); int slice = mImageViewer->GetSlice();
//HFlip //HFlip
//mImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0, 1, 0); //mImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0, 1, 0);
resetPanZoom();
mImageViewer->GetRenderer()->GetActiveCamera()->Azimuth(180); mImageViewer->GetRenderer()->GetActiveCamera()->Azimuth(180);
FlipExportHelper::toggleFlip(); FlipExportHelper::toggleFlip();
//to avoid black out problem during slicing //to avoid black out problem during slicing
@@ -627,6 +628,7 @@ void DicomImageView::vFlipImage() {
//double scale = mImageViewer->GetRenderer()->GetActiveCamera()->GetParallelScale(); //double scale = mImageViewer->GetRenderer()->GetActiveCamera()->GetParallelScale();
int slice = mImageViewer->GetSlice(); int slice = mImageViewer->GetSlice();
resetPanZoom();
//Method 2: Order matters //Method 2: Order matters
mImageViewer->GetRenderer()->GetActiveCamera()->Elevation(-180); mImageViewer->GetRenderer()->GetActiveCamera()->Elevation(-180);
mImageViewer->GetRenderer()->GetActiveCamera()->Roll(180); mImageViewer->GetRenderer()->GetActiveCamera()->Roll(180);
@@ -646,7 +648,9 @@ void DicomImageView::vFlipImage() {
void DicomImageView::rotateImage(double angle, TransFormType operation) { void DicomImageView::rotateImage(double angle, TransFormType operation) {
if (hasSeries()) { if (hasSeries()) {
int slice = mImageViewer->GetSlice(); int slice = mImageViewer->GetSlice();
mImageViewer->GetRenderer()->GetActiveCamera()->Roll(angle); resetPanZoom();
mImageViewer->GetRenderer()->GetActiveCamera()->Roll(mCurrentRAngle + angle);
mCurrentRAngle=mCurrentRAngle+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
mImageViewer->GetRenderer()->ResetCameraClippingRange(); mImageViewer->GetRenderer()->ResetCameraClippingRange();

View File

@@ -346,6 +346,8 @@ private:
bool mIsFirstRenderAfterLoad; bool mIsFirstRenderAfterLoad;
bool mfirstShowFlag = true; bool mfirstShowFlag = true;
int mCurrentRAngle;
uint mViewID; uint mViewID;
void initImageViewer(); void initImageViewer();