Skip to content

Commit

Permalink
improve exception handling in BSplineCurvePy class
Browse files Browse the repository at this point in the history
  • Loading branch information
wwmayer committed Feb 18, 2017
1 parent 72375db commit 787b930
Showing 1 changed file with 72 additions and 37 deletions.
109 changes: 72 additions & 37 deletions src/Mod/Part/App/BSplineCurvePyImp.cpp
Expand Up @@ -140,17 +140,24 @@ PyObject* BSplineCurvePy::increaseMultiplicity(PyObject * args)
if (!PyArg_ParseTuple(args, "ii|i", &start, &end, &mult))
return 0;

Handle_Geom_BSplineCurve curve = Handle_Geom_BSplineCurve::DownCast
(getGeometryPtr()->handle());
if (mult == -1) {
mult = end;
curve->IncreaseMultiplicity(start, mult);
try {
Handle_Geom_BSplineCurve curve = Handle_Geom_BSplineCurve::DownCast
(getGeometryPtr()->handle());
if (mult == -1) {
mult = end;
curve->IncreaseMultiplicity(start, mult);
}
else {
curve->IncreaseMultiplicity(start, end, mult);
}

Py_Return;
}
else {
curve->IncreaseMultiplicity(start, end, mult);
catch (Standard_Failure) {
Handle_Standard_Failure e = Standard_Failure::Caught();
PyErr_SetString(PartExceptionOCCError, e->GetMessageString());
return 0;
}

Py_Return;
}

PyObject* BSplineCurvePy::incrementMultiplicity(PyObject * args)
Expand Down Expand Up @@ -281,16 +288,23 @@ PyObject* BSplineCurvePy::setKnot(PyObject * args)
if (!PyArg_ParseTuple(args, "id|i", &Index, &K, &M))
return 0;

Handle_Geom_BSplineCurve curve = Handle_Geom_BSplineCurve::DownCast
(getGeometryPtr()->handle());
if (M == -1) {
curve->SetKnot(Index, K);
try {
Handle_Geom_BSplineCurve curve = Handle_Geom_BSplineCurve::DownCast
(getGeometryPtr()->handle());
if (M == -1) {
curve->SetKnot(Index, K);
}
else {
curve->SetKnot(Index, K, M);
}

Py_Return;
}
else {
curve->SetKnot(Index, K, M);
catch (Standard_Failure) {
Handle_Standard_Failure e = Standard_Failure::Caught();
PyErr_SetString(PartExceptionOCCError, e->GetMessageString());
return 0;
}

Py_Return;
}

PyObject* BSplineCurvePy::getKnot(PyObject * args)
Expand All @@ -299,11 +313,18 @@ PyObject* BSplineCurvePy::getKnot(PyObject * args)
if (!PyArg_ParseTuple(args, "i", &Index))
return 0;

Handle_Geom_BSplineCurve curve = Handle_Geom_BSplineCurve::DownCast
(getGeometryPtr()->handle());
double M = curve->Knot(Index);
try {
Handle_Geom_BSplineCurve curve = Handle_Geom_BSplineCurve::DownCast
(getGeometryPtr()->handle());
double M = curve->Knot(Index);

return Py_BuildValue("d",M);
return Py_BuildValue("d",M);
}
catch (Standard_Failure) {
Handle_Standard_Failure e = Standard_Failure::Caught();
PyErr_SetString(PartExceptionOCCError, e->GetMessageString());
return 0;
}
}

PyObject* BSplineCurvePy::setKnots(PyObject * args)
Expand Down Expand Up @@ -1271,18 +1292,25 @@ PyObject* BSplineCurvePy::toBezier(PyObject *args)
if (!PyArg_ParseTuple(args, ""))
return 0;

Handle_Geom_BSplineCurve spline = Handle_Geom_BSplineCurve::DownCast
(this->getGeomBSplineCurvePtr()->handle());
GeomConvert_BSplineCurveToBezierCurve crt(spline);
try {
Handle_Geom_BSplineCurve spline = Handle_Geom_BSplineCurve::DownCast
(this->getGeomBSplineCurvePtr()->handle());
GeomConvert_BSplineCurveToBezierCurve crt(spline);

Py::List list;
Standard_Integer arcs = crt.NbArcs();
for (Standard_Integer i=1; i<=arcs; i++) {
Handle_Geom_BezierCurve bezier = crt.Arc(i);
list.append(Py::asObject(new BezierCurvePy(new GeomBezierCurve(bezier))));
}
Py::List list;
Standard_Integer arcs = crt.NbArcs();
for (Standard_Integer i=1; i<=arcs; i++) {
Handle_Geom_BezierCurve bezier = crt.Arc(i);
list.append(Py::asObject(new BezierCurvePy(new GeomBezierCurve(bezier))));
}

return Py::new_reference_to(list);
return Py::new_reference_to(list);
}
catch (Standard_Failure) {
Handle_Standard_Failure e = Standard_Failure::Caught();
PyErr_SetString(PartExceptionOCCError, e->GetMessageString());
return 0;
}
}

PyObject* BSplineCurvePy::join(PyObject *args)
Expand All @@ -1291,14 +1319,21 @@ PyObject* BSplineCurvePy::join(PyObject *args)
if (!PyArg_ParseTuple(args, "O!", &BSplineCurvePy::Type, &c))
return 0;

GeomBSplineCurve* curve1 = this->getGeomBSplineCurvePtr();
BSplineCurvePy* curve2 = static_cast<BSplineCurvePy*>(c);
Handle_Geom_BSplineCurve spline = Handle_Geom_BSplineCurve::DownCast
(curve2->getGeomBSplineCurvePtr()->handle());
try {
GeomBSplineCurve* curve1 = this->getGeomBSplineCurvePtr();
BSplineCurvePy* curve2 = static_cast<BSplineCurvePy*>(c);
Handle_Geom_BSplineCurve spline = Handle_Geom_BSplineCurve::DownCast
(curve2->getGeomBSplineCurvePtr()->handle());

bool ok = curve1->join(spline);
bool ok = curve1->join(spline);

return PyBool_FromLong(ok ? 1 : 0);
return PyBool_FromLong(ok ? 1 : 0);
}
catch (Standard_Failure) {
Handle_Standard_Failure e = Standard_Failure::Caught();
PyErr_SetString(PartExceptionOCCError, e->GetMessageString());
return 0;
}
}

PyObject* BSplineCurvePy::makeC1Continuous(PyObject *args)
Expand Down

0 comments on commit 787b930

Please sign in to comment.