diff --git a/src/Base/VectorPy.xml b/src/Base/VectorPy.xml
index c4954a85f2..b26041a136 100644
--- a/src/Base/VectorPy.xml
+++ b/src/Base/VectorPy.xml
@@ -18,7 +18,14 @@
This is the Vector export class
This class represents a 3D float vector
-
+
+
+ __reduce__()
+ Serialization of Vector objects
+
+
+
+
add(Vector)
returns the sum of this and another vector
@@ -32,7 +39,7 @@
-
+
negative()
returns the negative (opposite) of this vector
diff --git a/src/Base/VectorPyImp.cpp b/src/Base/VectorPyImp.cpp
index b1b3bf4f2b..633f652415 100644
--- a/src/Base/VectorPyImp.cpp
+++ b/src/Base/VectorPyImp.cpp
@@ -88,6 +88,26 @@ int VectorPy::PyInit(PyObject* args, PyObject* /*kwd*/)
return -1;
}
+PyObject* VectorPy::__reduce__(PyObject *args)
+{
+ if (!PyArg_ParseTuple(args, ""))
+ return 0;
+
+ Py::Tuple tuple(2);
+
+ union PyType_Object pyType = {&VectorPy::Type};
+ Py::Object type(pyType.o);
+ tuple.setItem(0, type);
+
+ Base::Vector3d v = this->value();
+ Py::Tuple xyz(3);
+ xyz.setItem(0, Py::Float(v.x));
+ xyz.setItem(1, Py::Float(v.y));
+ xyz.setItem(2, Py::Float(v.z));
+ tuple.setItem(1, xyz);
+ return Py::new_reference_to(tuple);
+}
+
PyObject* VectorPy::number_add_handler(PyObject *self, PyObject *other)
{
if (!PyObject_TypeCheck(self, &(VectorPy::Type))) {