Allow extruding from a datum plane to another face or plane, optionally with an offset
This commit is contained in:
committed by
Stefan Tröger
parent
fa020cf867
commit
f1b5a6044d
@@ -72,6 +72,8 @@ TaskPadParameters::TaskPadParameters(ViewProviderPad *PadView,bool newObj, QWidg
|
||||
this, SLOT(onReversed(bool)));
|
||||
connect(ui->lengthEdit2, SIGNAL(valueChanged(double)),
|
||||
this, SLOT(onLength2Changed(double)));
|
||||
connect(ui->spinOffset, SIGNAL(valueChanged(double)),
|
||||
this, SLOT(onOffsetChanged(double)));
|
||||
connect(ui->changeMode, SIGNAL(currentIndexChanged(int)),
|
||||
this, SLOT(onModeChanged(int)));
|
||||
connect(ui->buttonFace, SIGNAL(clicked()),
|
||||
@@ -86,6 +88,7 @@ TaskPadParameters::TaskPadParameters(ViewProviderPad *PadView,bool newObj, QWidg
|
||||
// Temporarily prevent unnecessary feature recomputes
|
||||
ui->lengthEdit->blockSignals(true);
|
||||
ui->lengthEdit2->blockSignals(true);
|
||||
ui->spinOffset->blockSignals(true);
|
||||
ui->checkBoxMidplane->blockSignals(true);
|
||||
ui->checkBoxReversed->blockSignals(true);
|
||||
ui->buttonFace->blockSignals(true);
|
||||
@@ -102,6 +105,7 @@ TaskPadParameters::TaskPadParameters(ViewProviderPad *PadView,bool newObj, QWidg
|
||||
bool midplane = pcPad->Midplane.getValue();
|
||||
bool reversed = pcPad->Reversed.getValue();
|
||||
Base::Quantity l2 = pcPad->Length2.getQuantityValue();
|
||||
double off = pcPad->Offset.getValue();
|
||||
int index = pcPad->Type.getValue(); // must extract value here, clear() kills it!
|
||||
App::DocumentObject* obj = pcPad->UpToFace.getValue();
|
||||
std::vector<std::string> subStrings = pcPad->UpToFace.getSubValues();
|
||||
@@ -120,11 +124,13 @@ TaskPadParameters::TaskPadParameters(ViewProviderPad *PadView,bool newObj, QWidg
|
||||
ui->lengthEdit2->setMinimum(0);
|
||||
ui->lengthEdit2->setMaximum(INT_MAX);
|
||||
ui->lengthEdit2->setValue(l2);
|
||||
ui->spinOffset->setMaximum(INT_MAX);
|
||||
ui->spinOffset->setMinimum(-INT_MAX);
|
||||
ui->spinOffset->setValue(off);
|
||||
|
||||
// Bind input fields to properties
|
||||
ui->lengthEdit->bind(pcPad->Length);
|
||||
ui->lengthEdit2->bind(pcPad->Length2);
|
||||
|
||||
ui->checkBoxMidplane->setChecked(midplane);
|
||||
// According to bug #0000521 the reversed option
|
||||
// shouldn't be de-activated if the pad has a support face
|
||||
@@ -132,7 +138,7 @@ TaskPadParameters::TaskPadParameters(ViewProviderPad *PadView,bool newObj, QWidg
|
||||
if ((obj != NULL) && PartDesign::Feature::isDatum(obj))
|
||||
ui->lineFaceName->setText(QString::fromAscii(obj->getNameInDocument()));
|
||||
else if (faceId >= 0)
|
||||
ui->lineFaceName->setText(QString::fromAscii(obj->getNameInDocument()) + tr("Face") +
|
||||
ui->lineFaceName->setText(QString::fromAscii(obj->getNameInDocument()) + QString::fromAscii(":") + tr("Face") +
|
||||
QString::number(faceId));
|
||||
else
|
||||
ui->lineFaceName->setText(tr("No face selected"));
|
||||
@@ -148,6 +154,7 @@ TaskPadParameters::TaskPadParameters(ViewProviderPad *PadView,bool newObj, QWidg
|
||||
// activate and de-activate dialog elements as appropriate
|
||||
ui->lengthEdit->blockSignals(false);
|
||||
ui->lengthEdit2->blockSignals(false);
|
||||
ui->spinOffset->blockSignals(false);
|
||||
ui->checkBoxMidplane->blockSignals(false);
|
||||
ui->checkBoxReversed->blockSignals(false);
|
||||
ui->buttonFace->blockSignals(false);
|
||||
@@ -167,8 +174,13 @@ TaskPadParameters::TaskPadParameters(ViewProviderPad *PadView,bool newObj, QWidg
|
||||
void TaskPadParameters::updateUI(int index)
|
||||
{
|
||||
if (index == 0) { // dimension
|
||||
ui->lengthEdit->setVisible(true);
|
||||
ui->lengthEdit->setEnabled(true);
|
||||
ui->lengthEdit->selectNumber();
|
||||
ui->labelLength->setVisible(true);
|
||||
ui->spinOffset->setVisible(false);
|
||||
ui->spinOffset->setEnabled(false);
|
||||
ui->labelOffset->setVisible(false);
|
||||
// Make sure that the spin box has the focus to get key events
|
||||
// Calling setFocus() directly doesn't work because the spin box is not
|
||||
// yet visible.
|
||||
@@ -176,22 +188,38 @@ void TaskPadParameters::updateUI(int index)
|
||||
ui->checkBoxMidplane->setEnabled(true);
|
||||
// Reverse only makes sense if Midplane is not true
|
||||
ui->checkBoxReversed->setEnabled(!ui->checkBoxMidplane->isChecked());
|
||||
ui->labelLength2->setVisible(false);
|
||||
ui->lengthEdit2->setVisible(false);
|
||||
ui->lengthEdit2->setEnabled(false);
|
||||
ui->buttonFace->setEnabled(false);
|
||||
ui->lineFaceName->setEnabled(false);
|
||||
onButtonFace(false);
|
||||
} else if (index == 1 || index == 2) { // up to first/last
|
||||
ui->lengthEdit->setVisible(false);
|
||||
ui->lengthEdit->setEnabled(false);
|
||||
ui->labelLength->setVisible(false);
|
||||
ui->spinOffset->setVisible(true);
|
||||
ui->spinOffset->setEnabled(true);
|
||||
ui->labelOffset->setVisible(true);
|
||||
ui->checkBoxMidplane->setEnabled(false);
|
||||
ui->checkBoxReversed->setEnabled(true);
|
||||
ui->labelLength2->setVisible(false);
|
||||
ui->lengthEdit2->setVisible(false);
|
||||
ui->lengthEdit2->setEnabled(false);
|
||||
ui->buttonFace->setEnabled(false);
|
||||
ui->lineFaceName->setEnabled(false);
|
||||
onButtonFace(false);
|
||||
} else if (index == 3) { // up to face
|
||||
ui->lengthEdit->setVisible(false);
|
||||
ui->lengthEdit->setEnabled(false);
|
||||
ui->labelLength->setVisible(false);
|
||||
ui->spinOffset->setVisible(true);
|
||||
ui->spinOffset->setEnabled(true);
|
||||
ui->labelOffset->setVisible(true);
|
||||
ui->checkBoxMidplane->setEnabled(false);
|
||||
ui->checkBoxReversed->setEnabled(false);
|
||||
ui->labelLength2->setVisible(false);
|
||||
ui->lengthEdit2->setVisible(false);
|
||||
ui->lengthEdit2->setEnabled(false);
|
||||
ui->buttonFace->setEnabled(true);
|
||||
ui->lineFaceName->setEnabled(true);
|
||||
@@ -201,10 +229,17 @@ void TaskPadParameters::updateUI(int index)
|
||||
onButtonFace(true);
|
||||
} else { // two dimensions
|
||||
ui->lengthEdit->setEnabled(true);
|
||||
ui->lengthEdit->setVisible(true);
|
||||
ui->lengthEdit->selectNumber();
|
||||
QMetaObject::invokeMethod(ui->lengthEdit, "setFocus", Qt::QueuedConnection);
|
||||
ui->labelLength->setVisible(true);
|
||||
ui->spinOffset->setVisible(false);
|
||||
ui->spinOffset->setEnabled(false);
|
||||
ui->labelOffset->setVisible(false);
|
||||
ui->checkBoxMidplane->setEnabled(false);
|
||||
ui->checkBoxReversed->setEnabled(false);
|
||||
ui->labelLength2->setVisible(true);
|
||||
ui->lengthEdit2->setVisible(true);
|
||||
ui->lengthEdit2->setEnabled(true);
|
||||
ui->buttonFace->setEnabled(false);
|
||||
ui->lineFaceName->setEnabled(false);
|
||||
@@ -268,6 +303,13 @@ void TaskPadParameters::onLength2Changed(double len)
|
||||
recomputeFeature();
|
||||
}
|
||||
|
||||
void TaskPadParameters::onOffsetChanged(double len)
|
||||
{
|
||||
PartDesign::Pad* pcPad = static_cast<PartDesign::Pad*>(vp->getObject());
|
||||
pcPad->Offset.setValue(len);
|
||||
recomputeFeature();
|
||||
}
|
||||
|
||||
void TaskPadParameters::onModeChanged(int index)
|
||||
{
|
||||
PartDesign::Pad* pcPad = static_cast<PartDesign::Pad*>(vp->getObject());
|
||||
@@ -322,6 +364,11 @@ double TaskPadParameters::getLength2(void) const
|
||||
return ui->lengthEdit2->value().getValue();
|
||||
}
|
||||
|
||||
double TaskPadParameters::getOffset(void) const
|
||||
{
|
||||
return ui->spinOffset->value();
|
||||
}
|
||||
|
||||
int TaskPadParameters::getMode(void) const
|
||||
{
|
||||
return ui->changeMode->currentIndex();
|
||||
@@ -346,6 +393,7 @@ void TaskPadParameters::changeEvent(QEvent *e)
|
||||
if (e->type() == QEvent::LanguageChange) {
|
||||
ui->lengthEdit->blockSignals(true);
|
||||
ui->lengthEdit2->blockSignals(true);
|
||||
ui->spinOffset->blockSignals(true);
|
||||
ui->lineFaceName->blockSignals(true);
|
||||
ui->changeMode->blockSignals(true);
|
||||
int index = ui->changeMode->currentIndex();
|
||||
@@ -369,10 +417,11 @@ void TaskPadParameters::changeEvent(QEvent *e)
|
||||
ui->lineFaceName->setPlaceholderText(tr("No face selected"));
|
||||
#endif
|
||||
ui->lineFaceName->setText(ok ?
|
||||
parts[0] + tr(":Face") + QString::number(faceId) :
|
||||
parts[0] + QString::fromAscii(":") + tr("Face") + QString::number(faceId) :
|
||||
QString());
|
||||
ui->lengthEdit->blockSignals(false);
|
||||
ui->lengthEdit2->blockSignals(false);
|
||||
ui->spinOffset->blockSignals(false);
|
||||
ui->lineFaceName->blockSignals(false);
|
||||
ui->changeMode->blockSignals(false);
|
||||
}
|
||||
@@ -404,6 +453,7 @@ void TaskPadParameters::apply()
|
||||
Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.UpToFace = %s", name.c_str(), facename.c_str());
|
||||
} else
|
||||
Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.UpToFace = None", cname);
|
||||
Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Offset = %f", name.c_str(), getOffset());
|
||||
Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.recompute()");
|
||||
if (!vp->getObject()->isValid())
|
||||
throw Base::Exception(vp->getObject()->getStatusString());
|
||||
|
||||
Reference in New Issue
Block a user