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() {
return this->ImageMapper->GetSliceNumber();
return 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)),
mTitleBar(createMyTitleBar()), mGLWidget(new QVTKOpenGLNativeWidget), mVcrToolbar(nullptr), mVcrController(nullptr),
mOverlayView(nullptr), mBaseView(nullptr), mIsCine(false), mIsNegative(false),
mIsOverlay(false), mIsSlotInited(false)
mIsOverlay(false), mIsSlotInited(false),mCurrentRAngle(0)
{
//main container
QFrame *wrapper = new QFrame(this);
@@ -610,6 +610,7 @@ void DicomImageView::hFlipImage() {
int slice = mImageViewer->GetSlice();
//HFlip
//mImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0, 1, 0);
resetPanZoom();
mImageViewer->GetRenderer()->GetActiveCamera()->Azimuth(180);
FlipExportHelper::toggleFlip();
//to avoid black out problem during slicing
@@ -627,6 +628,7 @@ void DicomImageView::vFlipImage() {
//double scale = mImageViewer->GetRenderer()->GetActiveCamera()->GetParallelScale();
int slice = mImageViewer->GetSlice();
resetPanZoom();
//Method 2: Order matters
mImageViewer->GetRenderer()->GetActiveCamera()->Elevation(-180);
mImageViewer->GetRenderer()->GetActiveCamera()->Roll(180);
@@ -646,7 +648,9 @@ void DicomImageView::vFlipImage() {
void DicomImageView::rotateImage(double angle, TransFormType operation) {
if (hasSeries()) {
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
//slcing is related with rotation, you have to recalculate to get it right
mImageViewer->GetRenderer()->ResetCameraClippingRange();

View File

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