Advanced options for move to other object in the transform tool.

Allows for masking of individual translation or rotation axes.
This commit is contained in:
Max Wilfinger
2025-05-29 20:42:16 +02:00
committed by Kacper Donat
parent 2933eaf819
commit d64efad081
4 changed files with 389 additions and 8 deletions

View File

@@ -242,6 +242,21 @@ void TaskTransform::setupGui()
&QPushButton::clicked,
this,
&TaskTransform::onAlignToOtherObject);
connect(ui->moveOptionsButton,
&QPushButton::toggled,
ui->frameMoveOptions,
&QWidget::setVisible);
connect(ui->translateCheckbox, &QCheckBox::toggled, this, [this](bool translateChecked) {
ui->matchXcheckbox->setEnabled(translateChecked);
ui->matchYcheckbox->setEnabled(translateChecked);
ui->matchZcheckbox->setEnabled(translateChecked);
});
connect(ui->rotateCheckbox, &QCheckBox::toggled, this, [this](bool rotateChecked) {
ui->alignXcheckbox->setEnabled(rotateChecked);
ui->alignYcheckbox->setEnabled(rotateChecked);
ui->alignZcheckbox->setEnabled(rotateChecked);
});
connect(ui->flipPartButton, &QPushButton::clicked, this, &TaskTransform::onFlip);
connect(ui->alignRotationCheckBox,
@@ -289,6 +304,7 @@ void TaskTransform::loadPreferences()
ui->translationIncrementSpinBox->setValue(lastTranslationIncrement);
ui->rotationIncrementSpinBox->setValue(lastRotationIncrement);
ui->moveOptionsButton->setIcon(Gui::BitmapFactory().pixmap("Std_DlgParameter"));
}
void TaskTransform::savePreferences()
@@ -531,8 +547,39 @@ void TaskTransform::onAlignToOtherObject()
void TaskTransform::moveObjectToDragger()
{
// Check which dragger components should be considered
ViewProviderDragger::DraggerComponents components;
if (ui->matchXcheckbox->isChecked()) {
components |= ViewProviderDragger::DraggerComponent::XPos;
}
if (ui->matchYcheckbox->isChecked()) {
components |= ViewProviderDragger::DraggerComponent::YPos;
}
if (ui->matchZcheckbox->isChecked()) {
components |= ViewProviderDragger::DraggerComponent::ZPos;
}
if (ui->alignXcheckbox->isChecked()) {
components |= ViewProviderDragger::DraggerComponent::XRot;
}
if (ui->alignYcheckbox->isChecked()) {
components |= ViewProviderDragger::DraggerComponent::YRot;
}
if (ui->alignZcheckbox->isChecked()) {
components |= ViewProviderDragger::DraggerComponent::ZRot;
}
if (!ui->translateCheckbox->isChecked()) {
components &= ~ViewProviderDragger::DraggerComponent::XPos;
components &= ~ViewProviderDragger::DraggerComponent::YPos;
components &= ~ViewProviderDragger::DraggerComponent::ZPos;
}
if (!ui->rotateCheckbox->isChecked()) {
components &= ~ViewProviderDragger::DraggerComponent::XRot;
components &= ~ViewProviderDragger::DraggerComponent::YRot;
components &= ~ViewProviderDragger::DraggerComponent::ZRot;
}
vp->updateTransformFromDragger();
vp->updatePlacementFromDragger();
vp->updatePlacementFromDragger(components);
resetReferenceRotation();
resetReferencePlacement();