void TaskDatumParameters::updateSuperplacementUI() { Part::Datum* pcDatum = static_cast<Part::Datum*>(DatumView->getObject()); Base::Placement pl = pcDatum->superPlacement.getValue(); Base::Vector3d pos = pl.getPosition(); Base::Rotation rot = pl.getRotation(); double yaw, pitch, roll; rot.getYawPitchRoll(yaw, pitch, roll); bool bBlock = true; ui->superplacementX->blockSignals(bBlock); ui->superplacementY->blockSignals(bBlock); ui->superplacementZ->blockSignals(bBlock); ui->superplacementYaw->blockSignals(bBlock); ui->superplacementPitch->blockSignals(bBlock); ui->superplacementRoll->blockSignals(bBlock); ui->superplacementX->setValue(Base::Quantity(pos.x,Base::Unit::Length)); ui->superplacementY->setValue(Base::Quantity(pos.y,Base::Unit::Length)); ui->superplacementZ->setValue(Base::Quantity(pos.z,Base::Unit::Length)); ui->superplacementYaw->setValue(yaw); ui->superplacementPitch->setValue(pitch); ui->superplacementRoll->setValue(roll); auto expressions = pcDatum->ExpressionEngine.getExpressions(); bool bRotationBound = false; bRotationBound = bRotationBound || expressions.find(App::ObjectIdentifier::parse(pcDatum,std::string("superPlacement.Rotation.Angle"))) != expressions.end(); bRotationBound = bRotationBound || expressions.find(App::ObjectIdentifier::parse(pcDatum,std::string("superPlacement.Rotation.Axis.x"))) != expressions.end(); bRotationBound = bRotationBound || expressions.find(App::ObjectIdentifier::parse(pcDatum,std::string("superPlacement.Rotation.Axis.y"))) != expressions.end(); bRotationBound = bRotationBound || expressions.find(App::ObjectIdentifier::parse(pcDatum,std::string("superPlacement.Rotation.Axis.z"))) != expressions.end(); ui->superplacementYaw->setEnabled(!bRotationBound); ui->superplacementPitch->setEnabled(!bRotationBound); ui->superplacementRoll->setEnabled(!bRotationBound); QString tooltip = bRotationBound ? tr("Not editable because rotation part of superplacement is bound by expressions.") : QString(); ui->superplacementYaw->setToolTip(tooltip); ui->superplacementPitch->setToolTip(tooltip); ui->superplacementRoll->setToolTip(tooltip); bBlock = false; ui->superplacementX->blockSignals(bBlock); ui->superplacementY->blockSignals(bBlock); ui->superplacementZ->blockSignals(bBlock); ui->superplacementYaw->blockSignals(bBlock); ui->superplacementPitch->blockSignals(bBlock); ui->superplacementRoll->blockSignals(bBlock); }
void TaskDatumParameters::onSuperplacementChanged(double /*val*/, int idx) { Part::Datum* pcDatum = static_cast<Part::Datum*>(DatumView->getObject()); Base::Placement pl = pcDatum->superPlacement.getValue(); Base::Vector3d pos = pl.getPosition(); if (idx == 0) { pos.x = ui->superplacementX->value().getValueAs(Base::Quantity::MilliMetre); } if (idx == 1) { pos.y = ui->superplacementY->value().getValueAs(Base::Quantity::MilliMetre); } if (idx == 2) { pos.z = ui->superplacementZ->value().getValueAs(Base::Quantity::MilliMetre); } if (idx >= 0 && idx <= 2){ pl.setPosition(pos); } Base::Rotation rot = pl.getRotation(); double yaw, pitch, roll; rot.getYawPitchRoll(yaw, pitch, roll); if (idx == 3) { yaw = ui->superplacementYaw->value().getValueAs(Base::Quantity::Degree); } if (idx == 4) { pitch = ui->superplacementPitch->value().getValueAs(Base::Quantity::Degree); } if (idx == 5) { roll = ui->superplacementRoll->value().getValueAs(Base::Quantity::Degree); } if (idx >= 3 && idx <= 5){ rot.setYawPitchRoll(yaw,pitch,roll); pl.setRotation(rot); } pcDatum->superPlacement.setValue(pl); updatePreview(); }