void DialogTransformVolume::RespondTextTranslate( int n ) { if ( isVisible() ) { bool bOK; double dvalue =m_textTranslate[n]->text().toDouble(&bOK); if ( bOK ) { LayerMRI* layer = ( LayerMRI* )MainWindow::GetMainWindow()->GetActiveLayer( "MRI" ); if ( layer ) { double pos[3]; layer->GetTranslate( pos ); pos[n] = dvalue; layer->SetTranslate( pos ); MainWindow::GetMainWindow()->RequestRedraw(); double* vs = layer->GetWorldVoxelSize(); int range = m_scrollTranslate[n]->maximum(); m_scrollTranslate[n]->blockSignals(true); m_scrollTranslate[n]->setValue(range/2 + (int)( pos[n] / vs[n] ) ); m_scrollTranslate[n]->blockSignals(false); UpdateUI( 1 ); } } } }
void DialogTransformVolume::RespondScrollTranslate( int n ) { if ( isVisible() ) { LayerMRI* layer = ( LayerMRI* )MainWindow::GetMainWindow()->GetActiveLayer( "MRI" ); if ( layer ) { double pos[3]; layer->GetTranslate( pos ); int range = m_scrollTranslate[n]->maximum(); int npos = m_scrollTranslate[n]->value(); double* vs = layer->GetWorldVoxelSize(); pos[n] = ( npos - range/2 ) * vs[n]; layer->SetTranslate( pos ); MainWindow::GetMainWindow()->RequestRedraw(); ChangeLineEditNumber(m_textTranslate[n], pos[n] ); UpdateUI( 1 ); } } }
void DialogTransformVolume::OnButtonCenterToCursor() { if ( isVisible() ) { LayerMRI* layer = ( LayerMRI* )MainWindow::GetMainWindow()->GetActiveLayer( "MRI" ); if ( layer ) { double pos[3]; layer->GetSlicePosition(pos); layer->SetTranslateByCenterPosition( pos ); MainWindow::GetMainWindow()->RequestRedraw(); double* vs = layer->GetWorldVoxelSize(); for (int n = 0; n < 3; n++) { int range = m_scrollTranslate[n]->maximum(); m_scrollTranslate[n]->blockSignals(true); m_scrollTranslate[n]->setValue(range/2 + (int)( pos[n] / vs[n] ) ); m_scrollTranslate[n]->blockSignals(false); } UpdateUI( 0 ); } } }
// scope: 0 => translate related, 1 => scale related, 2 => both void DialogTransformVolume::UpdateUI( int scope ) { LayerMRI* layer = (LayerMRI* )MainWindow::GetMainWindow()->GetActiveLayer( "MRI" ); if ( layer ) { QList<QWidget*> allwidgets = this->findChildren<QWidget*>(); for ( int i = 0; i < allwidgets.size(); i++ ) { allwidgets[i]->blockSignals( true ); } if ( scope == 0 || scope == 2 ) { double* vs = layer->GetWorldVoxelSize(); double* ws = layer->GetWorldSize(); double pos[3]; layer->GetTranslate( pos ); for ( int i = 0; i < 3; i++ ) { int range = (int)( ws[i] / vs[i] + 0.5 ) * 2; int npos = (int)(pos[i] / vs[i]) + range/2; m_scrollTranslate[i]->setRange(0, range); m_scrollTranslate[i]->setValue(npos); ChangeLineEditNumber(m_textTranslate[i], pos[i]); } } if ( scope == 1 || scope == 2 ) { double scale[3]; layer->GetScale( scale ); for ( int i = 0; i < 3; i++ ) { if ( scale[i] >= 1 ) { m_scrollScale[i]->setValue( 50 + (int)( (scale[i]-1.0)*50 ) ); } else { m_scrollScale[i]->setValue( 50 - (int)( (1.0-scale[i])*100 ) ); } ChangeLineEditNumber(m_textScale[i], scale[i]); } } ui->pushButtonRestore->setEnabled( layer->IsTransformed() ); ui->pushButtonSaveReg->setEnabled( layer->IsTransformed() ); ui->pushButtonSaveVolumeAs->setEnabled( layer->IsTransformed() ); double angle[3]; layer->GetRotate(angle); ui->groupBoxAxis->setDisabled(angle[0] != 0 || angle[1] != 0 || angle[2] != 0); for (int i = 0; i < 3; i++) { double val = angle[i]; while (val > 180) val -= 360; while (angle[i] < -180) val += 360; m_sliderRotate[i]->setValue((int)val); ChangeLineEditNumber(m_textAngle[i], angle[i]); } for ( int i = 0; i < allwidgets.size(); i++ ) { allwidgets[i]->blockSignals( false ); } } }