From 8b97a31372ef3f3377d8616c7d080b702c166dba Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Thu, 18 Oct 2018 19:15:18 +0200 Subject: [PATCH] Part: Geometry refactoring ========================== python c+ wrapper to use twin class c++ function instead of duplicating the code --- src/Mod/Part/App/GeometryCurvePyImp.cpp | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/Mod/Part/App/GeometryCurvePyImp.cpp b/src/Mod/Part/App/GeometryCurvePyImp.cpp index f1dc3c0c8b..7dea00f081 100644 --- a/src/Mod/Part/App/GeometryCurvePyImp.cpp +++ b/src/Mod/Part/App/GeometryCurvePyImp.cpp @@ -478,22 +478,19 @@ PyObject* GeometryCurvePy::centerOfCurvature(PyObject *args) PyObject* GeometryCurvePy::parameter(PyObject *args) { - Handle(Geom_Geometry) g = getGeometryPtr()->handle(); - Handle(Geom_Curve) c = Handle(Geom_Curve)::DownCast(g); try { - if (!c.IsNull()) { - PyObject *p; - if (!PyArg_ParseTuple(args, "O!", &(Base::VectorPy::Type), &p)) - return 0; - Base::Vector3d v = Py::Vector(p, false).toVector(); - gp_Pnt pnt(v.x,v.y,v.z); - GeomAPI_ProjectPointOnCurve ppc(pnt, c); - double val = ppc.LowerDistanceParameter(); - return Py::new_reference_to(Py::Float(val)); - } + PyObject *p; + if (!PyArg_ParseTuple(args, "O!", &(Base::VectorPy::Type), &p)) + return 0; + Base::Vector3d v = Py::Vector(p, false).toVector(); + + double u; + + if(static_cast(getGeometryPtr())->closestParameter(v,u)) + return Py::new_reference_to(Py::Float(u)); } - catch (Standard_Failure& e) { - PyErr_SetString(PartExceptionOCCError, e.GetMessageString()); + catch (Base::RuntimeError& e) { + PyErr_SetString(PartExceptionOCCError, e.what()); return 0; }