PartDesign: Add HoleCuteType "Counterdrill"

This commit is contained in:
Stefan Klug
2022-10-21 23:38:58 +02:00
committed by Uwe
parent c7f64b12bd
commit 60d7b1d834
2 changed files with 19 additions and 11 deletions

View File

@@ -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<std::string> Hole::HoleCutType_ISOmetric_Enums = { "None", "Counterbore", "Countersink", "Cheesehead (deprecated)", "Countersink socket screw (deprecated)", "Cap screw (deprecated)" };
std::vector<std::string> 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<std::string> Hole::HoleCutType_ISOmetricfine_Enums = { "None", "Counterbore", "Countersink", "Cheesehead (deprecated)", "Countersink socket screw (deprecated)", "Cap screw (deprecated)" };
std::vector<std::string> 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);

View File

@@ -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<PartDesign::Hole*>(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