fixed feed rate for angular moves

This commit is contained in:
sliptonic
2018-02-11 15:46:41 -06:00
committed by Yorik van Havre
parent bf51263a2b
commit 454d86b20d

View File

@@ -26,6 +26,7 @@ import FreeCADGui
import Path
import math
import PathScripts.PathUtils as P
import PathScripts.PathGeom
from PySide import QtCore, QtGui
"""Axis remapping Dressup object and FreeCAD command. This dressup remaps one axis of motion to another.
@@ -42,6 +43,10 @@ except AttributeError:
def translate(context, text, disambig=None):
return QtGui.QApplication.translate(context, text, disambig)
movecommands = ['G1', 'G01', 'G2', 'G02', 'G3', 'G03']
rapidcommands = ['G0', 'G00']
arccommands = ['G2', 'G3', 'G02', 'G03']
class ObjectDressup:
@@ -65,31 +70,68 @@ class ObjectDressup:
circum = 2 * math.pi * float(radius)
return 360 * (float(length) / circum)
def _stripArcs(self, path, d):
'''converts all G2/G3 commands into G1 commands'''
newcommandlist = []
currLocation = {}
for p in path:
if p.Name in arccommands:
curVec = FreeCAD.Vector(currLocation['X'], currLocation['Y'], currLocation['Z'])
arcwire = PathScripts.PathGeom.PathGeom.edgeForCmd(p, curVec)
pointlist = arcwire.discretize(Deflection=d)
for point in pointlist:
newcommand = Path.Command("G1", {'X':point.x, 'Y':point.y, 'Z':point.z})
newcommandlist.append(newcommand)
currLocation.update(newcommand.Parameters)
else:
newcommandlist.append(p)
currLocation.update(p.Parameters)
return newcommandlist
def execute(self, obj):
inAxis = obj.axisMap[0]
outAxis = obj.axisMap[3]
d = 0.1
if obj.Base:
if obj.Base.isDerivedFrom("Path::Feature"):
if obj.Base.Path:
if obj.Base.Path.Commands:
pp = obj.Base.Path.Commands
if len([i for i in pp if i.Name in arccommands]) == 0:
pathlist = pp
else:
pathlist = self._stripArcs(pp, d)
newcommandlist = []
for c in obj.Base.Path.Commands:
currLocation = {}
for c in pathlist: #obj.Base.Path.Commands:
newparams = dict(c.Parameters)
remapvar = newparams.pop(inAxis, None)
if remapvar is not None:
newparams[outAxis] = self._linear2angular(obj.radius, remapvar)
locdiff = dict(set(newparams.items()) - set(currLocation.items()))
if len(locdiff) == 1 and outAxis in locdiff: #pure rotation. Calculate rotational feed rate
if 'F' in c.Parameters:
feed = c.Parameters['F']
else:
feed = currLocation['F']
newparams.update({"F":self._linear2angular(obj.radius, feed)})
newcommand = Path.Command(c.Name, newparams)
newcommandlist.append(newcommand)
currLocation.update(newparams)
else:
newcommandlist.append(c)
currLocation.update(c.Parameters)
path = Path.Path(newcommandlist)
obj.Path = path
# obj.Path.Commands = newcommandlist
class ViewProviderDressup:
def __init__(self, vobj):