diff --git a/src/Mod/PartDesign/App/FeatureHole.cpp b/src/Mod/PartDesign/App/FeatureHole.cpp index 3ab0b56bdb..136b4e7e93 100644 --- a/src/Mod/PartDesign/App/FeatureHole.cpp +++ b/src/Mod/PartDesign/App/FeatureHole.cpp @@ -637,9 +637,23 @@ void Hole::onChanged(const App::Property *prop) ThreadFit.setReadOnly(Threaded.getValue()); ThreadClass.setReadOnly(!Threaded.getValue()); Diameter.setReadOnly(true); - HoleCutDiameter.setReadOnly(true); - HoleCutDepth.setReadOnly(true); - HoleCutCountersinkAngle.setReadOnly(true); + + if (holeCutType == "None") { + HoleCutDiameter.setReadOnly(true); + HoleCutDepth.setReadOnly(true); + HoleCutCountersinkAngle.setReadOnly(true); + } + else if (holeCutType == "Counterbore") { + HoleCutDiameter.setReadOnly(true); + HoleCutDepth.setReadOnly(false); + HoleCutCountersinkAngle.setReadOnly(true); + + } + else if (holeCutType == "Countersink") { + HoleCutDiameter.setReadOnly(false); + HoleCutDepth.setReadOnly(true); + HoleCutCountersinkAngle.setReadOnly(true); + } } else if ( type == "ISOMetricFineProfile" ) { ThreadSize.setEnums(ThreadSize_ISOmetricfine_Enums); @@ -652,9 +666,23 @@ void Hole::onChanged(const App::Property *prop) ThreadFit.setReadOnly(Threaded.getValue()); ThreadClass.setReadOnly(!Threaded.getValue()); Diameter.setReadOnly(true); - HoleCutDiameter.setReadOnly(true); - HoleCutDepth.setReadOnly(true); - HoleCutCountersinkAngle.setReadOnly(true); + + if (holeCutType == "None") { + HoleCutDiameter.setReadOnly(true); + HoleCutDepth.setReadOnly(true); + HoleCutCountersinkAngle.setReadOnly(true); + } + else if (holeCutType == "Counterbore") { + HoleCutDiameter.setReadOnly(true); + HoleCutDepth.setReadOnly(false); + HoleCutCountersinkAngle.setReadOnly(true); + + } + else if (holeCutType == "Countersink") { + HoleCutDiameter.setReadOnly(false); + HoleCutDepth.setReadOnly(true); + HoleCutCountersinkAngle.setReadOnly(true); + } } else if ( type == "UNC" ) { ThreadSize.setEnums(ThreadSize_UNC_Enums); @@ -824,21 +852,28 @@ void Hole::onChanged(const App::Property *prop) threadType = ThreadType.getValueAsString(); if (HoleCutType.isValid()) holeCutType = HoleCutType.getValueAsString(); - bool holeCutEnable = ( threadType != "ISOMetricProfile" && - threadType !="ISOMetricFineProfile" && - (holeCutType != "None")); - - HoleCutDiameter.setReadOnly(!holeCutEnable); + bool holeCutEnable = (holeCutType != "None"); + + // HoleCutDiameter is only allowed for countersinks or counterbores with UTS or no profile + if (holeCutType == "None") + HoleCutDiameter.setReadOnly(true); + else if (threadType != "ISOMetricProfile" && threadType != "ISOMetricFineProfile") + HoleCutDiameter.setReadOnly(false); + else if (holeCutType == "Countersink" || holeCutType == "Countersink socket screw") + HoleCutDiameter.setReadOnly(false); + else + HoleCutDiameter.setReadOnly(true); + // HoleCutDepth can always be changed if there is a cut if (holeCutType == "Countersink" || holeCutType == "Countersink socket screw") HoleCutDepth.setReadOnly(true); else HoleCutDepth.setReadOnly(!holeCutEnable); - - if (holeCutType != "Countersink" && holeCutType != "Countersink socket screw") - HoleCutCountersinkAngle.setReadOnly(true); - else - HoleCutCountersinkAngle.setReadOnly(!holeCutEnable); + // HoleCutCountersinkAngle is only allowed for countersinks with UTS or no profile + HoleCutCountersinkAngle.setReadOnly(true); + if ((holeCutType == "Countersink" || holeCutType == "Countersink socket screw") + && (threadType != "ISOMetricProfile" && threadType != "ISOMetricFineProfile")) + HoleCutCountersinkAngle.setReadOnly(false); updateHoleCutParams(); } diff --git a/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp b/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp index 733ba79920..f5ea93da86 100644 --- a/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp @@ -105,10 +105,16 @@ TaskHoleParameters::TaskHoleParameters(ViewProviderHole *HoleView, QWidget *pare // Fit is only enabled (sensible) if not threaded ui->ThreadFit->setEnabled(!pcHole->Threaded.getValue()); ui->Diameter->setValue(pcHole->Diameter.getValue()); + // Diameter is only enabled if ThreadType is None + if (pcHole->ThreadType.getValue() != 0L) + ui->Diameter->setEnabled(false); if (pcHole->ThreadDirection.getValue() == 0L) ui->directionRightHand->setChecked(true); else ui->directionLeftHand->setChecked(true); + // ThreadDirection is only sensible if there is a thread + ui->directionRightHand->setEnabled(pcHole->Threaded.getValue()); + ui->directionLeftHand->setEnabled(pcHole->Threaded.getValue()); ui->HoleCutType->clear(); cursor = pcHole->HoleCutType.getEnums(); while (*cursor) { @@ -119,6 +125,32 @@ TaskHoleParameters::TaskHoleParameters(ViewProviderHole *HoleView, QWidget *pare ui->HoleCutDiameter->setValue(pcHole->HoleCutDiameter.getValue()); ui->HoleCutDepth->setValue(pcHole->HoleCutDepth.getValue()); ui->HoleCutCountersinkAngle->setValue(pcHole->HoleCutCountersinkAngle.getValue()); + + // only enable allowed values for hole cuts: + bool holeCutEnable = (pcHole->HoleCutType.getValue() != 0L); + QByteArray TypeClass = ui->ThreadType->itemData(pcHole->ThreadType.getValue()).toByteArray(); + + // HoleCutDiameter is only allowed for countersinks or counterbores with UTS or no profile + if (pcHole->HoleCutType.getValue() == 0L) // no cut + ui->HoleCutDiameter->setEnabled(false); + else if (TypeClass != QByteArray("ISO")) + ui->HoleCutDiameter->setEnabled(true); + else if (pcHole->HoleCutType.getValue() == 2L || pcHole->HoleCutType.getValue() == 4L) { + ui->HoleCutDiameter->setEnabled(true); + } + else + ui->HoleCutDiameter->setEnabled(false); + // HoleCutDepth can always be changed if there is a cut + if (pcHole->HoleCutType.getValue() == 2L || pcHole->HoleCutType.getValue() == 4L) + ui->HoleCutDepth->setEnabled(false); + else + ui->HoleCutDepth->setEnabled(holeCutEnable); + // HoleCutCountersinkAngle is only allowed for countersinks with UTS or no profile + ui->HoleCutCountersinkAngle->setEnabled(false); + if ((pcHole->HoleCutType.getValue() == 2L || pcHole->HoleCutType.getValue() == 4L) + && TypeClass != QByteArray("ISO")) + ui->HoleCutCountersinkAngle->setEnabled(true); + ui->DepthType->setCurrentIndex(pcHole->DepthType.getValue()); ui->Depth->setValue(pcHole->Depth.getValue()); if (pcHole->DrillPoint.getValue() == 0L) diff --git a/src/Mod/PartDesign/Gui/TaskHoleParameters.ui b/src/Mod/PartDesign/Gui/TaskHoleParameters.ui index 14ab5d8fd2..2127434a3d 100644 --- a/src/Mod/PartDesign/Gui/TaskHoleParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskHoleParameters.ui @@ -14,43 +14,55 @@ Task Hole Parameters - - - - - Standard fit - - - - - Close fit - - - - - - + + - Countersink angle + <b>Misc</b> - - - - - + + false - mm + deg - + + + + + 0 + 0 + + + + Type + + + + + + + + + 0 + 0 + + + + <b>Drill point</b> + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + @@ -58,7 +70,7 @@ - + false @@ -68,30 +80,61 @@ - - - - - 0 - 0 - + + + + false - Direction - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + Cutoff outer - - - - Threaded + + + + false + + + mm - + + + + false + + + Cutoff inner + + + + + + + mm + + + + + + + mm + + + + + + + Qt::NoContextMenu + + + mm + + + + @@ -149,11 +192,8 @@ - - - - - + + false @@ -162,10 +202,17 @@ - - + + + + mm + + + + + - <b>Misc</b> + Reversed @@ -182,47 +229,7 @@ - - - - Reversed - - - - - - - - 0 - 0 - - - - Size - - - - - - - - 0 - 0 - - - - Profile - - - - - - - Diameter - - - - + @@ -235,13 +242,6 @@ - - - - mm - - - @@ -255,10 +255,119 @@ - - + + + + Diameter + + + + + + + <b>Threading and size</b> + + + + + - mm + deg + + + + + + + Tolerance class for threaded holes according to the hole profile + + + + + + + deg + + + + + + + Threaded + + + + + + + Tapered + + + + + + + false + + + Angle + + + + + + + + 0 + 0 + + + + + Dimension + + + + + Through all + + + + + + + + + + + + + + Type + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + Countersink angle + + + + + + + Depth + + + + + + + <b>Hole cut</b> @@ -272,14 +381,36 @@ - - + + + + + 0 + 0 + + - <b>Hole cut</b> + Profile - + + + + + 0 + 0 + + + + Direction + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + @@ -314,35 +445,25 @@ - - - - Depth - - - - - - - - 0 - 0 - + + + + Hole fit, only available for holes without thread - Dimension + Standard fit - Through all + Close fit - - + + 0 @@ -350,81 +471,11 @@ - <b>Drill point</b> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + Size - - - - false - - - Cutoff inner - - - - - - - false - - - Angle - - - - - - - false - - - Cutoff outer - - - - - - - - - - Tapered - - - - - - - mm - - - - - - - - 0 - 0 - - - - Type - - - - - - - <b>Threading and size</b> - - - - + false @@ -434,46 +485,18 @@ - - - - deg + + + + Qt::Horizontal - - - - - - false + + + 40 + 20 + - - deg - - - - - - - Type - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - deg - - - - - - - mm - - +