feat(PD): ISO tyre valve threads

This commit is contained in:
Alfredo Monclus
2024-12-23 20:46:26 -03:00
committed by Chris Hennes
parent dd4599c459
commit b21cf693f1
3 changed files with 42 additions and 2 deletions

View File

@@ -72,7 +72,7 @@ namespace PartDesign {
const char* Hole::DepthTypeEnums[] = { "Dimension", "ThroughAll", /*, "UpToFirst", */ nullptr };
const char* Hole::ThreadDepthTypeEnums[] = { "Hole Depth", "Dimension", "Tapped (DIN76)", nullptr };
const char* Hole::ThreadTypeEnums[] = { "None", "ISOMetricProfile", "ISOMetricFineProfile", "UNC", "UNF", "UNEF", "NPT", "BSP", "BSW", "BSF", nullptr};
const char* Hole::ThreadTypeEnums[] = { "None", "ISOMetricProfile", "ISOMetricFineProfile", "UNC", "UNF", "UNEF", "NPT", "BSP", "BSW", "BSF", "ISOTyre", nullptr};
const char* Hole::ClearanceNoneEnums[] = { "-", "-", "-", nullptr};
const char* Hole::ClearanceMetricEnums[] = { "Medium", "Fine", "Coarse", nullptr};
@@ -527,6 +527,30 @@ const std::vector<Hole::ThreadDescription> Hole::threadDescription[] =
{ "3 3/4", 95.250, 5.644, 0.0 },
{ "4", 101.600, 5.644, 0.0 },
{ "4 1/4", 107.950, 6.350, 0.0 },
},
/* ISO Tyre valve threads */
// ISO 4570:2002
// Ordered as the standard
{
{ "5v1", 5.334, 0.705, 0 }, // Schrader internal
{ "5v2", 5.370, 1.058, 0 }, // Presta cap
{ "6v1", 6.160, 0.800, 0 }, // Presta body
{ "8v1", 7.798, 0.794, 0 }, // Schrader external
{ "9v1", 9.525, 0.794, 0 },
{ "10v2", 10.414, 0.907, 0 },
{ "12v1", 12.319, 0.977, 0 },
{ "13v1", 12.700, 1.270, 0 },
{ "8v2", 7.938, 1.058, 0 },
{ "10v1", 9.800, 1.000, 0 },
{ "11v1", 11.113, 1.270, 0 },
{ "13v2", 12.700, 0.794, 0 },
{ "15v1", 15.137, 1.000, 0 },
{ "16v1", 15.875, 0.941, 0 },
{ "17v1", 17.137, 1.000, 0 },
{ "17v2", 17.463, 1.058, 0 },
{ "17v3", 17.463, 1.588, 0 },
{ "19v1", 19.050, 1.588, 0 },
{ "20v1", 20.642, 1.000, 0 },
}
};
@@ -1484,6 +1508,10 @@ void Hole::onChanged(const App::Property* prop)
HoleCutType.setEnums(HoleCutType_BSF_Enums);
ThreadFit.setEnums(ClearanceOtherEnums);
}
else if (type == "ISOTyre") {
ThreadClass.setEnums(ThreadClass_None_Enums);
HoleCutType.setEnums(HoleCutType_None_Enums);
}
bool isNone = type == "None";
bool isThreaded = Threaded.getValue();
@@ -2381,7 +2409,13 @@ TopoDS_Shape Hole::makeThread(const gp_Vec& xDir, const gp_Vec& zDir, double len
);
mkThreadWire.Add(BRepBuilderAPI_MakeEdge(p1, p2).Edge());
mkThreadWire.Add(BRepBuilderAPI_MakeEdge(p2, p3).Edge());
if (threadTypeStr == "ISOTyre") {
gp_Pnt crest = toPnt((RmajC + (Pitch / 32)) * xDir + Pitch / 2 * zDir);
Handle(Geom_TrimmedCurve) arc1 = GC_MakeArcOfCircle(p2, crest, p3).Value();
mkThreadWire.Add(BRepBuilderAPI_MakeEdge(arc1).Edge());
} else {
mkThreadWire.Add(BRepBuilderAPI_MakeEdge(p2, p3).Edge());
}
mkThreadWire.Add(BRepBuilderAPI_MakeEdge(p3, p4).Edge());
mkThreadWire.Add(BRepBuilderAPI_MakeEdge(p4, p1).Edge());
}

View File

@@ -70,6 +70,7 @@ TaskHoleParameters::TaskHoleParameters(ViewProviderHole* HoleView, QWidget* pare
ui->ThreadType->addItem(tr("ISO/BSP pipes"), QByteArray("ISO"));
ui->ThreadType->addItem(tr("BSW whitworth"), QByteArray("Other"));
ui->ThreadType->addItem(tr("BSF whitworth fine"), QByteArray("Other"));
ui->ThreadType->addItem(tr("ISO tyre valves"), QByteArray("Other"));
// read values from the hole properties
auto pcHole = getObject<PartDesign::Hole>();

View File

@@ -309,6 +309,11 @@ class TestHole(unittest.TestCase):
"3", "3 1/4", "3 1/2", "3 3/4",
"4", "4 1/4",
],
'ISOTyre': [
"5v1", "5v2", "6v1", "8v1", "9v1", "10v2",
"12v1", "13v1", "8v2", "10v1", "11v1", "13v2",
"15v1", "16v1", "17v1", "17v2", "17v3", "19v1", "20v1",
],
}
allowed_types = self.Hole.getEnumerationsOfProperty("ThreadType")
for type_index, thread_type in enumerate(thread_types.keys(), 1):