[CAM] update/fix adaptive UI panel and parameter limits

This commit is contained in:
David Kaufman
2025-08-29 13:22:08 -04:00
parent b203ba4ec5
commit 6286ff3c6c
4 changed files with 122 additions and 65 deletions

View File

@@ -115,7 +115,6 @@ class TestPathAdaptive(PathTestBase):
# setDepthsAndHeights(adaptive)
adaptive.FinishingProfile = False
adaptive.HelixAngle = 75.0
adaptive.HelixDiameterLimit.Value = 1.0
adaptive.LiftDistance.Value = 1.0
adaptive.StepOver = 75
adaptive.UseOutline = False
@@ -149,7 +148,6 @@ class TestPathAdaptive(PathTestBase):
# setDepthsAndHeights(adaptive)
adaptive.FinishingProfile = False
adaptive.HelixAngle = 75.0
adaptive.HelixDiameterLimit.Value = 1.0
adaptive.LiftDistance.Value = 1.0
adaptive.StepOver = 75
adaptive.UseOutline = False
@@ -177,7 +175,6 @@ class TestPathAdaptive(PathTestBase):
# setDepthsAndHeights(adaptive)
adaptive.FinishingProfile = False
adaptive.HelixAngle = 75.0
adaptive.HelixDiameterLimit.Value = 1.0
adaptive.LiftDistance.Value = 1.0
adaptive.StepOver = 75
adaptive.UseOutline = True
@@ -218,7 +215,6 @@ class TestPathAdaptive(PathTestBase):
# setDepthsAndHeights(adaptive)
adaptive.FinishingProfile = False
adaptive.HelixAngle = 75.0
adaptive.HelixDiameterLimit.Value = 1.0
adaptive.LiftDistance.Value = 1.0
adaptive.StepOver = 75
adaptive.UseOutline = False
@@ -261,7 +257,6 @@ class TestPathAdaptive(PathTestBase):
# setDepthsAndHeights(adaptive)
adaptive.FinishingProfile = False
adaptive.HelixAngle = 75.0
adaptive.HelixDiameterLimit.Value = 1.0
adaptive.LiftDistance.Value = 1.0
adaptive.StepOver = 75
adaptive.UseOutline = False
@@ -304,7 +299,6 @@ class TestPathAdaptive(PathTestBase):
# setDepthsAndHeights(adaptive)
adaptive.FinishingProfile = False
adaptive.HelixAngle = 75.0
adaptive.HelixDiameterLimit.Value = 1.0
adaptive.LiftDistance.Value = 1.0
adaptive.StepOver = 75
adaptive.UseOutline = False
@@ -347,7 +341,6 @@ class TestPathAdaptive(PathTestBase):
# setDepthsAndHeights(adaptive)
adaptive.FinishingProfile = False
adaptive.HelixAngle = 75.0
adaptive.HelixDiameterLimit.Value = 1.0
adaptive.LiftDistance.Value = 1.0
adaptive.StepOver = 75
adaptive.UseOutline = False
@@ -408,7 +401,6 @@ class TestPathAdaptive(PathTestBase):
setDepthsAndHeights(adaptive, 15, 0)
adaptive.FinishingProfile = False
adaptive.HelixAngle = 75.0
adaptive.HelixDiameterLimit.Value = 1.0
adaptive.LiftDistance.Value = 1.0
adaptive.StepOver = 75
adaptive.UseOutline = False
@@ -478,7 +470,6 @@ class TestPathAdaptive(PathTestBase):
setDepthsAndHeights(adaptive, 15, 10)
adaptive.FinishingProfile = False
adaptive.HelixAngle = 75.0
adaptive.HelixDiameterLimit.Value = 1.0
adaptive.LiftDistance.Value = 1.0
adaptive.StepOver = 75
adaptive.UseOutline = False
@@ -540,7 +531,6 @@ class TestPathAdaptive(PathTestBase):
setDepthsAndHeights(adaptive, 15, 0)
adaptive.FinishingProfile = False
adaptive.HelixAngle = 75.0
adaptive.HelixDiameterLimit.Value = 1.0
adaptive.LiftDistance.Value = 1.0
adaptive.StepOver = 75
adaptive.UseOutline = False
@@ -622,7 +612,6 @@ class TestPathAdaptive(PathTestBase):
setDepthsAndHeights(adaptive, 15, 5)
adaptive.FinishingProfile = False
adaptive.HelixAngle = 75.0
adaptive.HelixDiameterLimit.Value = 1.0
adaptive.LiftDistance.Value = 1.0
adaptive.StepOver = 75
adaptive.UseOutline = False

View File

