[PD] hole dialog UI fixes

This PR is the first in a series of probably 3 PRs to fix known hole dialog bugs.

This one fixes:

- the .ui file issues
- readonly status issues of some widgets/properties (e.g. when the hole is through all, disable drill point settings)
- the bug that updateHoleCutParams() overwrote the previously correctly determined hole diameter
- just a trifle: change a function name to fit into the naming scheme
This commit is contained in:
donovaly
2021-01-31 21:58:22 +01:00
committed by wwmayer
parent 3ebd7d119b
commit 7eb9b5ed42
4 changed files with 218 additions and 106 deletions

View File

@@ -424,7 +424,9 @@ const double Hole::metricHoleDiameters[36][4] =
{ 6.0, 6.4, 6.6, 7.0},
{ 7.0, 7.4, 7.6, 8.0},
{ 8.0, 8.4, 9.0, 10.0},
// 9.0 undefined
{ 10.0, 10.5, 11.0, 12.0},
// 11.0 undefined
{ 12.0, 13.0, 13.5, 14.5},
{ 14.0, 15.0, 15.5, 16.5},
{ 16.0, 17.0, 17.5, 18.5},
@@ -612,6 +614,10 @@ void Hole::updateHoleCutParams()
return;
}
// get diameter and size
double diameterVal = Diameter.getValue();
// handle thread types
std::string threadType = ThreadType.getValueAsString();
if (threadType == "ISOMetricProfile" || threadType == "ISOMetricFineProfile") {
if (ThreadSize.getValue() < 0) {
@@ -619,35 +625,50 @@ void Hole::updateHoleCutParams()
return;
}
// get diameter and size
double diameter = threadDescription[ThreadType.getValue()][ThreadSize.getValue()].diameter;
std::string threadSize{ ThreadSize.getValueAsString() };
// we don't update for these settings but we need to set a value for new holes
// furthermore we must assure the hole cut diameter is not <= the hole diameter
// if we have a cut but the values are zero, we assume it is a new hole
// we take in this case the values from the norm ISO 4762 or ISO 10642
if (holeCutType == "Counterbore") {
// read ISO 4762 values
const CutDimensionSet& counter = find_cutDimensionSet(threadType, "ISO 4762");
const CounterBoreDimension& dimen = counter.get_bore(threadSize);
if (HoleCutDiameter.getValue() == 0.0) {
HoleCutDiameter.setValue(dimen.diameter);
HoleCutDepth.setValue(dimen.depth);
if (HoleCutDiameter.getValue() == 0.0 || HoleCutDiameter.getValue() <= diameterVal) {
// there is no norm defining counterbores for all sizes, thus we need to use the
// same fallback as for the case HoleCutTypeMap.count(key)
if (dimen.diameter != 0.0) {
HoleCutDiameter.setValue(dimen.diameter);
HoleCutDepth.setValue(dimen.depth);
}
else {
// valid values for visual feedback
HoleCutDiameter.setValue(Diameter.getValue() + 0.1);
HoleCutDepth.setValue(0.1);
}
}
if (HoleCutDepth.getValue() == 0.0)
HoleCutDepth.setValue(dimen.depth);
HoleCutCountersinkAngle.setReadOnly(true);
}
else if (holeCutType == "Countersink") {
// read ISO 10642 values
const CutDimensionSet& counter = find_cutDimensionSet(threadType, "ISO 10642");
if (HoleCutDiameter.getValue() == 0.0) {
if (HoleCutDiameter.getValue() == 0.0 || HoleCutDiameter.getValue() <= diameterVal) {
const CounterSinkDimension& dimen = counter.get_sink(threadSize);
HoleCutDiameter.setValue(dimen.diameter);
if (dimen.diameter != 0.0) {
HoleCutDiameter.setValue(dimen.diameter);
}
else {
HoleCutDiameter.setValue(Diameter.getValue() + 0.1);
}
HoleCutCountersinkAngle.setValue(counter.angle);
}
if (HoleCutCountersinkAngle.getValue() == 0.0) {
HoleCutCountersinkAngle.setValue(counter.angle);
}
HoleCutCountersinkAngle.setReadOnly(false);
}
// cut definition
@@ -688,39 +709,38 @@ void Hole::updateHoleCutParams()
// handle legacy types but dont change user settings for
// user defined None, Counterbore and Countersink
else if (holeCutType == "Cheesehead (deprecated)") {
HoleCutDiameter.setValue(diameter * 1.6);
HoleCutDepth.setValue(diameter * 0.6);
HoleCutDiameter.setValue(diameterVal * 1.6);
HoleCutDepth.setValue(diameterVal * 0.6);
}
else if (holeCutType == "Countersink socket screw (deprecated)") {
HoleCutDiameter.setValue(diameter * 2.0);
HoleCutDepth.setValue(diameter * 0.0);
HoleCutDiameter.setValue(diameterVal * 2.0);
HoleCutDepth.setValue(diameterVal * 0.0);
if (HoleCutCountersinkAngle.getValue() == 0.0) {
HoleCutCountersinkAngle.setValue(90.0);
}
}
else if (holeCutType == "Cap screw (deprecated)") {
HoleCutDiameter.setValue(diameter * 1.5);
HoleCutDepth.setValue(diameter * 1.25);
HoleCutDiameter.setValue(diameterVal * 1.5);
HoleCutDepth.setValue(diameterVal * 1.25);
}
}
else { // we have an UTS profile or none
// 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
// furthermore we must assure the hole cut diameter is not <= the hole diameter
// 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 (HoleCutDiameter.getValue() == 0.0 || HoleCutDiameter.getValue() <= diameterVal) {
HoleCutDiameter.setValue(diameterVal * 1.6);
HoleCutDepth.setValue(diameterVal * 0.9);
}
if (HoleCutDepth.getValue() == 0.0)
HoleCutDepth.setValue(diameter * 0.9);
HoleCutDepth.setValue(diameterVal * 0.9);
}
else if (holeCutType == "Countersink") {
if (HoleCutDiameter.getValue() == 0.0) {
HoleCutDiameter.setValue(diameter * 1.7);
if (HoleCutDiameter.getValue() == 0.0 || HoleCutDiameter.getValue() <= diameterVal) {
HoleCutDiameter.setValue(diameterVal * 1.7);
// 82 degrees for UTS, 90 otherwise
if (threadType != "None")
HoleCutCountersinkAngle.setValue(82.0);
@@ -996,10 +1016,14 @@ void Hole::onChanged(const App::Property *prop)
ThreadCutOffOuter.setReadOnly(v);
}
else if (prop == &DrillPoint) {
if (DrillPoint.getValue() == 1)
if (DrillPoint.getValue() == 1) {
DrillPointAngle.setReadOnly(false);
else
DrillForDepth.setReadOnly(false);
}
else {
DrillPointAngle.setReadOnly(true);
DrillForDepth.setReadOnly(true);
}
}
else if (prop == &Tapered) {
if (Tapered.getValue())
@@ -1009,11 +1033,16 @@ void Hole::onChanged(const App::Property *prop)
}
else if (prop == &ThreadSize) {
updateDiameterParam();
updateHoleCutParams();
// updateHoleCutParams() will later automatically be called because updateDiameterParam() changes &Diameter
}
else if (prop == &ThreadFit) {
updateDiameterParam();
}
else if (prop == &Diameter) {
// a changed diameter means we also need to check the hole cut
// because the hole cut diameter must not be <= than the diameter
updateHoleCutParams();
}
else if (prop == &HoleCutType) {
std::string holeCutType;
if (HoleCutType.isValid())
@@ -1045,6 +1074,8 @@ void Hole::onChanged(const App::Property *prop)
}
else if (prop == &DepthType) {
Depth.setReadOnly((std::string(DepthType.getValueAsString()) != "Dimension"));
DrillPoint.setReadOnly((std::string(DepthType.getValueAsString()) != "Dimension"));
DrillPointAngle.setReadOnly((std::string(DepthType.getValueAsString()) != "Dimension"));
DrillForDepth.setReadOnly((std::string(DepthType.getValueAsString()) != "Dimension"));
}
ProfileBased::onChanged(prop);

View File

@@ -152,11 +152,28 @@ TaskHoleParameters::TaskHoleParameters(ViewProviderHole *HoleView, QWidget *pare
ui->drillPointAngled->setChecked(true);
ui->DrillPointAngle->setValue(pcHole->DrillPointAngle.getValue());
ui->DrillForDepth->setChecked(pcHole->DrillForDepth.getValue());
// DrillForDepth is only enabled (sensible) if type is 'Dimension'
if (std::string(pcHole->DepthType.getValueAsString()) == "Dimension")
// drill point settings are only enabled (sensible) if type is 'Dimension'
if (std::string(pcHole->DepthType.getValueAsString()) == "Dimension") {
ui->drillPointFlat->setEnabled(true);
ui->drillPointAngled->setEnabled(true);
ui->DrillPointAngle->setEnabled(true);
ui->DrillForDepth->setEnabled(true);
else
}
else {
ui->drillPointFlat->setEnabled(false);
ui->drillPointAngled->setEnabled(false);
ui->DrillPointAngle->setEnabled(false);
ui->DrillForDepth->setEnabled(false);
}
// drill point is sensible but flat, disable angle and option
if (!ui->drillPointFlat->isChecked()) {
ui->DrillPointAngle->setEnabled(true);
ui->DrillForDepth->setEnabled(true);
}
else {
ui->DrillPointAngle->setEnabled(false);
ui->DrillForDepth->setEnabled(false);
}
ui->Tapered->setChecked(pcHole->Tapered.getValue());
// Angle is only enabled (sensible) if tapered
ui->TaperedAngle->setEnabled(pcHole->Tapered.getValue());
@@ -171,7 +188,7 @@ TaskHoleParameters::TaskHoleParameters(ViewProviderHole *HoleView, QWidget *pare
connect(ui->Diameter, SIGNAL(valueChanged(double)), this, SLOT(threadDiameterChanged(double)));
connect(ui->directionRightHand, SIGNAL(clicked(bool)), this, SLOT(threadDirectionChanged()));
connect(ui->directionLeftHand, SIGNAL(clicked(bool)), this, SLOT(threadDirectionChanged()));
connect(ui->HoleCutType, SIGNAL(currentIndexChanged(int)), this, SLOT(holeCutChanged(int)));
connect(ui->HoleCutType, SIGNAL(currentIndexChanged(int)), this, SLOT(holeCutTypeChanged(int)));
connect(ui->HoleCutDiameter, SIGNAL(valueChanged(double)), this, SLOT(holeCutDiameterChanged(double)));
connect(ui->HoleCutDepth, SIGNAL(valueChanged(double)), this, SLOT(holeCutDepthChanged(double)));
connect(ui->HoleCutCountersinkAngle, SIGNAL(valueChanged(double)), this, SLOT(holeCutCountersinkAngleChanged(double)));
@@ -254,7 +271,7 @@ void TaskHoleParameters::threadCutOffOuterChanged(double value)
recomputeFeature();
}
void TaskHoleParameters::holeCutChanged(int index)
void TaskHoleParameters::holeCutTypeChanged(int index)
{
if (index < 0)
return;
@@ -306,7 +323,7 @@ void TaskHoleParameters::holeCutCountersinkAngleChanged(double value)
{
PartDesign::Hole* pcHole = static_cast<PartDesign::Hole*>(vp->getObject());
pcHole->HoleCutCountersinkAngle.setValue((double)value);
pcHole->HoleCutCountersinkAngle.setValue(value);
recomputeFeature();
}
@@ -316,11 +333,19 @@ void TaskHoleParameters::depthChanged(int index)
pcHole->DepthType.setValue(index);
// disable DrillforDepth if not 'Dimension'
if (std::string(pcHole->DepthType.getValueAsString()) == "Dimension")
// disable drill point widgets if not 'Dimension'
if (std::string(pcHole->DepthType.getValueAsString()) == "Dimension") {
ui->drillPointFlat->setEnabled(true);
ui->drillPointAngled->setEnabled(true);
ui->DrillPointAngle->setEnabled(true);
ui->DrillForDepth->setEnabled(true);
else
}
else {
ui->drillPointFlat->setEnabled(false);
ui->drillPointAngled->setEnabled(false);
ui->DrillPointAngle->setEnabled(false);
ui->DrillForDepth->setEnabled(false);
}
recomputeFeature();
}

View File

@@ -93,7 +93,7 @@ private Q_SLOTS:
void threadAngleChanged(double value);
void threadDiameterChanged(double value);
void threadDirectionChanged();
void holeCutChanged(int index);
void holeCutTypeChanged(int index);
void holeCutDiameterChanged(double value);
void holeCutDepthChanged(double value);
void holeCutCountersinkAngleChanged(double value);

View File

@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>354</width>
<width>335</width>
<height>463</height>
</rect>
</property>
@@ -40,10 +40,10 @@
</property>
</widget>
</item>
<item row="1" column="1" colspan="5">
<item row="1" column="1" colspan="4">
<widget class="QComboBox" name="ThreadType">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -58,6 +58,12 @@
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="Threaded">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Whether the hole gets a thread</string>
</property>
@@ -84,6 +90,12 @@
</item>
<item row="3" column="1">
<widget class="QRadioButton" name="directionRightHand">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string/>
</property>
@@ -97,6 +109,12 @@
</item>
<item row="5" column="1">
<widget class="QRadioButton" name="directionLeftHand">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Left hand</string>
</property>
@@ -121,37 +139,43 @@
<item row="6" column="1">
<widget class="QComboBox" name="ThreadSize">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>140</width>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="6" column="3">
<item row="6" column="2">
<widget class="QLabel" name="label_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Clearance</string>
</property>
</widget>
</item>
<item row="6" column="5">
<item row="6" column="4">
<widget class="QComboBox" name="ThreadFit">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>110</width>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
@@ -192,14 +216,14 @@ Only available for holes without thread</string>
<item row="7" column="1">
<widget class="QComboBox" name="ThreadClass">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>140</width>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
@@ -208,23 +232,7 @@ Only available for holes without thread</string>
</property>
</widget>
</item>
<item row="7" column="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>13</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="7" column="3" colspan="2">
<item row="7" column="2" colspan="2">
<widget class="QLabel" name="label_7">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
@@ -237,17 +245,17 @@ Only available for holes without thread</string>
</property>
</widget>
</item>
<item row="7" column="5">
<item row="7" column="4">
<widget class="Gui::PrefQuantitySpinBox" name="Diameter">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>110</width>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
@@ -278,14 +286,14 @@ Only available for holes without thread</string>
<item row="8" column="1">
<widget class="QComboBox" name="DepthType">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>140</width>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
@@ -301,10 +309,10 @@ Only available for holes without thread</string>
</item>
</widget>
</item>
<item row="8" column="3" colspan="3">
<item row="8" column="2" colspan="3">
<widget class="Gui::PrefQuantitySpinBox" name="Depth">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -334,10 +342,10 @@ Only available for holes without thread</string>
</property>
</widget>
</item>
<item row="10" column="1" colspan="5">
<item row="10" column="1" colspan="4">
<widget class="QComboBox" name="HoleCutType">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -355,15 +363,21 @@ Only available for holes without thread</string>
</item>
<item row="11" column="1">
<widget class="QLabel" name="label_11">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Diameter</string>
</property>
</widget>
</item>
<item row="11" column="3" colspan="3">
<item row="11" column="2" colspan="3">
<widget class="Gui::PrefQuantitySpinBox" name="HoleCutDiameter">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -390,15 +404,21 @@ Only available for holes without thread</string>
</item>
<item row="12" column="1">
<widget class="QLabel" name="label_12">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Depth</string>
</property>
</widget>
</item>
<item row="12" column="3" colspan="3">
<item row="12" column="2" colspan="3">
<widget class="Gui::PrefQuantitySpinBox" name="HoleCutDepth">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -422,15 +442,21 @@ Only available for holes without thread</string>
</item>
<item row="13" column="1">
<widget class="QLabel" name="label_10">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Countersink angle</string>
</property>
</widget>
</item>
<item row="13" column="3" colspan="3">
<item row="13" column="2" colspan="3">
<widget class="Gui::PrefQuantitySpinBox" name="HoleCutCountersinkAngle">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -467,6 +493,12 @@ Only available for holes without thread</string>
</item>
<item row="15" column="0">
<widget class="QLabel" name="label_15">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Type</string>
</property>
@@ -478,7 +510,7 @@ Only available for holes without thread</string>
<item row="15" column="1">
<widget class="QRadioButton" name="drillPointFlat">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -494,7 +526,7 @@ Only available for holes without thread</string>
<item row="18" column="1">
<widget class="QRadioButton" name="drillPointAngled">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -507,10 +539,10 @@ Only available for holes without thread</string>
</attribute>
</widget>
</item>
<item row="18" column="3" colspan="3">
<item row="18" column="2" colspan="3">
<widget class="Gui::PrefQuantitySpinBox" name="DrillPointAngle">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -523,8 +555,14 @@ Only available for holes without thread</string>
</property>
</widget>
</item>
<item row="19" column="3" colspan="3">
<item row="19" column="2" colspan="3">
<widget class="QCheckBox" name="DrillForDepth">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>The size of the drill point will be taken into
account for the depth of blind holes</string>
@@ -543,6 +581,12 @@ account for the depth of blind holes</string>
</item>
<item row="21" column="0">
<widget class="QCheckBox" name="Tapered">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Tapered</string>
</property>
@@ -550,6 +594,12 @@ account for the depth of blind holes</string>
</item>
<item row="21" column="1">
<widget class="Gui::PrefQuantitySpinBox" name="TaperedAngle">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Taper angle for the hole
90 degree: straight hole
@@ -564,8 +614,14 @@ over 90: larger hole radius at the bottom</string>
</property>
</widget>
</item>
<item row="21" column="4" colspan="2">
<item row="21" column="3" colspan="2">
<widget class="QCheckBox" name="Reversed">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Reverses the hole direction</string>
</property>
@@ -574,7 +630,7 @@ over 90: larger hole radius at the bottom</string>
</property>
</widget>
</item>
</layout>
</layout>
</widget>
<customwidgets>
<customwidget>
@@ -620,28 +676,12 @@ over 90: larger hole radius at the bottom</string>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>49</x>
<y>451</y>
<x>40</x>
<y>540</y>
</hint>
<hint type="destinationlabel">
<x>163</x>
<y>453</y>
</hint>
</hints>
</connection>
<connection>
<sender>Threaded</sender>
<signal>clicked(bool)</signal>
<receiver>ThreadFit</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>136</x>
<y>63</y>
</hint>
<hint type="destinationlabel">
<x>344</x>
<y>142</y>
<y>540</y>
</hint>
</hints>
</connection>
@@ -656,14 +696,30 @@ over 90: larger hole radius at the bottom</string>
<y>63</y>
</hint>
<hint type="destinationlabel">
<x>163</x>
<y>168</y>
<x>136</x>
<y>280</y>
</hint>
</hints>
</connection>
<connection>
<sender>Threaded</sender>
<signal>clicked(bool)</signal>
<receiver>ThreadFit</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>136</x>
<y>63</y>
</hint>
<hint type="destinationlabel">
<x>322</x>
<y>254</y>
</hint>
</hints>
</connection>
</connections>
<buttongroups>
<buttongroup name="drillPointButtonGroup"/>
<buttongroup name="directionButtonGroup"/>
<buttongroup name="drillPointButtonGroup"/>
</buttongroups>
</ui>