From 8426ebe2ba19863cf45952f00b42b7205ca9c406 Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Tue, 8 Oct 2019 09:19:17 +0800 Subject: [PATCH] Fix various Py::Object leak --- src/App/ComplexGeoDataPyImp.cpp | 2 +- src/App/DocumentObjectPyImp.cpp | 6 +++--- src/App/Expression.cpp | 22 +++++++++++----------- src/App/FeaturePython.cpp | 4 ++-- src/App/PropertyLinks.cpp | 2 +- src/Base/QuantityPyImp.cpp | 2 +- src/Gui/DocumentPyImp.cpp | 2 +- src/Gui/SplitView3DInventor.cpp | 4 ++-- src/Gui/ViewProviderLinkPyImp.cpp | 2 +- src/Mod/Fem/App/FemMeshPyImp.cpp | 2 +- src/Mod/Mesh/App/MeshPyImp.cpp | 4 ++-- src/Mod/Part/App/AppPartPy.cpp | 2 +- src/Mod/Part/App/BSplineCurvePyImp.cpp | 2 +- src/Mod/Part/App/BSplineSurfacePyImp.cpp | 2 +- src/Mod/Part/App/BezierCurvePyImp.cpp | 2 +- src/Mod/Part/App/BezierSurfacePyImp.cpp | 2 +- src/Mod/Part/App/GeometryCurvePyImp.cpp | 2 +- src/Mod/Part/App/TopoShapePyImp.cpp | 4 ++-- src/Mod/Path/App/CommandPyImp.cpp | 2 +- src/Mod/Path/App/PathPyImp.cpp | 2 +- src/Mod/Points/App/PointsPyImp.cpp | 2 +- src/Mod/Robot/App/Robot6AxisPyImp.cpp | 2 +- src/Mod/Robot/App/TrajectoryPyImp.cpp | 2 +- src/Mod/Sketcher/App/SketchPyImp.cpp | 2 +- 24 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/App/ComplexGeoDataPyImp.cpp b/src/App/ComplexGeoDataPyImp.cpp index cecffe3191..6253f00cc7 100644 --- a/src/App/ComplexGeoDataPyImp.cpp +++ b/src/App/ComplexGeoDataPyImp.cpp @@ -67,7 +67,7 @@ PyObject* ComplexGeoDataPy::getFacesFromSubelement(PyObject *args) Py::List vertex; for (std::vector::const_iterator it = points.begin(); it != points.end(); ++it) - vertex.append(Py::Object(new Base::VectorPy(*it))); + vertex.append(Py::asObject(new Base::VectorPy(*it))); tuple.setItem(0, vertex); Py::List facet; for (std::vector::const_iterator diff --git a/src/App/DocumentObjectPyImp.cpp b/src/App/DocumentObjectPyImp.cpp index 5da0b636d7..3c9ee66645 100644 --- a/src/App/DocumentObjectPyImp.cpp +++ b/src/App/DocumentObjectPyImp.cpp @@ -508,7 +508,7 @@ PyObject* DocumentObjectPy::getSubObject(PyObject *args, PyObject *keywds) } Py::Tuple rret(retType==1?2:3); rret.setItem(0,ret[0].obj); - rret.setItem(1,Py::Object(new Base::MatrixPy(ret[0].mat))); + rret.setItem(1,Py::asObject(new Base::MatrixPy(ret[0].mat))); if(retType!=1) rret.setItem(2,ret[0].pyObj); return Py::new_reference_to(rret); @@ -534,7 +534,7 @@ PyObject* DocumentObjectPy::getSubObject(PyObject *args, PyObject *keywds) } else { Py::Tuple rret(retType==1?2:3); rret.setItem(0,ret[i].obj); - rret.setItem(1,Py::Object(new Base::MatrixPy(ret[i].mat))); + rret.setItem(1,Py::asObject(new Base::MatrixPy(ret[i].mat))); if(retType!=1) rret.setItem(2,ret[i].pyObj); tuple.setItem(i,rret); @@ -601,7 +601,7 @@ PyObject* DocumentObjectPy::getLinkedObject(PyObject *args, PyObject *keywds) if(mat) { Py::Tuple ret(2); ret.setItem(0,pyObj); - ret.setItem(1,Py::Object(new Base::MatrixPy(*mat))); + ret.setItem(1,Py::asObject(new Base::MatrixPy(*mat))); return Py::new_reference_to(ret); } return Py::new_reference_to(pyObj); diff --git a/src/App/Expression.cpp b/src/App/Expression.cpp index efe4acf815..9c162f3761 100644 --- a/src/App/Expression.cpp +++ b/src/App/Expression.cpp @@ -435,7 +435,7 @@ static Py::Object _pyObjectFromAny(const App::any &value, const Expression *e) { else if (isAnyPyObject(value)) return __pyObjectFromAny(value); if (is_type(value,typeid(Quantity))) - return Py::Object(new QuantityPy(new Quantity(cast(value)))); + return Py::asObject(new QuantityPy(new Quantity(cast(value)))); else if (is_type(value,typeid(double))) return Py::Float(cast(value)); else if (is_type(value,typeid(float))) @@ -543,7 +543,7 @@ static inline Quantity pyToQuantity(const Py::Object &pyobj, Py::Object pyFromQuantity(const Quantity &quantity) { if(!quantity.getUnit().isEmpty()) - return Py::Object(new QuantityPy(new Quantity(quantity))); + return Py::asObject(new QuantityPy(new Quantity(quantity))); double v = quantity.getValue(); long l; int i; @@ -2073,7 +2073,7 @@ Py::Object FunctionExpression::evaluate(const Expression *expr, int f, const std else { auto mat = static_cast(pymat.ptr())->value(); mat.scale(vec); - return Py::Object(new Base::MatrixPy(mat)); + return Py::asObject(new Base::MatrixPy(mat)); } } _EXPR_THROW("Function requires arguments to be either " @@ -2091,15 +2091,15 @@ Py::Object FunctionExpression::evaluate(const Expression *expr, int f, const std if (fabs(m.determinant()) <= DBL_EPSILON) _EXPR_THROW("Cannot invert singular matrix.",expr); m.inverseGauss(); - return Py::Object(new Base::MatrixPy(m)); + return Py::asObject(new Base::MatrixPy(m)); } else if (PyObject_TypeCheck(pyobj.ptr(),&Base::PlacementPy::Type)) { const auto &pla = *static_cast(pyobj.ptr())->getPlacementPtr(); - return Py::Object(new Base::PlacementPy(pla.inverse())); + return Py::asObject(new Base::PlacementPy(pla.inverse())); } else if (PyObject_TypeCheck(pyobj.ptr(),&Base::RotationPy::Type)) { const auto &rot = *static_cast(pyobj.ptr())->getRotationPtr(); - return Py::Object(new Base::RotationPy(rot.inverse())); + return Py::asObject(new Base::RotationPy(rot.inverse())); } _EXPR_THROW("Function requires the first argument to be either Matrix, Placement or Rotation.",expr); @@ -2110,13 +2110,13 @@ Py::Object FunctionExpression::evaluate(const Expression *expr, int f, const std std::string type(pytype.as_string()); Py::Object res; if(boost::iequals(type,"matrix")) - res = Py::Object(new Base::MatrixPy(Base::Matrix4D())); + res = Py::asObject(new Base::MatrixPy(Base::Matrix4D())); else if(boost::iequals(type,"vector")) - res = Py::Object(new Base::VectorPy(Base::Vector3d())); + res = Py::asObject(new Base::VectorPy(Base::Vector3d())); else if(boost::iequals(type,"placement")) - res = Py::Object(new Base::PlacementPy(Base::Placement())); + res = Py::asObject(new Base::PlacementPy(Base::Placement())); else if(boost::iequals(type,"rotation")) - res = Py::Object(new Base::RotationPy(Base::Rotation())); + res = Py::asObject(new Base::RotationPy(Base::Rotation())); else _EXPR_THROW("Unknown type '" << type << "'.",expr); if(args.size()>1) { @@ -2342,7 +2342,7 @@ Py::Object FunctionExpression::evaluate(const Expression *expr, int f, const std _EXPR_THROW("Unknown function: " << f,expr); } - return Py::Object(new QuantityPy(new Quantity(scaler * output, unit))); + return Py::asObject(new QuantityPy(new Quantity(scaler * output, unit))); } Py::Object FunctionExpression::_getPyValue() const { diff --git a/src/App/FeaturePython.cpp b/src/App/FeaturePython.cpp index f846cf576d..0241c04f1a 100644 --- a/src/App/FeaturePython.cpp +++ b/src/App/FeaturePython.cpp @@ -236,7 +236,7 @@ bool FeaturePythonImp::getSubObject(DocumentObject *&ret, const char *subname, args.setItem(2,Py::Int(pyObj?2:1)); Base::MatrixPy *pyMat = new Base::MatrixPy(new Base::Matrix4D); if(_mat) *pyMat->getMatrixPtr() = *_mat; - args.setItem(3,Py::Object(pyMat)); + args.setItem(3,Py::asObject(pyMat)); args.setItem(4,Py::Boolean(transform)); args.setItem(5,Py::Int(depth)); @@ -326,7 +326,7 @@ bool FeaturePythonImp::getLinkedObject(DocumentObject *&ret, bool recurse, args.setItem(1,Py::Boolean(recurse)); Base::MatrixPy *pyMat = new Base::MatrixPy(new Base::Matrix4D); if(_mat) *pyMat->getMatrixPtr() = *_mat; - args.setItem(2,Py::Object(pyMat)); + args.setItem(2,Py::asObject(pyMat)); args.setItem(3,Py::Boolean(transform)); args.setItem(4,Py::Int(depth)); diff --git a/src/App/PropertyLinks.cpp b/src/App/PropertyLinks.cpp index 072a6fc0ca..5979a1c87f 100644 --- a/src/App/PropertyLinks.cpp +++ b/src/App/PropertyLinks.cpp @@ -1934,7 +1934,7 @@ PyObject *PropertyLinkSubList::getPyObject(void) #endif for (unsigned int i = 0; igetPyObject()); + tup[0] = Py::asObject(_lValueList[i]->getPyObject()); std::string subItem; if (_lSubList.size() > i) subItem = _lSubList[i]; diff --git a/src/Base/QuantityPyImp.cpp b/src/Base/QuantityPyImp.cpp index 9533911ddc..afcd95d74c 100644 --- a/src/Base/QuantityPyImp.cpp +++ b/src/Base/QuantityPyImp.cpp @@ -560,7 +560,7 @@ void QuantityPy::setValue(Py::Float arg) Py::Object QuantityPy::getUnit(void) const { - return Py::Object(new UnitPy(new Unit(getQuantityPtr()->getUnit()))); + return Py::asObject(new UnitPy(new Unit(getQuantityPtr()->getUnit()))); } void QuantityPy::setUnit(Py::Object arg) diff --git a/src/Gui/DocumentPyImp.cpp b/src/Gui/DocumentPyImp.cpp index 860e6c18c0..43b83dec38 100644 --- a/src/Gui/DocumentPyImp.cpp +++ b/src/Gui/DocumentPyImp.cpp @@ -394,7 +394,7 @@ Py::Object DocumentPy::getDocument(void) const } Py::Object DocumentPy::getEditingTransform(void) const { - return Py::Object(new Base::MatrixPy(new Base::Matrix4D( + return Py::asObject(new Base::MatrixPy(new Base::Matrix4D( getDocumentPtr()->getEditingTransform()))); } diff --git a/src/Gui/SplitView3DInventor.cpp b/src/Gui/SplitView3DInventor.cpp index d5658172d9..c1dc0d8ac6 100644 --- a/src/Gui/SplitView3DInventor.cpp +++ b/src/Gui/SplitView3DInventor.cpp @@ -655,7 +655,7 @@ Py::Object AbstractSplitViewPy::getViewer(const Py::Tuple& args) Gui::View3DInventorViewer* view = _view->getViewer(viewIndex); if (!view) throw Py::IndexError("Index out of range"); - return Py::Object(view->getPyObject()); + return Py::asObject(view->getPyObject()); } catch (const Base::Exception& e) { throw Py::RuntimeError(e.what()); @@ -674,7 +674,7 @@ Py::Object AbstractSplitViewPy::sequence_item(ssize_t viewIndex) if (viewIndex >= _view->getSize() || viewIndex < 0) throw Py::IndexError("Index out of range"); PyObject* viewer = _view->getViewer(viewIndex)->getPyObject(); - return Py::Object(viewer); + return Py::asObject(viewer); } int AbstractSplitViewPy::sequence_length() diff --git a/src/Gui/ViewProviderLinkPyImp.cpp b/src/Gui/ViewProviderLinkPyImp.cpp index d3c769db24..b23f2f742a 100644 --- a/src/Gui/ViewProviderLinkPyImp.cpp +++ b/src/Gui/ViewProviderLinkPyImp.cpp @@ -45,7 +45,7 @@ std::string ViewProviderLinkPy::representation(void) const } Py::Object ViewProviderLinkPy::getDraggingPlacement() const { - return Py::Object(new Base::PlacementPy(new Base::Placement( + return Py::asObject(new Base::PlacementPy(new Base::Placement( getViewProviderLinkPtr()->currentDraggingPlacement()))); } diff --git a/src/Mod/Fem/App/FemMeshPyImp.cpp b/src/Mod/Fem/App/FemMeshPyImp.cpp index a8bccaca23..598e8179cd 100644 --- a/src/Mod/Fem/App/FemMeshPyImp.cpp +++ b/src/Mod/Fem/App/FemMeshPyImp.cpp @@ -1300,7 +1300,7 @@ Py::Tuple FemMeshPy::getGroups(void) const Py::Object FemMeshPy::getVolume(void) const { - return Py::Object(new Base::QuantityPy(new Base::Quantity(getFemMeshPtr()->getVolume()))); + return Py::asObject(new Base::QuantityPy(new Base::Quantity(getFemMeshPtr()->getVolume()))); } diff --git a/src/Mod/Mesh/App/MeshPyImp.cpp b/src/Mod/Mesh/App/MeshPyImp.cpp index af922a4943..fc1cabbc7d 100644 --- a/src/Mod/Mesh/App/MeshPyImp.cpp +++ b/src/Mod/Mesh/App/MeshPyImp.cpp @@ -425,7 +425,7 @@ PyObject* MeshPy::crossSections(PyObject *args) for (MeshObject::TPolylines::const_iterator jt = it->begin(); jt != it->end(); ++jt) { Py::List polyline; for (std::vector::const_iterator kt = jt->begin(); kt != jt->end(); ++kt) { - polyline.append(Py::Object(new Base::VectorPy(*kt))); + polyline.append(Py::asObject(new Base::VectorPy(*kt))); } section.append(polyline); } @@ -1989,7 +1989,7 @@ Py::Tuple MeshPy::getTopology(void) const Py::List vertex; for (std::vector::const_iterator it = Points.begin(); it != Points.end(); ++it) - vertex.append(Py::Object(new Base::VectorPy(*it))); + vertex.append(Py::asObject(new Base::VectorPy(*it))); tuple.setItem(0, vertex); Py::List facet; for (std::vector::const_iterator diff --git a/src/Mod/Part/App/AppPartPy.cpp b/src/Mod/Part/App/AppPartPy.cpp index b2a62f4747..b56fec4762 100644 --- a/src/Mod/Part/App/AppPartPy.cpp +++ b/src/Mod/Part/App/AppPartPy.cpp @@ -2095,7 +2095,7 @@ private: if(retType==0) return sret; - return Py::TupleN(sret,Py::Object(new Base::MatrixPy(new Base::Matrix4D(mat))), + return Py::TupleN(sret,Py::asObject(new Base::MatrixPy(new Base::Matrix4D(mat))), subObj?Py::Object(subObj->getPyObject(),true):Py::Object()); } diff --git a/src/Mod/Part/App/BSplineCurvePyImp.cpp b/src/Mod/Part/App/BSplineCurvePyImp.cpp index 8f724b9ad1..f961b05381 100644 --- a/src/Mod/Part/App/BSplineCurvePyImp.cpp +++ b/src/Mod/Part/App/BSplineCurvePyImp.cpp @@ -466,7 +466,7 @@ PyObject* BSplineCurvePy::getPoles(PyObject * args) gp_Pnt pnt = p(i); Base::VectorPy* vec = new Base::VectorPy(Base::Vector3d( pnt.X(), pnt.Y(), pnt.Z())); - poles.append(Py::Object(vec)); + poles.append(Py::asObject(vec)); } return Py::new_reference_to(poles); } diff --git a/src/Mod/Part/App/BSplineSurfacePyImp.cpp b/src/Mod/Part/App/BSplineSurfacePyImp.cpp index 5fc5750da7..44a96456c1 100644 --- a/src/Mod/Part/App/BSplineSurfacePyImp.cpp +++ b/src/Mod/Part/App/BSplineSurfacePyImp.cpp @@ -721,7 +721,7 @@ PyObject* BSplineSurfacePy::getPoles(PyObject *args) Py::List row; for (Standard_Integer j=p.LowerCol(); j<=p.UpperCol(); j++) { const gp_Pnt& pole = p(i,j); - row.append(Py::Object(new Base::VectorPy( + row.append(Py::asObject(new Base::VectorPy( Base::Vector3d(pole.X(),pole.Y(),pole.Z())))); } poles.append(row); diff --git a/src/Mod/Part/App/BezierCurvePyImp.cpp b/src/Mod/Part/App/BezierCurvePyImp.cpp index fe0b132bff..32275a5b89 100644 --- a/src/Mod/Part/App/BezierCurvePyImp.cpp +++ b/src/Mod/Part/App/BezierCurvePyImp.cpp @@ -233,7 +233,7 @@ PyObject* BezierCurvePy::getPoles(PyObject * args) gp_Pnt pnt = p(i); Base::VectorPy* vec = new Base::VectorPy(Base::Vector3d( pnt.X(), pnt.Y(), pnt.Z())); - poles.append(Py::Object(vec)); + poles.append(Py::asObject(vec)); } return Py::new_reference_to(poles); } diff --git a/src/Mod/Part/App/BezierSurfacePyImp.cpp b/src/Mod/Part/App/BezierSurfacePyImp.cpp index b3891bd3b4..57f38986e6 100644 --- a/src/Mod/Part/App/BezierSurfacePyImp.cpp +++ b/src/Mod/Part/App/BezierSurfacePyImp.cpp @@ -510,7 +510,7 @@ PyObject* BezierSurfacePy::getPoles(PyObject *args) Py::List row; for (Standard_Integer j=p.LowerCol(); j<=p.UpperCol(); j++) { const gp_Pnt& pole = p(i,j); - row.append(Py::Object(new Base::VectorPy( + row.append(Py::asObject(new Base::VectorPy( Base::Vector3d(pole.X(),pole.Y(),pole.Z())))); } poles.append(row); diff --git a/src/Mod/Part/App/GeometryCurvePyImp.cpp b/src/Mod/Part/App/GeometryCurvePyImp.cpp index 330c8b7fe8..3541932f12 100644 --- a/src/Mod/Part/App/GeometryCurvePyImp.cpp +++ b/src/Mod/Part/App/GeometryCurvePyImp.cpp @@ -769,7 +769,7 @@ PyObject* GeometryCurvePy::intersectCS(PyObject *args) Py::List points; for (int i = 1; i <= intersector.NbPoints(); i++) { gp_Pnt p = intersector.Point(i); - points.append(Py::Object(new PointPy(new GeomPoint(Base::Vector3d(p.X(), p.Y(), p.Z()))))); + points.append(Py::asObject(new PointPy(new GeomPoint(Base::Vector3d(p.X(), p.Y(), p.Z()))))); } Py::List segments; for (int i = 1; i <= intersector.NbSegments(); i++) { diff --git a/src/Mod/Part/App/TopoShapePyImp.cpp b/src/Mod/Part/App/TopoShapePyImp.cpp index d3900a8f86..74ca69c155 100644 --- a/src/Mod/Part/App/TopoShapePyImp.cpp +++ b/src/Mod/Part/App/TopoShapePyImp.cpp @@ -1920,7 +1920,7 @@ PyObject* TopoShapePy::tessellate(PyObject *args) Py::List vertex; for (std::vector::const_iterator it = Points.begin(); it != Points.end(); ++it) - vertex.append(Py::Object(new Base::VectorPy(*it))); + vertex.append(Py::asObject(new Base::VectorPy(*it))); tuple.setItem(0, vertex); Py::List facet; for (std::vector::const_iterator @@ -2841,7 +2841,7 @@ Py::Object TopoShapePy::getLocation(void) const mat[2][1] = trf.Value(3,2); mat[2][2] = trf.Value(3,3); mat[2][3] = trf.Value(3,4); - return Py::Object(new Base::MatrixPy(mat)); + return Py::asObject(new Base::MatrixPy(mat)); } void TopoShapePy::setLocation(Py::Object o) diff --git a/src/Mod/Path/App/CommandPyImp.cpp b/src/Mod/Path/App/CommandPyImp.cpp index b2dc7575c1..67418f880c 100644 --- a/src/Mod/Path/App/CommandPyImp.cpp +++ b/src/Mod/Path/App/CommandPyImp.cpp @@ -244,7 +244,7 @@ PyObject* CommandPy::setFromGCode(PyObject *args) Py::Object CommandPy::getPlacement(void) const { - return Py::Object(new Base::PlacementPy(new Base::Placement(getCommandPtr()->getPlacement()))); + return Py::asObject(new Base::PlacementPy(new Base::Placement(getCommandPtr()->getPlacement()))); } void CommandPy::setPlacement(Py::Object arg) diff --git a/src/Mod/Path/App/PathPyImp.cpp b/src/Mod/Path/App/PathPyImp.cpp index 5df6b892ba..20bac63a8f 100644 --- a/src/Mod/Path/App/PathPyImp.cpp +++ b/src/Mod/Path/App/PathPyImp.cpp @@ -90,7 +90,7 @@ Py::List PathPy::getCommands(void) const { Py::List list; for(unsigned int i = 0; i < getToolpathPtr()->getSize(); i++) - list.append(Py::Object(new Path::CommandPy(new Path::Command(getToolpathPtr()->getCommand(i))))); + list.append(Py::asObject(new Path::CommandPy(new Path::Command(getToolpathPtr()->getCommand(i))))); return list; } diff --git a/src/Mod/Points/App/PointsPyImp.cpp b/src/Mod/Points/App/PointsPyImp.cpp index 65d3463fe5..bdf6609eda 100644 --- a/src/Mod/Points/App/PointsPyImp.cpp +++ b/src/Mod/Points/App/PointsPyImp.cpp @@ -237,7 +237,7 @@ Py::List PointsPy::getPoints(void) const Py::List PointList; const PointKernel* points = getPointKernelPtr(); for (PointKernel::const_point_iterator it = points->begin(); it != points->end(); ++it) { - PointList.append(Py::Object(new Base::VectorPy(*it))); + PointList.append(Py::asObject(new Base::VectorPy(*it))); } return PointList; } diff --git a/src/Mod/Robot/App/Robot6AxisPyImp.cpp b/src/Mod/Robot/App/Robot6AxisPyImp.cpp index 9a636ce6d3..029cff2966 100644 --- a/src/Mod/Robot/App/Robot6AxisPyImp.cpp +++ b/src/Mod/Robot/App/Robot6AxisPyImp.cpp @@ -140,7 +140,7 @@ void Robot6AxisPy::setAxis6(Py::Float arg) Py::Object Robot6AxisPy::getTcp(void) const { - return Py::Object(new Base::PlacementPy(new Base::Placement(getRobot6AxisPtr()->getTcp()))); + return Py::asObject(new Base::PlacementPy(new Base::Placement(getRobot6AxisPtr()->getTcp()))); } void Robot6AxisPy::setTcp(Py::Object value) diff --git a/src/Mod/Robot/App/TrajectoryPyImp.cpp b/src/Mod/Robot/App/TrajectoryPyImp.cpp index 55c57cee40..3300a26840 100644 --- a/src/Mod/Robot/App/TrajectoryPyImp.cpp +++ b/src/Mod/Robot/App/TrajectoryPyImp.cpp @@ -154,7 +154,7 @@ Py::List TrajectoryPy::getWaypoints(void) const { Py::List list; for(unsigned int i = 0; i < getTrajectoryPtr()->getSize(); i++) - list.append(Py::Object(new Robot::WaypointPy(new Robot::Waypoint(getTrajectoryPtr()->getWaypoint(i))))); + list.append(Py::asObject(new Robot::WaypointPy(new Robot::Waypoint(getTrajectoryPtr()->getWaypoint(i))))); return list; } diff --git a/src/Mod/Sketcher/App/SketchPyImp.cpp b/src/Mod/Sketcher/App/SketchPyImp.cpp index 58961fbdb7..6b2ce1239c 100644 --- a/src/Mod/Sketcher/App/SketchPyImp.cpp +++ b/src/Mod/Sketcher/App/SketchPyImp.cpp @@ -200,7 +200,7 @@ Py::Tuple SketchPy::getGeometries(void) const Py::Object SketchPy::getShape(void) const { - return Py::Object(new TopoShapePy(new TopoShape(getSketchPtr()->toShape()))); + return Py::asObject(new TopoShapePy(new TopoShape(getSketchPtr()->toShape()))); }