PartDesign: Extrude 2 sides (#21794)

* PartDesign: extrude 2 sides

* Part: OpCodes XOR

* PartDesign: Remove deprecated generatePrism functions

* PartDesign: Extrude : Update Sides combobox strings

* Change "Sides" to "Mode"

* Use OpCodes::Extrude instead of Prism.
This commit is contained in:
PaddleStroke
2025-08-25 19:17:23 +02:00
committed by GitHub
parent 3b3516de71
commit a346c266e7
22 changed files with 1656 additions and 1258 deletions

View File

@@ -38,9 +38,9 @@ using namespace Gui;
TaskPocketParameters::TaskPocketParameters(ViewProviderPocket *PocketView,QWidget *parent, bool newObj)
: TaskExtrudeParameters(PocketView, parent, "PartDesign_Pocket", tr("Pocket Parameters"))
, oldLength(0)
{
ui->offsetEdit->setToolTip(tr("Offset from face at which pocket will end"));
ui->offsetEdit->setToolTip(tr("Offset from the selected face at which the pocket will end on side 1"));
ui->offsetEdit2->setToolTip(tr("Offset from the selected face at which the pocket will end on side 2"));
ui->checkBoxReversed->setToolTip(tr("Reverses pocket direction"));
// set the history path
@@ -50,6 +50,8 @@ TaskPocketParameters::TaskPocketParameters(ViewProviderPocket *PocketView,QWidge
ui->lengthEdit2->setParamGrpPath(QByteArray("User parameter:BaseApp/History/PocketLength2"));
ui->offsetEdit->setEntryName(QByteArray("Offset"));
ui->offsetEdit->setParamGrpPath(QByteArray("User parameter:BaseApp/History/PocketOffset"));
ui->offsetEdit2->setEntryName(QByteArray("Offset2"));
ui->offsetEdit2->setParamGrpPath(QByteArray("User parameter:BaseApp/History/PocketOffset2"));
ui->taperEdit->setEntryName(QByteArray("TaperAngle"));
ui->taperEdit->setParamGrpPath(QByteArray("User parameter:BaseApp/History/PocketTaperAngle"));
ui->taperEdit2->setEntryName(QByteArray("TaperAngle2"));
@@ -65,81 +67,74 @@ TaskPocketParameters::TaskPocketParameters(ViewProviderPocket *PocketView,QWidge
TaskPocketParameters::~TaskPocketParameters() = default;
void TaskPocketParameters::translateModeList(int index)
void TaskPocketParameters::translateModeList(QComboBox* box, int index)
{
ui->changeMode->clear();
ui->changeMode->addItem(tr("Dimension"));
ui->changeMode->addItem(tr("Through all"));
ui->changeMode->addItem(tr("To first"));
ui->changeMode->addItem(tr("Up to face"));
ui->changeMode->addItem(tr("Two dimensions"));
ui->changeMode->addItem(tr("Up to shape"));
ui->changeMode->setCurrentIndex(index);
box->clear();
box->addItem(tr("Dimension"));
box->addItem(tr("Through all"));
box->addItem(tr("To first"));
box->addItem(tr("Up to face"));
box->addItem(tr("Up to shape"));
box->setCurrentIndex(index);
}
void TaskPocketParameters::updateUI(int index)
void TaskPocketParameters::updateUI(Side side)
{
// update direction combobox
fillDirectionCombo();
// set and enable checkboxes
setCheckboxes(static_cast<Mode>(index), Type::Pocket);
updateWholeUI(Type::Pocket, side);
}
void TaskPocketParameters::onModeChanged(int index)
void TaskPocketParameters::onModeChanged(int index, Side side)
{
auto pcPocket = getObject<PartDesign::Pocket>();
auto& sideCtrl = getSideController(side);
switch (static_cast<Mode>(index)) {
case Mode::Dimension:
// Why? See below for "UpToFace"
if (oldLength < Precision::Confusion())
oldLength = 5.0;
pcPocket->Length.setValue(oldLength);
ui->lengthEdit->setValue(oldLength);
pcPocket->Type.setValue("Length");
sideCtrl.Type->setValue("Length");
if (side == Side::First) {
// Avoid error message
double L = sideCtrl.lengthEdit->value().getValue();
Side otherSide = side == Side::First ? Side::Second : Side::First;
auto& sideCtrl2 = getSideController(otherSide);
double L2 = static_cast<SidesMode>(getSidesMode()) == SidesMode::TwoSides
? sideCtrl2.lengthEdit->value().getValue()
: 0;
if (std::abs(L + L2) < Precision::Confusion()) {
sideCtrl.lengthEdit->setValue(5.0);
}
}
break;
case Mode::ThroughAll:
oldLength = pcPocket->Length.getValue();
pcPocket->Type.setValue("ThroughAll");
sideCtrl.Type->setValue("ThroughAll");
break;
case Mode::ToFirst:
oldLength = pcPocket->Length.getValue();
pcPocket->Type.setValue("UpToFirst");
sideCtrl.Type->setValue("UpToFirst");
break;
case Mode::ToFace:
// Note: ui->checkBoxReversed is purposely enabled because the selected face
// could be a circular one around the sketch
// Also note: Because of the code at the beginning of Pocket::execute() which is used
// to detect broken legacy parts, we must set the length to zero here!
oldLength = pcPocket->Length.getValue();
pcPocket->Type.setValue("UpToFace");
pcPocket->Length.setValue(0.0);
ui->lengthEdit->setValue(0.0);
if (ui->lineFaceName->text().isEmpty()) {
ui->buttonFace->setChecked(true);
handleLineFaceNameClick(); // sets placeholder text
sideCtrl.Type->setValue("UpToFace");
if (sideCtrl.lineFaceName->text().isEmpty()) {
sideCtrl.buttonFace->setChecked(true);
handleLineFaceNameClick(sideCtrl.lineFaceName); // sets placeholder text
}
break;
case Mode::TwoDimensions:
oldLength = pcPocket->Length.getValue();
pcPocket->Type.setValue("TwoLengths");
break;
case Mode::ToShape:
pcPocket->Type.setValue("UpToShape");
sideCtrl.Type->setValue("UpToShape");
break;
}
updateUI(index);
updateUI(side);
recomputeFeature();
}
void TaskPocketParameters::apply()
{
QString facename = QStringLiteral("None");
if (static_cast<Mode>(getMode()) == Mode::ToFace) {
facename = getFaceName();
}
applyParameters(facename);
applyParameters();
}
//**************************************************************************