Skip to content

Commit

Permalink
[PD] more holes fixes
Browse files Browse the repository at this point in the history
- initialization: thread direction only sensible if there is a thread
- initialization: hole diameter can only be changed if there is no profile
- initialization: only enable allowed hole cut parameters
- also for the ISO profiles it is allowed to countersink/bore deeper/less deep
- UI file: add some tooltips (the other changes were done automatically by Qt's designer)
  • Loading branch information
donovaly authored and wwmayer committed Oct 22, 2020
1 parent 9d36253 commit 896a1bc
Show file tree
Hide file tree
Showing 3 changed files with 318 additions and 228 deletions.
67 changes: 51 additions & 16 deletions src/Mod/PartDesign/App/FeatureHole.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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();
}
Expand Down
32 changes: 32 additions & 0 deletions src/Mod/PartDesign/Gui/TaskHoleParameters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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)
Expand Down
Loading

0 comments on commit 896a1bc

Please sign in to comment.