@@ -66,7 +66,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="threadFitLabel">
<widget class="QLabel" name="accuracyPerformanceLabel">
<property name="text">
<string>Accuracy vs performance</string>
</property>
@@ -173,21 +173,113 @@ Larger values (further to the right) will calculate faster; smaller values (furt
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="Gui::InputField" name="HelixConeAngle">
<property name="toolTip">
<string>Angle of the helix entry cone</string>
<item row="10" column="0" colspan="2">
<widget class="QFrame" name="helixFrame">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="unit" stdset="0">
<string notr="true"/>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Helix ramp angle</string>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QGridLayout" name="helixLayout">
<item row="9" column="0">
<widget class="QLabel" name="label_max_stepdown">
<property name="text">
<string>Helix max stepdown</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="Gui::InputField" name="HelixMaxStepdown">
<property name="toolTip">
<string>The maximum allowable descent in a single revolution of the helix.</string>
</property>
<property name="unit" stdset="0">
<string notr="true"/>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Helix ramp angle</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="Gui::InputField" name="HelixAngle">
<property name="toolTip">
<string>Angle of the helix ramp entry</string>
</property>
<property name="unit" stdset="0">
<string notr="true"/>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Helix cone angle</string>
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="Gui::InputField" name="HelixConeAngle">
<property name="toolTip">
<string>Angle of the helix entry cone</string>
</property>
<property name="unit" stdset="0">
<string notr="true"/>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Helix ideal diameter</string>
</property>
</widget>
</item>
<item row="14" column="1">
<widget class="QSpinBox" name="HelixIdealDiameterPercent">
<property name="toolTip">
<string>Ideal helix entry diameter, as a percentage of the tool diameter.</string>
</property>
<property name="minimum">
<number>10</number>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="singleStep">
<number>5</number>
</property>
</widget>
</item>
<item row="15" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Helix min diameter</string>
</property>
</widget>
</item>
<item row="15" column="1">
<widget class="QSpinBox" name="HelixMinDiameterPercent">
<property name="toolTip">
<string>Minimum acceptable entry diameter, as a percentage of the tool diameter.</string>
</property>
<property name="minimum">
<number>10</number>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="singleStep">
<number>5</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="25" column="0">
@@ -221,33 +313,6 @@ Larger values (further to the right) will calculate faster; smaller values (furt
</property>
</widget>
</item>
<item row="14" column="1">
<widget class="Gui::QuantitySpinBox" name="HelixDiameterLimit" native="true">
<property name="toolTip">
<string>If greater than zero it limits the helix ramp diameter, otherwise 75 percent of tool diameter is used</string>
</property>
<property name="unit" stdset="0">
<string notr="true"/>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Helix cone angle</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="Gui::InputField" name="HelixAngle">
<property name="toolTip">
<string>Angle of the helix ramp entry</string>
</property>
<property name="unit" stdset="0">
<string notr="true"/>
</property>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
@@ -272,13 +337,6 @@ Larger values (further to the right) will calculate faster; smaller values (furt
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Helix max diameter</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>

View File

@@ -699,6 +699,12 @@ def ExecuteModelAware(op, obj):
FreeCADGui.updateGui()
try:
obj.HelixMinDiameterPercent = max(obj.HelixMinDiameterPercent, 10)
obj.HelixIdealDiameterPercent = max(
obj.HelixIdealDiameterPercent, obj.HelixMinDiameterPercent
)
obj.StepOver = max(obj.StepOver, 1)
helixDiameter = obj.HelixIdealDiameterPercent / 100 * op.tool.Diameter.Value
helixMinDiameter = obj.HelixMinDiameterPercent / 100 * op.tool.Diameter.Value
topZ = op.stock.Shape.BoundBox.ZMax

View File

@@ -46,9 +46,6 @@ class TaskPanelOpPage(PathOpGui.TaskPanelPage):
def initPage(self, obj):
self.form.LiftDistance.setProperty("unit", obj.LiftDistance.getUserPreferred()[2])
self.form.HelixDiameterLimit.setProperty(
"unit", obj.HelixDiameterLimit.getUserPreferred()[2]
)
self.form.KeepToolDownRatio.setProperty("unit", obj.KeepToolDownRatio.getUserPreferred()[2])
self.form.StockToLeave.setProperty("unit", obj.StockToLeave.getUserPreferred()[2])
@@ -62,7 +59,8 @@ class TaskPanelOpPage(PathOpGui.TaskPanelPage):
signals.append(self.form.Tolerance.valueChanged)
signals.append(self.form.HelixAngle.valueChanged)
signals.append(self.form.HelixConeAngle.valueChanged)
signals.append(self.form.HelixDiameterLimit.valueChanged)
signals.append(self.form.HelixIdealDiameterPercent.valueChanged)
signals.append(self.form.HelixMinDiameterPercent.valueChanged)
signals.append(self.form.LiftDistance.valueChanged)
signals.append(self.form.KeepToolDownRatio.valueChanged)
signals.append(self.form.StockToLeave.valueChanged)
@@ -92,7 +90,8 @@ class TaskPanelOpPage(PathOpGui.TaskPanelPage):
FreeCAD.Units.Quantity(obj.HelixConeAngle, FreeCAD.Units.Angle).UserString
)
self.form.HelixDiameterLimit.setProperty("rawValue", obj.HelixDiameterLimit.Value)
self.form.HelixIdealDiameterPercent.setValue(obj.HelixIdealDiameterPercent)
self.form.HelixMinDiameterPercent.setValue(obj.HelixMinDiameterPercent)
self.form.LiftDistance.setProperty("rawValue", obj.LiftDistance.Value)
@@ -124,10 +123,15 @@ class TaskPanelOpPage(PathOpGui.TaskPanelPage):
if obj.StepOver != self.form.stepOverPercent.value():
obj.StepOver = self.form.stepOverPercent.value()
if obj.HelixIdealDiameterPercent != self.form.HelixIdealDiameterPercent.value():
obj.HelixIdealDiameterPercent = self.form.HelixIdealDiameterPercent.value()
if obj.HelixMinDiameterPercent != self.form.HelixMinDiameterPercent.value():
obj.HelixMinDiameterPercent = self.form.HelixMinDiameterPercent.value()
obj.Tolerance = 1.0 * self.form.Tolerance.value() / 100.0
PathGuiUtil.updateInputField(obj, "HelixAngle", self.form.HelixAngle)
PathGuiUtil.updateInputField(obj, "HelixConeAngle", self.form.HelixConeAngle)
PathGuiUtil.updateInputField(obj, "HelixDiameterLimit", self.form.HelixDiameterLimit)
PathGuiUtil.updateInputField(obj, "LiftDistance", self.form.LiftDistance)
if hasattr(obj, "KeepToolDownRatio"):