diff --git a/src/Mod/PartDesign/App/FeatureHole.cpp b/src/Mod/PartDesign/App/FeatureHole.cpp index 7a6c1d5061..2c635f7f2e 100644 --- a/src/Mod/PartDesign/App/FeatureHole.cpp +++ b/src/Mod/PartDesign/App/FeatureHole.cpp @@ -498,17 +498,23 @@ Hole::Hole() void Hole::updateHoleCutParams() { + std::string holeCutType = HoleCutType.getValueAsString(); + + // there is no cut, thus return + if (holeCutType == "None") + return; + + if (ThreadType.getValue() < 0) { + throw Base::IndexError("Thread type out of range"); + return; + } + std::string threadType = ThreadType.getValueAsString(); - if (threadType == "ISOMetricProfile" || threadType == "ISOMetricFineProfile") { - std::string holeCutType = HoleCutType.getValueAsString(); - if (ThreadType.getValue() < 0) - throw Base::IndexError("Thread type out of range"); - if (ThreadSize.getValue() < 0) + if (ThreadSize.getValue() < 0) { throw Base::IndexError("Thread size out of range"); - - if (holeCutType == "None") return; + } // get diameter and size double diameter = threadDescription[ThreadType.getValue()][ThreadSize.getValue()].diameter; @@ -580,6 +586,28 @@ void Hole::updateHoleCutParams() HoleCutDepth.setValue(diameter * 1.25); } } + else { // we have an UTS profile + // get diameter + double diameter = threadDescription[ThreadType.getValue()][ThreadSize.getValue()].diameter; + + // we don't update for these settings but we need to set a value for new holes + // if we have a cut but the values are zero, we assume it is a new hole + // we use rules of thumbs as proposal + if (holeCutType == "Counterbore") { + if (HoleCutDiameter.getValue() == 0.0) { + HoleCutDiameter.setValue(diameter * 1.6); + HoleCutDepth.setValue(diameter * 0.9); + } + if (HoleCutDepth.getValue() == 0.0) + HoleCutDepth.setValue(diameter * 0.9); + } + else if (holeCutType == "Countersink") { + if (HoleCutDiameter.getValue() == 0.0) { + HoleCutDiameter.setValue(diameter * 1.7); + HoleCutCountersinkAngle.setValue(82.0); + } + } + } } void Hole::updateDiameterParam() diff --git a/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp b/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp index db370304c5..6dcfe8d44b 100644 --- a/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp @@ -72,7 +72,7 @@ TaskHoleParameters::TaskHoleParameters(ViewProviderHole *HoleView, QWidget *pare ui->ThreadType->addItem(tr("None"), QByteArray("None")); ui->ThreadType->addItem(tr("ISO metric regular profile"), QByteArray("ISO")); ui->ThreadType->addItem(tr("ISO metric fine profile"), QByteArray("ISO")); - ui->ThreadType->addItem(tr("UTS regular profile"), QByteArray("UTS")); + ui->ThreadType->addItem(tr("UTS coarse profile"), QByteArray("UTS")); ui->ThreadType->addItem(tr("UTS fine profile"), QByteArray("UTS")); ui->ThreadType->addItem(tr("UTS extra fine profile"), QByteArray("UTS")); diff --git a/src/Mod/PartDesign/Gui/TaskHoleParameters.ui b/src/Mod/PartDesign/Gui/TaskHoleParameters.ui index 2127434a3d..055ab6ae98 100644 --- a/src/Mod/PartDesign/Gui/TaskHoleParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskHoleParameters.ui @@ -29,6 +29,9 @@ deg + + 0.000000000000000 + @@ -78,6 +81,9 @@ mm + + 0.000000000000000 + @@ -98,6 +104,9 @@ mm + + 0.000000000000000 + @@ -115,6 +124,9 @@ mm + + 0.000000000000000 + @@ -122,6 +134,9 @@ mm + + 0.000000000000000 + @@ -132,6 +147,9 @@ mm + + 0.000000000000000 + @@ -185,6 +203,9 @@ deg + + 0.000000000000000 + @@ -200,6 +221,9 @@ mm + + 0.000000000000000 + @@ -274,6 +298,9 @@ deg + + 0.000000000000000 + @@ -288,6 +315,9 @@ deg + + 0.000000000000000 +