Path: Adaptive - added stock to leave option
This commit is contained in:
@@ -280,15 +280,15 @@ def Execute(op,obj):
|
||||
path2d = convertTo2d(pathArray)
|
||||
# put here all properties that influence calculation of adaptive base paths,
|
||||
inputStateObject = {
|
||||
"tool": op.tool.Diameter,
|
||||
"tolerance": obj.Tolerance,
|
||||
"tool": float(op.tool.Diameter),
|
||||
"tolerance": float(obj.Tolerance),
|
||||
"geometry" : path2d,
|
||||
"stepover" :obj.StepOver,
|
||||
"effectiveHelixDiameter": helixDiameter,
|
||||
"stepover" : float(obj.StepOver),
|
||||
"effectiveHelixDiameter": float(helixDiameter),
|
||||
"operationType": obj.OperationType,
|
||||
"side": obj.Side,
|
||||
"processHoles": obj.ProcessHoles
|
||||
|
||||
"processHoles": obj.ProcessHoles,
|
||||
"stockToLeave": float(obj.StockToLeave)
|
||||
}
|
||||
|
||||
inputStateChanged=False
|
||||
@@ -315,6 +315,7 @@ def Execute(op,obj):
|
||||
a2d.stepOverFactor = 0.01*obj.StepOver
|
||||
a2d.toolDiameter = op.tool.Diameter
|
||||
a2d.helixRampDiameter = helixDiameter
|
||||
a2d.stockToLeave = obj.StockToLeave
|
||||
a2d.tolerance = obj.Tolerance
|
||||
a2d.opType = opType
|
||||
a2d.polyTreeNestingLimit = nestingLimit
|
||||
@@ -366,6 +367,7 @@ class PathAdaptive(PathOp.ObjectOp):
|
||||
obj.addProperty("App::PropertyFloat", "Tolerance", "Adaptive", "Influences accuracy and performance")
|
||||
obj.addProperty("App::PropertyPercent", "StepOver", "Adaptive", "Percent of cutter diameter to step over on each pass")
|
||||
obj.addProperty("App::PropertyDistance", "LiftDistance", "Adaptive", "Lift distance for rapid moves")
|
||||
obj.addProperty("App::PropertyDistance", "StockToLeave", "Adaptive", "How much stock to leave (i.e. for finishing operation)")
|
||||
obj.addProperty("App::PropertyBool", "ProcessHoles", "Adaptive","Process holes as well as the face outline")
|
||||
obj.addProperty("App::PropertyBool", "Stopped",
|
||||
"Adaptive", "Stop processing")
|
||||
@@ -398,6 +400,7 @@ class PathAdaptive(PathOp.ObjectOp):
|
||||
obj.HelixDiameterLimit = 0.0
|
||||
obj.AdaptiveInputState =""
|
||||
obj.AdaptiveOutputState = ""
|
||||
obj.StockToLeave= 0
|
||||
|
||||
def opExecute(self, obj):
|
||||
'''opExecute(obj) ... called whenever the receiver needs to be recalculated.
|
||||
|
||||
@@ -71,7 +71,7 @@ class TaskPanelOpPage(PathOpGui.TaskPanelPage):
|
||||
form.HelixDiameterLimit.setMaximum(90)
|
||||
form.HelixDiameterLimit.setSingleStep(0.1)
|
||||
form.HelixDiameterLimit.setValue(0)
|
||||
form.HelixDiameterLimit.setToolTip("If non zero it limits the size helix diameter, otherwise the tool radius is taken as the helix diameter")
|
||||
form.HelixDiameterLimit.setToolTip("If non zero it limits the size helix diameter, otherwise the tool diameter is taken")
|
||||
formLayout.addRow(QtGui.QLabel("Helix Max Diameter"),form.HelixDiameterLimit)
|
||||
|
||||
#lift distance
|
||||
@@ -83,6 +83,15 @@ class TaskPanelOpPage(PathOpGui.TaskPanelPage):
|
||||
form.LiftDistance.setToolTip("How much to lift the tool up during the rapid repositioning moves (used when no obstacles)")
|
||||
formLayout.addRow(QtGui.QLabel("Lift Distance"),form.LiftDistance)
|
||||
|
||||
#stock to leave
|
||||
form.StockToLeave = QtGui.QDoubleSpinBox()
|
||||
form.StockToLeave.setMinimum(0.0)
|
||||
form.StockToLeave.setMaximum(1000)
|
||||
form.StockToLeave.setSingleStep(0.1)
|
||||
form.StockToLeave.setValue(0)
|
||||
form.StockToLeave.setToolTip("How much material to leave (i.e. for finishing operation)")
|
||||
formLayout.addRow(QtGui.QLabel("Stock to Leave"),form.StockToLeave)
|
||||
|
||||
#process holes
|
||||
form.ProcessHoles = QtGui.QCheckBox()
|
||||
form.ProcessHoles.setChecked(True)
|
||||
@@ -110,6 +119,7 @@ class TaskPanelOpPage(PathOpGui.TaskPanelPage):
|
||||
signals.append(self.form.HelixAngle.valueChanged)
|
||||
signals.append(self.form.HelixDiameterLimit.valueChanged)
|
||||
signals.append(self.form.LiftDistance.valueChanged)
|
||||
signals.append(self.form.StockToLeave.valueChanged)
|
||||
|
||||
signals.append(self.form.ProcessHoles.stateChanged)
|
||||
signals.append(self.form.StopButton.toggled)
|
||||
@@ -123,6 +133,8 @@ class TaskPanelOpPage(PathOpGui.TaskPanelPage):
|
||||
self.form.HelixAngle.setValue(obj.HelixAngle)
|
||||
self.form.HelixDiameterLimit.setValue(obj.HelixDiameterLimit)
|
||||
self.form.LiftDistance.setValue(obj.LiftDistance)
|
||||
if hasattr(obj, 'StockToLeave'):
|
||||
self.form.StockToLeave.setValue(obj.StockToLeave)
|
||||
|
||||
self.form.ProcessHoles.setChecked(obj.ProcessHoles)
|
||||
self.setupToolController(obj, self.form.ToolController)
|
||||
@@ -144,6 +156,8 @@ class TaskPanelOpPage(PathOpGui.TaskPanelPage):
|
||||
obj.HelixAngle = self.form.HelixAngle.value()
|
||||
obj.HelixDiameterLimit = self.form.HelixDiameterLimit.value()
|
||||
obj.LiftDistance = self.form.LiftDistance.value()
|
||||
if hasattr(obj, 'StockToLeave'):
|
||||
obj.StockToLeave = self.form.StockToLeave.value()
|
||||
|
||||
obj.ProcessHoles = self.form.ProcessHoles.isChecked()
|
||||
obj.Stopped = self.form.StopButton.isChecked()
|
||||
|
||||
@@ -854,7 +854,12 @@ namespace AdaptivePath {
|
||||
inputPaths.push_back(cpth);
|
||||
}
|
||||
SimplifyPolygons(inputPaths);
|
||||
if(fabs(stockToLeave)>NTOL) {
|
||||
clipof.Clear();
|
||||
clipof.AddPaths(inputPaths,JoinType::jtRound,EndType::etClosedPolygon);
|
||||
clipof.Execute(inputPaths,-stockToLeave*scaleFactor);
|
||||
|
||||
}
|
||||
// *******************************
|
||||
// Resolve hierarchy and run processing
|
||||
// ********************************
|
||||
|
||||
@@ -60,6 +60,7 @@ namespace AdaptivePath {
|
||||
double stepOverFactor = 0.2;
|
||||
int polyTreeNestingLimit=0;
|
||||
double tolerance=0.1;
|
||||
double stockToLeave=0;
|
||||
OperationType opType = OperationType::otClearing;
|
||||
|
||||
std::list<AdaptiveOutput> Execute(const DPaths &paths, std::function<bool(TPaths)> progressCallbackFn);
|
||||
|
||||
@@ -511,6 +511,7 @@ BOOST_PYTHON_MODULE(area) {
|
||||
.def("Execute",&AdaptiveExecute)
|
||||
.def_readwrite("stepOverFactor", &Adaptive2d::stepOverFactor)
|
||||
.def_readwrite("toolDiameter", &Adaptive2d::toolDiameter)
|
||||
.def_readwrite("stockToLeave", &Adaptive2d::stockToLeave)
|
||||
.def_readwrite("helixRampDiameter", &Adaptive2d::helixRampDiameter)
|
||||
.def_readwrite("polyTreeNestingLimit", &Adaptive2d::polyTreeNestingLimit)
|
||||
.def_readwrite("tolerance", &Adaptive2d::tolerance)
|
||||
|
||||
@@ -385,6 +385,7 @@ void init_pyarea(py::module &m){
|
||||
.def("Execute",&Adaptive2d::Execute)
|
||||
.def_readwrite("stepOverFactor", &Adaptive2d::stepOverFactor)
|
||||
.def_readwrite("toolDiameter", &Adaptive2d::toolDiameter)
|
||||
.def_readwrite("stockToLeave", &Adaptive2d::stockToLeave)
|
||||
.def_readwrite("helixRampDiameter", &Adaptive2d::helixRampDiameter)
|
||||
.def_readwrite("polyTreeNestingLimit", &Adaptive2d::polyTreeNestingLimit)
|
||||
.def_readwrite("tolerance", &Adaptive2d::tolerance)
|
||||
|
||||
Reference in New Issue
Block a user