Added imperial external and split data files according to tolerance classes

This commit is contained in:
Markus Lampert
2022-02-18 20:59:35 -08:00
committed by mlampert
parent 7c2a8a92fb
commit eb48466724
12 changed files with 556 additions and 434 deletions

View File

@@ -247,23 +247,51 @@ class ObjectThreadMilling(PathCircularHoleBase.ObjectOp):
RightHand = "RightHand"
ThreadTypeCustomExternal = "CustomExternal"
ThreadTypeCustomInternal = "CustomInternal"
ThreadTypeImperialExternal = "ImperialExternal"
ThreadTypeImperialInternal = "ImperialInternal"
ThreadTypeMetricExternal = "MetricExternal"
ThreadTypeMetricInternal = "MetricInternal"
ThreadTypeImperialExternal2A = "ImperialExternal2A"
ThreadTypeImperialExternal3A = "ImperialExternal3A"
ThreadTypeImperialInternal2B = "ImperialInternal2B"
ThreadTypeImperialInternal3B = "ImperialInternal3B"
ThreadTypeMetricExternal4G6G = "MetricExternal4G6G"
ThreadTypeMetricExternal6G = "MetricExternal6G"
ThreadTypeMetricInternal6H = "MetricInternal6H"
DirectionClimb = "Climb"
DirectionConventional = "Conventional"
ThreadOrientations = [LeftHand, RightHand]
ThreadTypesInternal = [
ThreadTypeCustomInternal,
ThreadTypeImperialInternal,
ThreadTypeMetricInternal,
]
ThreadTypeData = {
ThreadTypeImperialExternal2A : 'imperial-external-2A.csv',
ThreadTypeImperialExternal3A : 'imperial-external-3A.csv',
ThreadTypeImperialInternal2B : 'imperial-internal-2B.csv',
ThreadTypeImperialInternal3B : 'imperial-internal-3B.csv',
ThreadTypeMetricExternal4G6G : 'metric-external-4G6G.csv',
ThreadTypeMetricExternal6G : 'metric-external-6G.csv',
ThreadTypeMetricInternal6H : 'metric-internal-6H.csv',
}
ThreadTypesExternal = [
ThreadTypeCustomExternal,
ThreadTypeImperialExternal,
ThreadTypeMetricExternal,
ThreadTypeImperialExternal2A,
ThreadTypeImperialExternal3A,
ThreadTypeMetricExternal4G6G,
ThreadTypeMetricExternal6G,
]
ThreadTypesInternal = [
ThreadTypeCustomInternal,
ThreadTypeImperialInternal2B,
ThreadTypeImperialInternal3B,
ThreadTypeMetricInternal6H,
]
ThreadTypesImperial = [
ThreadTypeImperialExternal2A,
ThreadTypeImperialExternal3A,
ThreadTypeImperialInternal2B,
ThreadTypeImperialInternal3B,
]
ThreadTypesMetric = [
ThreadTypeMetricExternal4G6G,
ThreadTypeMetricExternal6G,
ThreadTypeMetricInternal6H,
]
ThreadTypes = ThreadTypesInternal + ThreadTypesExternal
Directions = [DirectionClimb, DirectionConventional]
@@ -285,10 +313,13 @@ class ObjectThreadMilling(PathCircularHoleBase.ObjectOp):
"ThreadType": [
(translate("Path_ThreadMilling", "Custom External"), ObjectThreadMilling.ThreadTypeCustomExternal),
(translate("Path_ThreadMilling", "Custom Internal"), ObjectThreadMilling.ThreadTypeCustomInternal),
(translate("Path_ThreadMilling", "Imperial Internal"), ObjectThreadMilling.ThreadTypeImperialInternal),
(translate("Path_ThreadMilling", "Imperial External"), ObjectThreadMilling.ThreadTypeImperialExternal),
(translate("Path_ThreadMilling", "Metric External"), ObjectThreadMilling.ThreadTypeMetricExternal),
(translate("Path_ThreadMilling", "Metric Internal"), ObjectThreadMilling.ThreadTypeMetricInternal),
(translate("Path_ThreadMilling", "Imperial External (2A)"), ObjectThreadMilling.ThreadTypeImperialExternal2A),
(translate("Path_ThreadMilling", "Imperial External (3A)"), ObjectThreadMilling.ThreadTypeImperialExternal3A),
(translate("Path_ThreadMilling", "Imperial Internal (2B)"), ObjectThreadMilling.ThreadTypeImperialInternal2B),
(translate("Path_ThreadMilling", "Imperial Internal (3B)"), ObjectThreadMilling.ThreadTypeImperialInternal3B),
(translate("Path_ThreadMilling", "Metric External (4G6G)"), ObjectThreadMilling.ThreadTypeMetricExternal4G6G),
(translate("Path_ThreadMilling", "Metric External (6G)"), ObjectThreadMilling.ThreadTypeMetricExternal6G),
(translate("Path_ThreadMilling", "Metric Internal (6H)"), ObjectThreadMilling.ThreadTypeMetricInternal6H),
],
"ThreadOrientation": [
(translate("Path_ThreadMilling", "LeftHand"), ObjectThreadMilling.LeftHand),
@@ -512,18 +543,18 @@ class ObjectThreadMilling(PathCircularHoleBase.ObjectOp):
def opSetDefaultValues(self, obj, job):
PathLog.track()
obj.ThreadOrientation = self.RightHand
obj.ThreadType = self.ThreadTypeMetricInternal
obj.ThreadType = self.ThreadTypeMetricInternal6H
obj.ThreadFit = 50
obj.Pitch = 1
obj.TPI = 0
obj.Passes = 1
obj.Direction = self.DirectionClimb
obj.LeadInOut = True
obj.LeadInOut = False
def isToolSupported(self, obj, tool):
"""Thread milling only supports thread milling cutters."""
support = hasattr(tool, "Diameter") and hasattr(tool, "Crest")
PathLog.track(tool.Name, support)
PathLog.track(tool.Label, support)
return support

View File

@@ -48,14 +48,13 @@ else:
translate = FreeCAD.Qt.translate
def fillThreads(form, dataFile, defaultSelect):
form.threadName.blockSignals(True)
select = form.threadName.currentText()
PathLog.debug("select = '{}'".format(select))
form.threadName.clear()
with open(
"{}Mod/Path/Data/Threads/{}.csv".format(FreeCAD.getHomePath(), dataFile)
"{}Mod/Path/Data/Threads/{}".format(FreeCAD.getHomePath(), dataFile)
) as fp:
reader = csv.DictReader(fp)
for row in reader:
@@ -151,13 +150,13 @@ class TaskPanelOpPage(PathCircularHoleBaseGui.TaskPanelOpPage):
def _isThreadImperial(self):
return (
self.form.threadType.currentData()
in [PathThreadMilling.ObjectThreadMilling.ThreadTypeImperialInternal, PathThreadMilling.ObjectThreadMilling.ThreadTypeImperialExternal]
in PathThreadMilling.ObjectThreadMilling.ThreadTypesImperial
)
def _isThreadMetric(self):
return (
self.form.threadType.currentData()
in [PathThreadMilling.ObjectThreadMilling.ThreadTypeMetricInternal, PathThreadMilling.ObjectThreadMilling.ThreadTypeMetricExternal]
in PathThreadMilling.ObjectThreadMilling.ThreadTypesMetric
)
def _isThreadInternal(self):
@@ -176,39 +175,32 @@ class TaskPanelOpPage(PathCircularHoleBaseGui.TaskPanelOpPage):
self.form.threadPitchLabel.setEnabled(True)
self.form.threadTPI.setEnabled(True)
self.form.threadTPILabel.setEnabled(True)
if self._isThreadMetric():
else:
self.form.threadFit.setEnabled(True)
self.form.threadFitLabel.setEnabled(True)
self.form.threadPitch.setEnabled(True)
self.form.threadPitchLabel.setEnabled(True)
self.form.threadTPI.setEnabled(False)
self.form.threadTPILabel.setEnabled(False)
self.form.threadTPI.setValue(0)
if self._isThreadInternal():
fillThreads(self.form, "metric-internal", self.obj.ThreadName)
if self._isThreadMetric():
self.form.threadPitch.setEnabled(True)
self.form.threadPitchLabel.setEnabled(True)
self.form.threadTPI.setEnabled(False)
self.form.threadTPILabel.setEnabled(False)
self.form.threadTPI.setValue(0)
else:
fillThreads(self.form, "metric-external", self.obj.ThreadName)
if self._isThreadImperial():
self.form.threadFit.setEnabled(True)
self.form.threadFitLabel.setEnabled(True)
self.form.threadPitch.setEnabled(False)
self.form.threadPitchLabel.setEnabled(False)
self.form.threadTPI.setEnabled(True)
self.form.threadTPILabel.setEnabled(True)
self.pitch.updateSpinBox(0)
fillThreads(self.form, "imperial-internal", self.obj.ThreadName)
self.form.threadPitch.setEnabled(False)
self.form.threadPitchLabel.setEnabled(False)
self.form.threadTPI.setEnabled(True)
self.form.threadTPILabel.setEnabled(True)
self.pitch.updateSpinBox(0)
fillThreads(self.form, PathThreadMilling.ObjectThreadMilling.ThreadTypeData[self.form.threadType.currentData()], self.obj.ThreadName)
def _updateFromThreadName(self):
thread = self.form.threadName.currentData()
fit = float(self.form.threadFit.value()) / 100
mamin = float(thread["dMajorMin"])
mamax = float(thread["dMajorMax"])
major = mamin + (mamax - mamin) * fit
mimin = float(thread["dMinorMin"])
mimax = float(thread["dMinorMax"])
minor = mimin + (mimax - mimin) * fit
maxmin = float(thread["dMajorMin"])
maxmax = float(thread["dMajorMax"])
major = maxmin + (maxmax - maxmin) * fit
minmin = float(thread["dMinorMin"])
minmax = float(thread["dMinorMax"])
minor = minmin + (minmax - minmin) * fit
if self._isThreadMetric():
pitch = float(thread["pitch"])