From 60d7b1d834692cbb634b8f12d4b4626aa24e5de6 Mon Sep 17 00:00:00 2001 From: Stefan Klug Date: Fri, 21 Oct 2022 23:38:58 +0200 Subject: [PATCH] PartDesign: Add HoleCuteType "Counterdrill" --- src/Mod/PartDesign/App/FeatureHole.cpp | 25 ++++++++++++------- src/Mod/PartDesign/Gui/TaskHoleParameters.cpp | 5 ++-- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/Mod/PartDesign/App/FeatureHole.cpp b/src/Mod/PartDesign/App/FeatureHole.cpp index cdd902e6fa..929919bc18 100644 --- a/src/Mod/PartDesign/App/FeatureHole.cpp +++ b/src/Mod/PartDesign/App/FeatureHole.cpp @@ -68,7 +68,7 @@ const char* Hole::DrillPointEnums[] = { "Flat", "Angled", nullp /* "None" profile */ -const char* Hole::HoleCutType_None_Enums[] = { "None", "Counterbore", "Countersink", nullptr }; +const char* Hole::HoleCutType_None_Enums[] = { "None", "Counterbore", "Countersink", "Counterdrill", nullptr }; const char* Hole::ThreadSize_None_Enums[] = { "None", nullptr }; const char* Hole::ThreadClass_None_Enums[] = { "None", nullptr }; @@ -475,7 +475,7 @@ const Hole::UTSClearanceDefinition Hole::UTSHoleDiameters[22] = }; /* ISO coarse metric enums */ -std::vector Hole::HoleCutType_ISOmetric_Enums = { "None", "Counterbore", "Countersink", "Cheesehead (deprecated)", "Countersink socket screw (deprecated)", "Cap screw (deprecated)" }; +std::vector Hole::HoleCutType_ISOmetric_Enums = { "None", "Counterbore", "Countersink", "Cheesehead (deprecated)", "Countersink socket screw (deprecated)", "Cap screw (deprecated)", "Counterdrill" }; const char* Hole::ThreadSize_ISOmetric_Enums[] = { "M1", "M1.1", "M1.2", "M1.4", "M1.6", "M1.8", "M2", "M2.2", "M2.5", "M3", "M3.5", "M4", "M4.5", "M5", "M6", @@ -486,7 +486,7 @@ const char* Hole::ThreadSize_ISOmetric_Enums[] = { "M1", "M1.1", "M1.2", "M1 "M52", "M56", "M60", "M64", "M68", nullptr }; const char* Hole::ThreadClass_ISOmetric_Enums[] = { "4G", "4H", "5G", "5H", "6G", "6H", "7G", "7H","8G", "8H", nullptr }; -std::vector Hole::HoleCutType_ISOmetricfine_Enums = { "None", "Counterbore", "Countersink", "Cheesehead (deprecated)", "Countersink socket screw (deprecated)", "Cap screw (deprecated)" }; +std::vector Hole::HoleCutType_ISOmetricfine_Enums = { "None", "Counterbore", "Countersink", "Cheesehead (deprecated)", "Countersink socket screw (deprecated)", "Cap screw (deprecated)", "Counterdrill" }; const char* Hole::ThreadSize_ISOmetricfine_Enums[] = { "M1x0.2", "M1.1x0.2", "M1.2x0.2", "M1.4x0.2", "M1.6x0.2", "M1.8x0.2", "M2x0.25", "M2.2x0.25", @@ -597,7 +597,7 @@ const double Hole::ThreadRunout[ThreadRunout_size][2] = { /* Details from https://en.wikipedia.org/wiki/Unified_Thread_Standard */ /* UTS coarse */ -const char* Hole::HoleCutType_UNC_Enums[] = { "None", "Counterbore", "Countersink", nullptr}; +const char* Hole::HoleCutType_UNC_Enums[] = { "None", "Counterbore", "Countersink", "Counterdrill", nullptr}; const char* Hole::ThreadSize_UNC_Enums[] = { "#1", "#2", "#3", "#4", "#5", "#6", "#8", "#10", "#12", "1/4", "5/16", "3/8", "7/16", "1/2", "9/16", @@ -608,7 +608,7 @@ const char* Hole::ThreadSize_UNC_Enums[] = { "#1", "#2", "#3", "#4", "#5", "#6 const char* Hole::ThreadClass_UNC_Enums[] = { "1B", "2B", "3B", nullptr }; /* UTS fine */ -const char* Hole::HoleCutType_UNF_Enums[] = { "None", "Counterbore", "Countersink", nullptr}; +const char* Hole::HoleCutType_UNF_Enums[] = { "None", "Counterbore", "Countersink", "Counterdrill", nullptr}; const char* Hole::ThreadSize_UNF_Enums[] = { "#0", "#1", "#2", "#3", "#4", "#5", "#6", "#8", "#10", "#12", "1/4", "5/16", "3/8", "7/16", "1/2", "9/16", @@ -617,7 +617,7 @@ const char* Hole::ThreadSize_UNF_Enums[] = { "#0", "#1", "#2", "#3", "#4", "#5 const char* Hole::ThreadClass_UNF_Enums[] = { "1B", "2B", "3B", nullptr }; /* UTS extrafine */ -const char* Hole::HoleCutType_UNEF_Enums[] = { "None", "Counterbore", "Countersink", nullptr}; +const char* Hole::HoleCutType_UNEF_Enums[] = { "None", "Counterbore", "Countersink", "Counterdrill", nullptr}; const char* Hole::ThreadSize_UNEF_Enums[] = { "#12", "1/4", "5/16", "3/8", "7/16", "1/2", "9/16", "5/8", "11/16", "3/4", "13/16", "7/8", "15/16", "1", "1 1/16", "1 1/8", "1 1/4", @@ -760,7 +760,7 @@ void Hole::updateHoleCutParams() HoleCutDepth.setReadOnly(false); HoleCutCountersinkAngle.setReadOnly(true); } - else if (holeCutTypeStr == "Countersink") { + else if (holeCutTypeStr == "Countersink" || holeCutTypeStr == "Counterdrill") { // read ISO 10642 values const CutDimensionSet& counter = find_cutDimensionSet(threadTypeStr, "ISO 10642"); if (HoleCutDiameter.getValue() == 0.0 || HoleCutDiameter.getValue() <= diameterVal) { @@ -776,6 +776,9 @@ void Hole::updateHoleCutParams() if (HoleCutCountersinkAngle.getValue() == 0.0) { HoleCutCountersinkAngle.setValue(counter.angle); } + if (HoleCutDepth.getValue() == 0.0 && holeCutTypeStr == "Counterdrill") { + HoleCutDepth.setValue(1.0); + } HoleCutDiameter.setReadOnly(false); HoleCutDepth.setReadOnly(false); HoleCutCountersinkAngle.setReadOnly(false); @@ -905,7 +908,7 @@ void Hole::updateHoleCutParams() HoleCutDiameter.setReadOnly(false); HoleCutDepth.setReadOnly(false); } - else if (holeCutTypeStr == "Countersink") { + else if (holeCutTypeStr == "Countersink" || holeCutTypeStr == "Counterdrill") { if (HoleCutDiameter.getValue() == 0.0 || HoleCutDiameter.getValue() <= diameterVal) { HoleCutDiameter.setValue(diameterVal * 1.7); // 82 degrees for UTS, 90 otherwise @@ -920,6 +923,9 @@ void Hole::updateHoleCutParams() else HoleCutCountersinkAngle.setValue(90.0); } + if (HoleCutDepth.getValue() == 0.0 && holeCutTypeStr == "Counterdrill") { + HoleCutDepth.setValue(1.0); + } HoleCutDiameter.setReadOnly(false); HoleCutDepth.setReadOnly(false); HoleCutCountersinkAngle.setReadOnly(false); @@ -1702,6 +1708,7 @@ App::DocumentObjectExecReturn* Hole::execute() holeCutType == "Cheesehead (deprecated)" || holeCutType == "Cap screw (deprecated)" || isDynamicCounterbore(threadType, holeCutType)); + bool isCounterdrill = (holeCutType == "Counterdrill"); double TaperedAngleVal = Tapered.getValue() ? Base::toRadians(TaperedAngle.getValue()) : Base::toRadians(90.0); double radiusBottom = Diameter.getValue() / 2.0 - length / tan(TaperedAngleVal); @@ -1716,7 +1723,7 @@ App::DocumentObjectExecReturn* Hole::execute() if (TaperedAngleVal <= 0.0 || TaperedAngleVal > Base::toRadians(180.0)) return new App::DocumentObjectExecReturn("Hole error: Invalid taper angle"); - if (isCountersink || isCounterbore) { + if (isCountersink || isCounterbore || isCounterdrill) { double holeCutRadius = HoleCutDiameter.getValue() / 2.0; double holeCutDepth = HoleCutDepth.getValue(); double countersinkAngle = Base::toRadians(HoleCutCountersinkAngle.getValue() / 2.0); diff --git a/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp b/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp index 87aad26331..23ca212e71 100644 --- a/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskHoleParameters.cpp @@ -362,7 +362,7 @@ void TaskHoleParameters::holeCutTypeChanged(int index) // the type is a countersink and thus if HoleCutCountersinkAngle can be enabled std::string HoleCutTypeString = pcHole->HoleCutType.getValueAsString(); if (HoleCutTypeString == "None" || HoleCutTypeString == "Counterbore" - || HoleCutTypeString == "Countersink") { + || HoleCutTypeString == "Countersink" || HoleCutTypeString == "Counterdrill") { ui->HoleCutCustomValues->setEnabled(false); if (HoleCutTypeString == "None") { ui->HoleCutDiameter->setEnabled(false); @@ -424,8 +424,9 @@ void TaskHoleParameters::holeCutDiameterChanged(double value) void TaskHoleParameters::holeCutDepthChanged(double value) { PartDesign::Hole* pcHole = static_cast(vp->getObject()); + std::string HoleCutTypeString = pcHole->HoleCutType.getValueAsString(); - if (ui->HoleCutCountersinkAngle->isEnabled()) { + if (ui->HoleCutCountersinkAngle->isEnabled() && HoleCutTypeString != "Counterdrill") { // we have a countersink and recalculate the HoleCutDiameter // store current depth