diff --git a/src/Mod/Path/App/AppPath.cpp b/src/Mod/Path/App/AppPath.cpp
index ab6ffe02ec..3acf8b8284 100644
--- a/src/Mod/Path/App/AppPath.cpp
+++ b/src/Mod/Path/App/AppPath.cpp
@@ -27,6 +27,7 @@
#endif
#include
+#include
#include
#include "Command.h"
@@ -47,7 +48,7 @@ extern PyObject* initModule();
}
/* Python entry */
-PyMODINIT_FUNC initPath()
+PyMOD_INIT_FUNC(Path)
{
PyObject* pathModule = Path::initModule();
Base::Console().Log("Loading Path module... done\n");
@@ -74,4 +75,6 @@ PyMODINIT_FUNC initPath()
Path::FeatureCompoundPython ::init();
Path::FeatureShape ::init();
Path::FeatureShapePython ::init();
+
+ PyMOD_Return(pathModule);
}
diff --git a/src/Mod/Path/App/CommandPyImp.cpp b/src/Mod/Path/App/CommandPyImp.cpp
index 9f01e703ea..2b19863647 100644
--- a/src/Mod/Path/App/CommandPyImp.cpp
+++ b/src/Mod/Path/App/CommandPyImp.cpp
@@ -74,15 +74,28 @@ int CommandPy::PyInit(PyObject* args, PyObject* kwd)
PyObject *key, *value;
Py_ssize_t pos = 0;
while (parameters && PyDict_Next(parameters, &pos, &key, &value)) {
+#if PY_MAJOR_VERSION >= 3
+ if ( !PyObject_TypeCheck(key,&(PyBytes_Type)) || (!PyObject_TypeCheck(value,&(PyFloat_Type)) && !PyObject_TypeCheck(value,&(PyLong_Type))) ) {
+#else
if ( !PyObject_TypeCheck(key,&(PyString_Type)) || (!PyObject_TypeCheck(value,&(PyFloat_Type)) && !PyObject_TypeCheck(value,&(PyInt_Type))) ) {
+#endif
PyErr_SetString(PyExc_TypeError, "The dictionary can only contain string:number pairs");
return -1;
}
+#if PY_MAJOR_VERSION >= 3
+ std::string ckey = PyBytes_AsString(key);
+#else
std::string ckey = PyString_AsString(key);
+#endif
boost::to_upper(ckey);
double cvalue;
+#if PY_MAJOR_VERSION >= 3
+ if (PyObject_TypeCheck(value,&(PyLong_Type))) {
+ cvalue = (double)PyLong_AsLong(value);
+#else
if (PyObject_TypeCheck(value,&(PyInt_Type))) {
cvalue = (double)PyInt_AsLong(value);
+#endif
} else {
cvalue = PyFloat_AsDouble(value);
}
@@ -124,7 +137,11 @@ Py::Dict CommandPy::getParameters(void) const
{
PyObject *dict = PyDict_New();
for(std::map::iterator i = getCommandPtr()->Parameters.begin(); i != getCommandPtr()->Parameters.end(); ++i) {
+#if PY_MAJOR_VERSION >= 3
+ PyDict_SetItem(dict,PyBytes_FromString(i->first.c_str()),PyFloat_FromDouble(i->second));
+#else
PyDict_SetItem(dict,PyString_FromString(i->first.c_str()),PyFloat_FromDouble(i->second));
+#endif
}
return Py::Dict(dict);
}
@@ -135,12 +152,22 @@ void CommandPy::setParameters(Py::Dict arg)
PyObject *key, *value;
Py_ssize_t pos = 0;
while (PyDict_Next(dict_copy, &pos, &key, &value)) {
+#if PY_MAJOR_VERSION >= 3
+ if ( PyObject_TypeCheck(key,&(PyBytes_Type)) && (PyObject_TypeCheck(value,&(PyFloat_Type)) || PyObject_TypeCheck(value,&(PyLong_Type)) ) ) {
+ std::string ckey = PyBytes_AsString(key);
+#else
if ( PyObject_TypeCheck(key,&(PyString_Type)) && (PyObject_TypeCheck(value,&(PyFloat_Type)) || PyObject_TypeCheck(value,&(PyInt_Type)) ) ) {
std::string ckey = PyString_AsString(key);
+#endif
boost::to_upper(ckey);
double cvalue;
+#if PY_MAJOR_VERSION >= 3
+ if (PyObject_TypeCheck(value,&(PyLong_Type))) {
+ cvalue = (double)PyLong_AsLong(value);
+#else
if (PyObject_TypeCheck(value,&(PyInt_Type))) {
cvalue = (double)PyInt_AsLong(value);
+#endif
} else {
cvalue = PyFloat_AsDouble(value);
}
@@ -156,7 +183,11 @@ void CommandPy::setParameters(Py::Dict arg)
PyObject* CommandPy::toGCode(PyObject *args)
{
if (PyArg_ParseTuple(args, "")) {
+#if PY_MAJOR_VERSION >= 3
+ return PyBytes_FromString(getCommandPtr()->toGCode().c_str());
+#else
return PyString_FromString(getCommandPtr()->toGCode().c_str());
+#endif
}
throw Py::Exception("This method accepts no argument");
}
@@ -226,8 +257,13 @@ int CommandPy::setCustomAttributes(const char* attr, PyObject* obj)
if (isalpha(satt[0])) {
boost::to_upper(satt);
double cvalue;
+#if PY_MAJOR_VERSION >= 3
+ if (PyObject_TypeCheck(obj,&(PyLong_Type))) {
+ cvalue = (double)PyLong_AsLong(obj);
+#else
if (PyObject_TypeCheck(obj,&(PyInt_Type))) {
cvalue = (double)PyInt_AsLong(obj);
+#endif
} else if (PyObject_TypeCheck(obj,&(PyFloat_Type))) {
cvalue = PyFloat_AsDouble(obj);
} else {
diff --git a/src/Mod/Path/App/PathPy.xml b/src/Mod/Path/App/PathPy.xml
index 3522ecec1e..6433f01171 100644
--- a/src/Mod/Path/App/PathPy.xml
+++ b/src/Mod/Path/App/PathPy.xml
@@ -26,7 +26,7 @@ commands (optional) is a list of Path commands
the number of commands in this path
-
+
diff --git a/src/Mod/Path/App/PathPyImp.cpp b/src/Mod/Path/App/PathPyImp.cpp
index 46817bf33a..233a40ecf0 100644
--- a/src/Mod/Path/App/PathPyImp.cpp
+++ b/src/Mod/Path/App/PathPyImp.cpp
@@ -112,9 +112,9 @@ Py::Float PathPy::getLength(void) const
return Py::Float(getToolpathPtr()->getLength());
}
-Py::Int PathPy::getSize(void) const
+Py::Long PathPy::getSize(void) const
{
- return Py::Int((int)getToolpathPtr()->getSize());
+ return Py::Long((long)getToolpathPtr()->getSize());
}
// specific methods
@@ -178,7 +178,11 @@ PyObject* PathPy::toGCode(PyObject * args)
{
if (PyArg_ParseTuple(args, "")) {
std::string result = getToolpathPtr()->toGCode();
+#if PY_MAJOR_VERSION >= 3
+ return PyBytes_FromString(result.c_str());
+#else
return PyString_FromString(result.c_str());
+#endif
}
throw Py::Exception("This method accepts no argument");
}
diff --git a/src/Mod/Path/App/TooltablePyImp.cpp b/src/Mod/Path/App/TooltablePyImp.cpp
index 0b2ad66070..abae1958e4 100644
--- a/src/Mod/Path/App/TooltablePyImp.cpp
+++ b/src/Mod/Path/App/TooltablePyImp.cpp
@@ -363,11 +363,19 @@ int TooltablePy::PyInit(PyObject* args, PyObject* /*kwd*/)
PyObject *key, *value;
Py_ssize_t pos = 0;
while (PyDict_Next(pcObj, &pos, &key, &value)) {
+#if PY_MAJOR_VERSION >= 3
+ if ( !PyObject_TypeCheck(key,&(PyLong_Type)) || !PyObject_TypeCheck(value,&(Path::ToolPy::Type)) ) {
+#else
if ( !PyObject_TypeCheck(key,&(PyInt_Type)) || !PyObject_TypeCheck(value,&(Path::ToolPy::Type)) ) {
+#endif
PyErr_SetString(PyExc_TypeError, "The dictionary can only contain int:tool pairs");
return -1;
}
+#if PY_MAJOR_VERSION >= 3
+ int ckey = (int)PyLong_AsLong(key);
+#else
int ckey = (int)PyInt_AsLong(key);
+#endif
Path::Tool &tool = *static_cast(value)->getToolPtr();
getTooltablePtr()->setTool(tool,ckey);
}
@@ -397,7 +405,11 @@ Py::Dict TooltablePy::getTools(void) const
PyObject *dict = PyDict_New();
for(std::map::iterator i = getTooltablePtr()->Tools.begin(); i != getTooltablePtr()->Tools.end(); ++i) {
PyObject *tool = new Path::ToolPy(i->second);
+#if PY_MAJOR_VERSION >= 3
+ PyDict_SetItem(dict,PyLong_FromLong(i->first),tool);
+#else
PyDict_SetItem(dict,PyInt_FromLong(i->first),tool);
+#endif
}
return Py::Dict(dict);
}
@@ -409,8 +421,13 @@ void TooltablePy::setTools(Py::Dict arg)
PyObject *key, *value;
Py_ssize_t pos = 0;
while (PyDict_Next(dict_copy, &pos, &key, &value)) {
+#if PY_MAJOR_VERSION >= 3
+ if ( PyObject_TypeCheck(key,&(PyLong_Type)) && (PyObject_TypeCheck(value,&(Path::ToolPy::Type))) ) {
+ int ckey = (int)PyLong_AsLong(key);
+#else
if ( PyObject_TypeCheck(key,&(PyInt_Type)) && (PyObject_TypeCheck(value,&(Path::ToolPy::Type))) ) {
int ckey = (int)PyInt_AsLong(key);
+#endif
Path::Tool &tool = *static_cast(value)->getToolPtr();
getTooltablePtr()->setTool(tool,ckey);
} else {
diff --git a/src/Mod/Path/Gui/AppPathGui.cpp b/src/Mod/Path/Gui/AppPathGui.cpp
index 3d05456343..714e1595e1 100644
--- a/src/Mod/Path/Gui/AppPathGui.cpp
+++ b/src/Mod/Path/Gui/AppPathGui.cpp
@@ -51,11 +51,11 @@ extern PyObject* initModule();
}
/* Python entry */
-PyMODINIT_FUNC initPathGui()
+PyMOD_INIT_FUNC(PathGui)
{
if (!Gui::Application::Instance) {
PyErr_SetString(PyExc_ImportError, "Cannot load Gui module in console application.");
- return;
+ PyMOD_Return(0);
}
try {
Base::Interpreter().runString("import PartGui");
@@ -63,9 +63,9 @@ PyMODINIT_FUNC initPathGui()
}
catch(const Base::Exception& e) {
PyErr_SetString(PyExc_ImportError, e.what());
- return;
+ PyMOD_Return(0);
}
- (void)PathGui::initModule();
+ PyObject* mod = PathGui::initModule();
Base::Console().Log("Loading GUI of Path module... done\n");
// instantiating the commands
@@ -83,4 +83,6 @@ PyMODINIT_FUNC initPathGui()
// register preferences pages
new Gui::PrefPageProducer ("Path");
+
+ PyMOD_Return(mod);
}
diff --git a/src/Mod/Path/PathScripts/PathCompoundExtended.py b/src/Mod/Path/PathScripts/PathCompoundExtended.py
index 08e9b20808..7a2e547a92 100644
--- a/src/Mod/Path/PathScripts/PathCompoundExtended.py
+++ b/src/Mod/Path/PathScripts/PathCompoundExtended.py
@@ -20,6 +20,7 @@
# * USA *
# * *
# ***************************************************************************
+from __future__ import print_function
import FreeCAD
import FreeCADGui
@@ -57,7 +58,7 @@ class ObjectCompoundExtended:
def onChanged(self, obj, prop):
if prop == "Group":
- print 'check order'
+ print('check order')
for child in obj.Group:
if child.isDerivedFrom("Path::Feature"):
child.touch()
diff --git a/src/Mod/Path/PathScripts/PathDressup.py b/src/Mod/Path/PathScripts/PathDressup.py
index 3954747194..82cb1c3042 100644
--- a/src/Mod/Path/PathScripts/PathDressup.py
+++ b/src/Mod/Path/PathScripts/PathDressup.py
@@ -21,6 +21,7 @@
# * USA *
# * *
# ***************************************************************************
+from __future__ import print_function
import FreeCAD
import FreeCADGui
import Path
@@ -90,7 +91,7 @@ class ViewProviderDressup:
if g.Name == self.Object.Base.Name:
group.remove(g)
i.Group = group
- print i.Group
+ print(i.Group)
return [self.Object.Base]
def __getstate__(self):
diff --git a/src/Mod/Path/PathScripts/PathDressupDogbone.py b/src/Mod/Path/PathScripts/PathDressupDogbone.py
index dfc6788545..b165923f7a 100644
--- a/src/Mod/Path/PathScripts/PathDressupDogbone.py
+++ b/src/Mod/Path/PathScripts/PathDressupDogbone.py
@@ -21,6 +21,7 @@
# * USA *
# * *
# ***************************************************************************
+from __future__ import print_function
import DraftGeomUtils
import FreeCAD
import FreeCADGui
@@ -951,7 +952,7 @@ class ViewProviderDressup:
if g.Name == self.Object.Base.Name:
group.remove(g)
i.Group = group
- print i.Group
+ print(i.Group)
#FreeCADGui.ActiveDocument.getObject(obj.Base.Name).Visibility = False
return [self.Object.Base]
diff --git a/src/Mod/Path/PathScripts/PathDressupDragknife.py b/src/Mod/Path/PathScripts/PathDressupDragknife.py
index 47925491b2..34ccee8362 100644
--- a/src/Mod/Path/PathScripts/PathDressupDragknife.py
+++ b/src/Mod/Path/PathScripts/PathDressupDragknife.py
@@ -22,6 +22,7 @@
# * *
# ***************************************************************************
+from __future__ import print_function
import FreeCAD
import FreeCADGui
import Path
@@ -451,7 +452,7 @@ class ViewProviderDressup:
if g.Name == self.Object.Base.Name:
group.remove(g)
i.Group = group
- print i.Group
+ print(i.Group)
#FreeCADGui.ActiveDocument.getObject(obj.Base.Name).Visibility = False
return [self.Object.Base]
diff --git a/src/Mod/Path/PathScripts/PathDrilling.py b/src/Mod/Path/PathScripts/PathDrilling.py
index 345c9c4e12..14e452378d 100644
--- a/src/Mod/Path/PathScripts/PathDrilling.py
+++ b/src/Mod/Path/PathScripts/PathDrilling.py
@@ -22,6 +22,7 @@
# * *
# ***************************************************************************
+from __future__ import print_function
import FreeCAD
import Path
import Part
@@ -304,7 +305,7 @@ class ObjectDrilling:
else:
baselist.append(item)
- print baselist
+ print(baselist)
obj.Base = baselist
self.execute(obj)
diff --git a/src/Mod/Path/PathScripts/PathKurveUtils.py b/src/Mod/Path/PathScripts/PathKurveUtils.py
index 138351a1f9..52fdbe217d 100644
--- a/src/Mod/Path/PathScripts/PathKurveUtils.py
+++ b/src/Mod/Path/PathScripts/PathKurveUtils.py
@@ -22,6 +22,7 @@
# * *
# ***************************************************************************
'''PathKurveUtils - functions needed for using libarea (created by Dan Heeks) for making simple CNC profile paths '''
+from __future__ import print_function
import Part
import math
import area
@@ -142,7 +143,7 @@ def profile(curve, side_of_line, radius=1.0, vertfeed=0.0, horizfeed=0.0, offset
output = ""
output += "G0 Z" + str(clearance) + "\n"
- print "in profile: 151"
+ print("in profile: 151")
offset_curve = area.Curve(curve)
if offset_curve.getNumVertices() <= 1:
raise Exception, "Sketch has no elements!"
@@ -338,10 +339,10 @@ def profile2(curve, direction="on", radius=1.0, vertfeed=0.0,
using_area_for_offset = True
a = area.Area()
a.append(curve)
- print "curve, offset: " , str(curve), str(offset)
+ print("curve, offset: " , str(curve), str(offset))
a.Offset(-offset)
for curve in a.getCurves():
- print "result curve: ", curve
+ print("result curve: ", curve)
curve_cw = curve.IsClockwise()
if cw != curve_cw:
curve.Reverse()
diff --git a/src/Mod/Path/PathScripts/PathLog.py b/src/Mod/Path/PathScripts/PathLog.py
index 193712768e..0ef3ced7ba 100644
--- a/src/Mod/Path/PathScripts/PathLog.py
+++ b/src/Mod/Path/PathScripts/PathLog.py
@@ -82,8 +82,9 @@ def _caller():
file, line, func, text = traceback.extract_stack(limit=3)[0]
return os.path.splitext(os.path.basename(file))[0], line, func
-def _log(level, (module, line, func), msg):
+def _log(level, module_line_func, msg):
"""internal function to do the logging"""
+ module, line, func = module_line_func
if getLevel(module) >= level:
message = "%s.%s: %s" % (module, Level.toString(level), msg)
if _useConsole:
diff --git a/src/Mod/Path/PathScripts/PathMillFace.py b/src/Mod/Path/PathScripts/PathMillFace.py
index 13747fe432..c9c2c1e511 100644
--- a/src/Mod/Path/PathScripts/PathMillFace.py
+++ b/src/Mod/Path/PathScripts/PathMillFace.py
@@ -22,6 +22,7 @@
# * *
# ***************************************************************************
+from __future__ import print_function
import FreeCAD
import Path
from PySide import QtCore, QtGui
@@ -211,7 +212,7 @@ class ObjectFace:
# To reload this from FreeCAD, use: import PathScripts.PathFace; reload(PathScripts.PathFace)
def execute(self, obj):
- print "in execute"
+ print("in execute")
if not obj.Active:
path = Path.Path("(inactive operation)")
@@ -260,7 +261,7 @@ class ObjectFace:
if isinstance (shape, Part.Face):
faces.append(shape)
else:
- print ('falling out')
+ print('falling out')
return
planeshape = Part.makeCompound(faces)
diff --git a/src/Mod/Path/PathScripts/PathPocket.py b/src/Mod/Path/PathScripts/PathPocket.py
index 441a72790e..4d8c4fae8b 100644
--- a/src/Mod/Path/PathScripts/PathPocket.py
+++ b/src/Mod/Path/PathScripts/PathPocket.py
@@ -154,7 +154,7 @@ class ObjectPocket:
else:
baselist.append(item)
obj.Base = baselist
- print "this base is: " + str(baselist)
+ print("this base is: " + str(baselist))
self.execute(obj)
def getStock(self, obj):
@@ -316,7 +316,7 @@ class ObjectPocket:
# Otherwise, straight plunge... Don't want to, but sometimes you might not have a choice.
# FIXME: At least not with the lazy ramp programming above...
else:
- print "WARNING: Straight-plunging... probably not good, but we didn't find a place to helix or ramp"
+ print("WARNING: Straight-plunging... probably not good, but we didn't find a place to helix or ramp")
startPoint = edge.Vertexes[0].Point
output += "G0 Z" + fmt(obj.ClearanceHeight.Value) + "F " + PathUtils.fmt(self.vertRapid) + "\n"
output += "G0 X" + fmt(startPoint.x) + " Y" + fmt(startPoint.y) +\
diff --git a/src/Mod/Path/PathScripts/PathPost.py b/src/Mod/Path/PathScripts/PathPost.py
index 1be6689bcc..38b2c3f683 100644
--- a/src/Mod/Path/PathScripts/PathPost.py
+++ b/src/Mod/Path/PathScripts/PathPost.py
@@ -22,6 +22,7 @@
# * *
# ***************************************************************************
''' Post Process command that will make use of the Output File and Post Processor entries in PathJob '''
+from __future__ import print_function
import FreeCAD
import FreeCADGui
from PySide import QtCore, QtGui
@@ -190,7 +191,7 @@ class CommandPathPost:
FreeCADGui.addModule("PathScripts.PathPost")
# select the Path Job that you want to post output from
selected = FreeCADGui.Selection.getCompleteSelection()
- print "in activated %s" %(selected)
+ print("in activated %s" %(selected))
# try to find the job, if it's not directly selected ...
jobs = set()
diff --git a/src/Mod/Path/PathScripts/PathPostProcessor.py b/src/Mod/Path/PathScripts/PathPostProcessor.py
index 618123fd30..68675f54dc 100644
--- a/src/Mod/Path/PathScripts/PathPostProcessor.py
+++ b/src/Mod/Path/PathScripts/PathPostProcessor.py
@@ -35,12 +35,12 @@ class PostProcessor:
def load(cls, processor):
postname = processor + "_post"
- exec "import %s as current_post" % postname
+ exec("import %s as current_post" % postname)
# make sure the script is reloaded if it was previously loaded
# should the script have been imported for the first time above
# then the initialization code of the script gets executed twice
# resulting in 2 load messages if the script outputs one of those.
- exec "reload(%s)" % 'current_post'
+ exec("reload(%s)" % 'current_post')
instance = PostProcessor(current_post)
instance.units = None
diff --git a/src/Mod/Path/PathScripts/PathProfileEdges.py b/src/Mod/Path/PathScripts/PathProfileEdges.py
index 213bfaacdd..2abadf38ff 100644
--- a/src/Mod/Path/PathScripts/PathProfileEdges.py
+++ b/src/Mod/Path/PathScripts/PathProfileEdges.py
@@ -165,8 +165,8 @@ class ObjectProfile:
curve = PathKurveUtils.makeAreaCurve(edgelist, obj.Direction, startpoint, endpoint)
'''The following line uses a profile function written for use with FreeCAD. It's clean but incomplete. It doesn't handle
-print "x = " + str(point.x)
-print "y - " + str(point.y)
+print("x = " + str(point.x))
+print("y - " + str(point.y))
holding tags
start location
CRC
diff --git a/src/Mod/Path/PathScripts/PathSanity.py b/src/Mod/Path/PathScripts/PathSanity.py
index da0027c37a..e6d3ac2bfc 100644
--- a/src/Mod/Path/PathScripts/PathSanity.py
+++ b/src/Mod/Path/PathScripts/PathSanity.py
@@ -25,6 +25,7 @@
Path projects. Ideally, the user could execute these utilities from an icon
to make sure tools are selected and configured and defaults have been revised'''
+from __future__ import print_function
from PySide import QtCore, QtGui
import FreeCAD
import FreeCADGui
@@ -50,7 +51,7 @@ def review(obj):
FreeCAD.Console.PrintWarning(translate("Path_Sanity", "It appears the machine limits haven't been set. Not able to check path extents.\n"))
for item in obj.Group:
- print "Checking: " + item.Label
+ print("Checking: " + item.Label)
if item.Name[:2] == "TC":
toolcontrolcount += 1
if item.ToolNumber == 0:
diff --git a/src/Mod/Path/PathScripts/PathSurface.py b/src/Mod/Path/PathScripts/PathSurface.py
index 4dd334298c..d38fdc05b2 100644
--- a/src/Mod/Path/PathScripts/PathSurface.py
+++ b/src/Mod/Path/PathScripts/PathSurface.py
@@ -22,6 +22,7 @@
# * *
# ***************************************************************************
+from __future__ import print_function
import FreeCAD
import Path
from PathScripts import PathUtils
@@ -145,7 +146,7 @@ class ObjectSurface:
str(fmt(p.x)) + " Y" + str(fmt(p.y)) + \
" Z" + str(fmt(zheight)) + "\n"
loopstring += "(loop end)" + "\n"
- print " loop ", nloop, " with ", len(loop), " points"
+ print(" loop ", nloop, " with ", len(loop), " points")
nloop = nloop + 1
waterlinestring += loopstring
waterlinestring += "(waterline end)" + "\n"
@@ -174,7 +175,7 @@ class ObjectSurface:
# (see c++ code)
all_loops = []
for zh in zheights:
- print "calculating Waterline at z= ", zh
+ print("calculating Waterline at z= ", zh)
wl.reset()
wl.setZ(zh) # height for this waterline
wl.run()
@@ -184,10 +185,10 @@ class ObjectSurface:
n = 0
output = ""
for loops in all_loops: # at each z-height, we may get many loops
- print " %d/%d:" % (n, len(all_loops))
+ print(" %d/%d:" % (n, len(all_loops)))
output += drawLoops(loops)
n = n + 1
- print "(" + str(calctime) + ")"
+ print("(" + str(calctime) + ")")
return output
def _dropcutter(self, obj, s, bb):
@@ -231,11 +232,11 @@ class ObjectSurface:
t_before = time.time()
pdc.run()
t_after = time.time()
- print "calculation took ", t_after - t_before, " s"
+ print("calculation took ", t_after - t_before, " s")
# retrieve the points
clp = pdc.getCLPoints()
- print "points received: " + str(len(clp))
+ print("points received: " + str(len(clp)))
# generate the path commands
output = ""
@@ -296,7 +297,7 @@ class ObjectSurface:
mesh = parentJob.Base
if mesh is None:
return
- print "base object: " + mesh.Name
+ print("base object: " + mesh.Name)
@@ -499,13 +500,13 @@ class TaskPanel:
# get type of object
if sel.TypeId.startswith('Mesh'):
# it is a mesh already
- print 'was already mesh'
+ print('was already mesh')
elif sel.TypeId.startswith('Part') and \
(sel.Shape.BoundBox.XLength > 0) and \
(sel.Shape.BoundBox.YLength > 0) and \
(sel.Shape.BoundBox.ZLength > 0):
- print 'this is a solid Part object'
+ print('this is a solid Part object')
else:
FreeCAD.Console.PrintError(
diff --git a/src/Mod/Path/PathScripts/PathToolLibraryManager.py b/src/Mod/Path/PathScripts/PathToolLibraryManager.py
index a77820cf72..d84797137a 100644
--- a/src/Mod/Path/PathScripts/PathToolLibraryManager.py
+++ b/src/Mod/Path/PathScripts/PathToolLibraryManager.py
@@ -22,6 +22,7 @@
# * *
# ***************************************************************************
+from __future__ import print_function
import FreeCAD
import xml.sax
import FreeCADGui
@@ -254,8 +255,8 @@ class ToolLibraryManager():
if listname == "":
self.saveMainLibrary(tt)
return True
- except Exception, e:
- print "could not parse file", e
+ except Exception as e:
+ print("could not parse file", e)
def write(self, filename, listname):
"exports the tooltable to a file"
@@ -266,14 +267,14 @@ class ToolLibraryManager():
file.write('\n')
file.write(tt.Content)
file.close()
- print "Written ", unicode(filename[0])
+ print("Written ", unicode(filename[0]))
- except Exception, e:
- print "Could not write file:", e
+ except Exception as e:
+ print("Could not write file:", e)
def addnew(self, listname, tool, position = None):
"adds a new tool at the end of the table"
- print listname, tool, position
+ print(listname, tool, position)
tt = self._findList(listname)
if position is None:
tt.addTools(tool)
@@ -413,7 +414,7 @@ class EditorPanel():
def addTool(self):
t = Path.Tool()
- print ("adding a new tool")
+ print("adding a new tool")
editform = FreeCADGui.PySideUic.loadUi(":/panels/ToolEdit.ui")
r = editform.exec_()
diff --git a/src/Mod/Path/PathScripts/PathUtils.py b/src/Mod/Path/PathScripts/PathUtils.py
index 4e75ef0898..d30b1f784a 100644
--- a/src/Mod/Path/PathScripts/PathUtils.py
+++ b/src/Mod/Path/PathScripts/PathUtils.py
@@ -620,7 +620,7 @@ def addToJob(obj, jobname = None):
if r is False:
return None
else:
- print form.cboProject.currentText()
+ print(form.cboProject.currentText())
job = [i for i in jobs if i.Name == form.cboProject.currentText()][0]
g = job.Group
@@ -690,7 +690,7 @@ def arc(cx, cy, sx, sy, ex, ey, horizFeed=0, ez=None, ccw=False):
eps = 0.01
if (math.sqrt((cx - sx)**2 + (cy - sy)**2) - math.sqrt((cx - ex)**2 + (cy - ey)**2)) >= eps:
- print "ERROR: Illegal arc: Start and end radii not equal"
+ print("ERROR: Illegal arc: Start and end radii not equal")
return ""
retstr = ""
diff --git a/src/Mod/Path/PathScripts/TooltableEditor.py b/src/Mod/Path/PathScripts/TooltableEditor.py
index 84930c3d16..f55d275ae6 100644
--- a/src/Mod/Path/PathScripts/TooltableEditor.py
+++ b/src/Mod/Path/PathScripts/TooltableEditor.py
@@ -70,8 +70,8 @@ class FreeCADTooltableHandler(xml.sax.ContentHandler):
self.tool.Name = str(attributes["name"])
self.tool.ToolType = str(attributes["type"])
self.tool.Material = str(attributes["mat"])
- # for some reason without the following line I get an error
- print attributes["diameter"]
+ # for some reason without the following line I get an error
+ print(attributes["diameter"])
self.tool.Diameter = float(attributes["diameter"])
self.tool.LengthOffset = float(attributes["length"])
self.tool.FlatRadius = float(attributes["flat"])
@@ -122,8 +122,8 @@ class HeeksTooltableHandler(xml.sax.ContentHandler):
self.tool.Material = "HighSpeedSteel"
elif m == "1":
self.tool.Material = "Carbide"
- # for some reason without the following line I get an error
- print attributes["diameter"]
+ # for some reason without the following line I get an error
+ print(attributes["diameter"])
self.tool.Diameter = float(attributes["diameter"])
self.tool.LengthOffset = float(attributes["tool_length_offset"])
self.tool.FlatRadius = float(attributes["flat_radius"])
@@ -654,7 +654,7 @@ class Editor(QtGui.QDialog):
def addnew(self):
"adds a new tool at the end of the table"
tool = Path.Tool()
- print self.NameField
+ print(self.NameField)
if self.NameField.text():
tool.Name = str(self.NameField.text())
tool.ToolType = self.getType(self.TypeField.currentIndex())
@@ -695,8 +695,8 @@ class Editor(QtGui.QDialog):
fil.write('\n')
fil.write(self.tooltable.Content)
fil.close()
- print "Written ", filename[0]
-
+ print("Written ",filename[0])
+
def moveup(self):
"moves a tool to a lower number, if possible"
if self.number:
diff --git a/src/Mod/Path/PathScripts/centroid_post.py b/src/Mod/Path/PathScripts/centroid_post.py
index dbae475d90..ce42dc60bb 100644
--- a/src/Mod/Path/PathScripts/centroid_post.py
+++ b/src/Mod/Path/PathScripts/centroid_post.py
@@ -21,6 +21,7 @@
#* USA *
#* *
#***************************************************************************
+from __future__ import print_function
TOOLTIP=''' example post for Centroid CNC mill'''
import FreeCAD
@@ -73,7 +74,7 @@ def export(selection,filename,argstring):
params = ['X','Y','Z','A','B','I','J','F','H','S','T','Q','R','L'] #Using XY plane most of the time so skipping K
for obj in selection:
if not hasattr(obj,"Path"):
- print "the object " + obj.Name + " is not a path. Please select only path and Compounds."
+ print("the object " + obj.Name + " is not a path. Please select only path and Compounds.")
return
myMachine = None
for pathobj in selection:
@@ -85,7 +86,7 @@ def export(selection,filename,argstring):
else:
UNITS = "G20"
if myMachine is None:
- print "No machine found in this selection"
+ print("No machine found in this selection")
gcode =''
gcode+= HEADER % (FreeCAD.ActiveDocument.FileName)
diff --git a/src/Mod/Path/PathScripts/dumper_post.py b/src/Mod/Path/PathScripts/dumper_post.py
index 6a661b1b7d..f5c7f3ef98 100644
--- a/src/Mod/Path/PathScripts/dumper_post.py
+++ b/src/Mod/Path/PathScripts/dumper_post.py
@@ -20,7 +20,7 @@
# * USA *
# * *
# ***************************************************************************/
-
+from __future__ import print_function
TOOLTIP='''
Dumper is an extremely simple postprocessor file for the Path workbench. It is used
@@ -52,9 +52,9 @@ def export(objectslist, filename,argstring):
for obj in objectslist:
if not hasattr(obj, "Path"):
- print "the object " + obj.Name + " is not a path. Please select only path and Compounds."
+ print("the object " + obj.Name + " is not a path. Please select only path and Compounds.")
return
- print "postprocessing..."
+ print("postprocessing...")
output += parse(obj)
if SHOW_EDITOR:
@@ -68,7 +68,7 @@ def export(objectslist, filename,argstring):
else:
final = output
- print "done postprocessing."
+ print("done postprocessing.")
def parse(pathobj):
@@ -90,4 +90,4 @@ def parse(pathobj):
out += str(c) + "\n"
return out
-print __name__ + " gcode postprocessor loaded."
+print(__name__ + " gcode postprocessor loaded.")
diff --git a/src/Mod/Path/PathScripts/dynapath_post.py b/src/Mod/Path/PathScripts/dynapath_post.py
index 0571325cec..10f6ad29c1 100644
--- a/src/Mod/Path/PathScripts/dynapath_post.py
+++ b/src/Mod/Path/PathScripts/dynapath_post.py
@@ -24,7 +24,7 @@
#* (c) Linden (Linden@aktfast.net) 2016 *
#* *
#***************************************************************************/
-
+from __future__ import print_function
TOOLTIP='''
This is a postprocessor file for the Path workbench. It is used to
@@ -114,10 +114,10 @@ def export(objectslist,filename,argstring):
global UNITS
for obj in objectslist:
if not hasattr(obj,"Path"):
- print "the object " + obj.Name + " is not a path. Please select only path and Compounds."
+ print("the object " + obj.Name + " is not a path. Please select only path and Compounds.")
return
- print "postprocessing..."
+ print("postprocessing...")
gcode = ""
#Find the machine.
@@ -132,7 +132,7 @@ def export(objectslist,filename,argstring):
else:
UNITS = "G20"
if myMachine is None:
- print "No machine found in this selection"
+ print("No machine found in this selection")
# write header
if OUTPUT_HEADER:
@@ -177,7 +177,7 @@ def export(objectslist,filename,argstring):
else:
final = gcode
- print "done postprocessing."
+ print("done postprocessing.")
gfile = pythonopen(filename,"wb")
gfile.write(gcode)
@@ -259,5 +259,5 @@ def parse(pathobj):
return out
-print __name__ + " gcode postprocessor loaded."
+print(__name__ + " gcode postprocessor loaded.")
diff --git a/src/Mod/Path/PathScripts/example_post.py b/src/Mod/Path/PathScripts/example_post.py
index fe1516decf..96f139ac45 100644
--- a/src/Mod/Path/PathScripts/example_post.py
+++ b/src/Mod/Path/PathScripts/example_post.py
@@ -20,7 +20,7 @@
# * USA *
# * *
# ***************************************************************************/
-
+from __future__ import print_function
TOOLTIP='''
This is an example postprocessor file for the Path workbench. It is used
@@ -42,11 +42,11 @@ if open.__module__ == '__builtin__':
def export(objectslist, filename,argstring):
"called when freecad exports a list of objects"
if len(objectslist) > 1:
- print "This script is unable to write more than one Path object"
+ print("This script is unable to write more than one Path object")
return
obj = objectslist[0]
if not hasattr(obj, "Path"):
- print "the given object is not a path"
+ print("the given object is not a path")
gcode = obj.Path.toGCode()
gcode = parse(gcode)
gfile = pythonopen(filename, "wb")
@@ -56,7 +56,7 @@ def export(objectslist, filename,argstring):
def parse(inputstring):
"parse(inputstring): returns a parsed output string"
- print "postprocessing..."
+ print("postprocessing...")
output = ""
@@ -95,7 +95,7 @@ def parse(inputstring):
output += "N" + str(linenr + 30) + " G17 G80 G40 G90\n"
output += "N" + str(linenr + 40) + " M99\n"
- print "done postprocessing."
+ print("done postprocessing.")
return output
-print __name__ + " gcode postprocessor loaded."
+print(__name__ + " gcode postprocessor loaded.")
diff --git a/src/Mod/Path/PathScripts/example_pre.py b/src/Mod/Path/PathScripts/example_pre.py
index fbe43ec99a..0a90cf3af2 100644
--- a/src/Mod/Path/PathScripts/example_pre.py
+++ b/src/Mod/Path/PathScripts/example_pre.py
@@ -60,7 +60,7 @@ def insert(filename,docname):
def parse(inputstring):
"parse(inputstring): returns a parsed output string"
- print "preprocessing..."
+ print("preprocessing...")
# split the input by line
lines = inputstring.split("\n")
@@ -93,9 +93,9 @@ def parse(inputstring):
# no G or M command: we repeat the last one
output += lastcommand + " " + l + "\n"
- print "done preprocessing."
+ print("done preprocessing.")
return output
-print __name__ + " gcode preprocessor loaded."
+print(__name__ + " gcode preprocessor loaded.")
diff --git a/src/Mod/Path/PathScripts/generic_post.py b/src/Mod/Path/PathScripts/generic_post.py
index a98c40a036..92786c491b 100644
--- a/src/Mod/Path/PathScripts/generic_post.py
+++ b/src/Mod/Path/PathScripts/generic_post.py
@@ -22,6 +22,7 @@
#* *
#***************************************************************************
+from __future__ import print_function
TOOLTIP='''Post processor for Maho M 600E mill
Machines with Philips or Heidenhain control should be very easy to adapt.
@@ -285,7 +286,7 @@ def export(selection,filename,argstring):
modalParamsDict[mp] = None
for obj in selection:
if not hasattr(obj,"Path"):
- print "the object " + obj.Name + " is not a path. Please select only path and Compounds."
+ print("the object " + obj.Name + " is not a path. Please select only path and Compounds.")
return
myMachine = None
for pathobj in selection:
@@ -297,7 +298,7 @@ def export(selection,filename,argstring):
else:
UNITS = "G20"
if myMachine is None:
- print "No machine found in this selection"
+ print("No machine found in this selection")
gcode =''
gcode+= mkHeader(selection)
diff --git a/src/Mod/Path/PathScripts/linuxcnc_post.py b/src/Mod/Path/PathScripts/linuxcnc_post.py
index ecb32bee4f..b8b5f73a48 100644
--- a/src/Mod/Path/PathScripts/linuxcnc_post.py
+++ b/src/Mod/Path/PathScripts/linuxcnc_post.py
@@ -20,7 +20,7 @@
# * USA *
# * *
# ***************************************************************************/
-
+from __future__ import print_function
TOOLTIP='''
This is a postprocessor file for the Path workbench. It is used to
@@ -118,10 +118,10 @@ def export(objectslist, filename, argstring):
global UNITS
for obj in objectslist:
if not hasattr(obj, "Path"):
- print "the object " + obj.Name + " is not a path. Please select only path and Compounds."
+ print("the object " + obj.Name + " is not a path. Please select only path and Compounds.")
return
- print "postprocessing..."
+ print("postprocessing...")
gcode = ""
# Find the machine.
@@ -137,7 +137,7 @@ def export(objectslist, filename, argstring):
else:
UNITS = "G20"
if myMachine is None:
- print "No machine found in this selection"
+ print("No machine found in this selection")
# write header
if OUTPUT_HEADER:
@@ -186,7 +186,7 @@ def export(objectslist, filename, argstring):
else:
final = gcode
- print "done postprocessing."
+ print("done postprocessing.")
if not filename == '-':
gfile = pythonopen(filename, "wb")
@@ -279,4 +279,4 @@ def parse(pathobj):
return out
-print __name__ + " gcode postprocessor loaded."
+print(__name__ + " gcode postprocessor loaded.")
diff --git a/src/Mod/Path/PathScripts/opensbp_post.py b/src/Mod/Path/PathScripts/opensbp_post.py
index 4a20a86550..fbef1fc0d4 100644
--- a/src/Mod/Path/PathScripts/opensbp_post.py
+++ b/src/Mod/Path/PathScripts/opensbp_post.py
@@ -1,3 +1,4 @@
+from __future__ import print_function
import datetime
from PathScripts import PostUtils
@@ -81,14 +82,14 @@ def export(objectslist, filename, argstring):
if not hasattr(obj, "Path"):
s = "the object " + obj.Name
s += " is not a path. Please select only path and Compounds."
- print s
+ print(s)
return
CurrentState = {
'X': 0, 'Y': 0, 'Z': 0, 'F': 0, 'S': 0,
'JSXY': 0, 'JSZ': 0, 'MSXY': 0, 'MSZ': 0
}
- print "postprocessing..."
+ print("postprocessing...")
gcode = ""
# write header
@@ -136,7 +137,7 @@ def export(objectslist, filename, argstring):
else:
final = gcode
- print "done postprocessing."
+ print("done postprocessing.")
# Write the output
gfile = pythonopen(filename, "wb")
@@ -216,11 +217,11 @@ def move(command):
txt += "," + format(command.Parameters["Z"], '.4f')
txt += "\n"
elif axis == "":
- print "warning: skipping duplicate move."
+ print("warning: skipping duplicate move.")
else:
- print CurrentState
- print command
- print "I don't know how to handle '{}' for a move.".format(axis)
+ print(CurrentState)
+ print(command)
+ print("I don't know how to handle '{}' for a move.".format(axis))
return txt
@@ -255,7 +256,7 @@ def tool_change(command):
def comment(command):
- print "a comment"
+ print("a comment")
return
@@ -314,8 +315,8 @@ def parse(pathobj):
if c.Parameters:
CurrentState.update(c.Parameters)
else:
- print "I don't know what the hell the command: ",
- print command + " means. Maybe I should support it."
+ print("I don't know what the hell the command: ",end='')
+ print(command + " means. Maybe I should support it.")
return output
@@ -323,6 +324,6 @@ def linenumber():
return ""
-print __name__ + " gcode postprocessor loaded."
+print(__name__ + " gcode postprocessor loaded.")
# eof
diff --git a/src/Mod/Path/PathScripts/opensbp_pre.py b/src/Mod/Path/PathScripts/opensbp_pre.py
index 714d5bc66a..00c3b17218 100644
--- a/src/Mod/Path/PathScripts/opensbp_pre.py
+++ b/src/Mod/Path/PathScripts/opensbp_pre.py
@@ -46,6 +46,7 @@ TODO
Many other OpenSBP commands not handled
'''
+from __future__ import print_function
import FreeCAD
import os, Path
@@ -81,7 +82,7 @@ def insert(filename,docname):
def parse(inputstring):
"parse(inputstring): returns a list of parsed output string"
- print "preprocessing..."
+ print("preprocessing...")
# split the input by line
lines = inputstring.split("\n")
return_output = []
@@ -182,7 +183,7 @@ def parse(inputstring):
if words[0] in ["CG"]: #Gcode circle/arc
if words[1] != "": # diameter mode
- print "diameter mode not supported"
+ print("diameter mode not supported")
continue
else:
@@ -201,9 +202,9 @@ def parse(inputstring):
#Make sure all appended paths have at least one move command.
if any (x in output for x in movecommand):
return_output.append(output)
- print "done preprocessing."
+ print("done preprocessing.")
return return_output
-print __name__ + " gcode preprocessor loaded."
+print(__name__ + " gcode preprocessor loaded.")
diff --git a/src/Mod/Path/PathScripts/rml_post.py b/src/Mod/Path/PathScripts/rml_post.py
index 3460f9d4b5..edd9835d59 100644
--- a/src/Mod/Path/PathScripts/rml_post.py
+++ b/src/Mod/Path/PathScripts/rml_post.py
@@ -135,15 +135,15 @@ def xyarc(args, state):
steps = 64 # TODO: specify max error instead
points = arc.discretize(steps)
# TODO: consider direction
- #print 'p = Part.ArcOfCircle(Part.Circle(FreeCAD.Vector(%f, %f), FreeCAD.Vector(0, 0, 1), %f), %f, %f)' % (center.x, center.y, radius, p0, p1)
+ #print('p = Part.ArcOfCircle(Part.Circle(FreeCAD.Vector(%f, %f), FreeCAD.Vector(0, 0, 1), %f), %f, %f)' % (center.x, center.y, radius, p0, p1))
for p in points:
- #print 'p', p.x, p.y
+ #print('p', p.x, p.y)
c += feed(p.x, p.y, state['Z'], state)
return c
def speed(xy=None, z=None, state={}):
c = []
- print xy, z, state
+ print(xy, z, state)
if xy is not None:
xy = float(xy)
if xy > 0.0 and xy != state['XYspeed']:
@@ -235,7 +235,7 @@ def parse(inputstring):
continue
parsed = PostUtils.stringsplit(line)
command = parsed['command']
- print 'cmd', line
+ print('cmd', line)
try:
if command:
code = convertgcode(command, parsed, state)
@@ -243,8 +243,8 @@ def parse(inputstring):
code = [ code ]
if len(code) and code[0]:
output += code
- except NotImplementedError, e:
- print e
+ except NotImplementedError as e:
+ print(e)
# footer
output += motoroff()
@@ -253,5 +253,5 @@ def parse(inputstring):
return '\n'.join(output)
-print __name__ + " gcode postprocessor loaded."
+print (__name__ + " gcode postprocessor loaded.")
diff --git a/src/Mod/Path/PathScripts/slic3r_pre.py b/src/Mod/Path/PathScripts/slic3r_pre.py
index 2e25659fb1..004fb5aa41 100644
--- a/src/Mod/Path/PathScripts/slic3r_pre.py
+++ b/src/Mod/Path/PathScripts/slic3r_pre.py
@@ -55,7 +55,7 @@ def insert(filename,docname):
def parse(inputstring):
"parse(inputstring): returns a parsed output string"
- print "preprocessing..."
+ print("preprocessing...")
# split the input by line
lines = inputstring.split("\n")
@@ -89,9 +89,9 @@ def parse(inputstring):
# no G or M command: we repeat the last one
output += lastcommand + " " + l + "\n"
- print "done preprocessing."
+ print("done preprocessing.")
return output
-print __name__ + " gcode preprocessor loaded."
+print (__name__ + " gcode preprocessor loaded.")