PD: hole calculate counterbore and countersink if no standards are available

This commit is contained in:
Alfredo Monclus
2025-05-23 19:52:28 -06:00
parent 91d2b25dfd
commit 432e20c60c
2 changed files with 30 additions and 10 deletions

View File

@@ -864,9 +864,7 @@ void Hole::updateHoleCutParams()
HoleCutDepth.setValue(dimen.depth);
}
else {
// valid values for visual feedback
HoleCutDiameter.setValue(Diameter.getValue() + 0.1);
HoleCutDepth.setValue(0.1);
calculateAndSetCounterbore();
}
}
if (HoleCutDepth.getValue() == 0.0)
@@ -880,13 +878,13 @@ void Hole::updateHoleCutParams()
const CutDimensionSet& counter = find_cutDimensionSet(threadTypeStr, "ISO 10642");
if (HoleCutDiameter.getValue() == 0.0 || HoleCutDiameter.getValue() <= diameterVal) {
const CounterSinkDimension& dimen = counter.get_sink(threadSizeStr);
HoleCutCountersinkAngle.setValue(counter.angle);
if (dimen.diameter != 0.0) {
HoleCutDiameter.setValue(dimen.diameter);
}
else {
HoleCutDiameter.setValue(Diameter.getValue() + 0.1);
calculateAndSetCountersink();
}
HoleCutCountersinkAngle.setValue(counter.angle);
}
if (HoleCutCountersinkAngle.getValue() == 0.0) {
HoleCutCountersinkAngle.setValue(counter.angle);
@@ -947,9 +945,7 @@ void Hole::updateHoleCutParams()
HoleCutCountersinkAngle.setReadOnly(true);
const CounterBoreDimension& dimen = counter.get_bore(threadSizeStr);
if (dimen.thread == "None") {
// valid values for visual feedback
HoleCutDiameter.setValue(Diameter.getValue() + 0.1);
HoleCutDepth.setValue(0.1);
calculateAndSetCounterbore();
// we force custom values since there are no normed ones
HoleCutCustomValues.setReadOnly(true);
// important to set only if not already true, to avoid loop call of updateHoleCutParams()
@@ -981,12 +977,11 @@ void Hole::updateHoleCutParams()
else if (counter.cut_type == CutDimensionSet::Countersink) {
const CounterSinkDimension& dimen = counter.get_sink(threadSizeStr);
if (dimen.thread == "None") {
// valid values for visual feedback
HoleCutDiameter.setValue(Diameter.getValue() + 0.1);
// there might be an angle of zero (if no norm exists for the size)
if (HoleCutCountersinkAngle.getValue() == 0.0) {
HoleCutCountersinkAngle.setValue(counter.angle);
}
calculateAndSetCountersink();
// we force custom values since there are no normed ones
HoleCutCustomValues.setReadOnly(true);
// important to set only if not already true, to avoid loop call of updateHoleCutParams()
@@ -2525,6 +2520,29 @@ bool Hole::isDynamicCountersink(const std::string& thread,
const Hole::CounterBoreDimension Hole::CounterBoreDimension::nothing{ "None", 0.0, 0.0 };
const Hole::CounterSinkDimension Hole::CounterSinkDimension::nothing{ "None", 0.0 };
void Hole::calculateAndSetCounterbore()
{
// estimate a reasonable value since it's not on the standard
double threadDiameter = Diameter.getValue();
double dk = (1.5 * threadDiameter) + 1.0;
double k = threadDiameter;
HoleCutDiameter.setValue(dk);
HoleCutDepth.setValue(k);
}
void Hole::calculateAndSetCountersink()
{
// estimate a reasonable value since it's not on the standard
double threadDiameter = Diameter.getValue();
double dk = 2.24 * threadDiameter;
double k = 0.62 * threadDiameter;
HoleCutDiameter.setValue(dk);
HoleCutDepth.setValue(k);
}
Hole::CutDimensionKey::CutDimensionKey(const std::string& t, const std::string& c) :
thread_type{ t }, cut_name{ c }
{

View File

@@ -239,6 +239,8 @@ private:
void addCutType(const CutDimensionSet& dimensions);
void updateHoleCutParams();
void calculateAndSetCounterbore();
void calculateAndSetCountersink();
std::optional<double> determineDiameter() const;
void updateDiameterParam();
void updateThreadDepthParam();