Path.Area: clean up python binding error handling

This commit is contained in:
Zheng, Lei 2017-01-23 17:27:58 +08:00
parent 2acc29de8f
commit 736cd39851

View File

@ -124,7 +124,7 @@ int AreaPy::PyInit(PyObject* args, PyObject* kwd)
PyObject* AreaPy::setPlane(PyObject *args) { PyObject* AreaPy::setPlane(PyObject *args) {
PyObject *pcObj; PyObject *pcObj;
if (!PyArg_ParseTuple(args, "O!", &(Part::TopoShapePy::Type), &pcObj)) if (!PyArg_ParseTuple(args, "O!", &(Part::TopoShapePy::Type), &pcObj))
Py_Error(Base::BaseExceptionFreeCADError, "Wrong parameters"); return 0;
#define GET_TOPOSHAPE(_p) static_cast<Part::TopoShapePy*>(_p)->getTopoShapePtr()->getShape() #define GET_TOPOSHAPE(_p) static_cast<Part::TopoShapePy*>(_p)->getTopoShapePtr()->getShape()
getAreaPtr()->setPlane(GET_TOPOSHAPE(pcObj)); getAreaPtr()->setPlane(GET_TOPOSHAPE(pcObj));
@ -137,7 +137,7 @@ PyObject* AreaPy::getShape(PyObject *args, PyObject *keywds)
short index=-1; short index=-1;
static char *kwlist[] = {"index","rebuild", NULL}; static char *kwlist[] = {"index","rebuild", NULL};
if (!PyArg_ParseTupleAndKeywords(args, keywds,"|hO",kwlist,&pcObj)) if (!PyArg_ParseTupleAndKeywords(args, keywds,"|hO",kwlist,&pcObj))
Py_Error(Base::BaseExceptionFreeCADError, "Wrong parameters"); return 0;
try { try {
if(PyObject_IsTrue(pcObj)) if(PyObject_IsTrue(pcObj))
@ -160,26 +160,31 @@ PyObject* AreaPy::add(PyObject *args, PyObject *keywds)
if (!PyArg_ParseTupleAndKeywords(args, keywds, if (!PyArg_ParseTupleAndKeywords(args, keywds,
"O|" PARAM_PY_KWDS(AREA_PARAMS_OPCODE), "O|" PARAM_PY_KWDS(AREA_PARAMS_OPCODE),
kwlist,&pcObj,PARAM_REF(PARAM_FARG,AREA_PARAMS_OPCODE))) kwlist,&pcObj,PARAM_REF(PARAM_FARG,AREA_PARAMS_OPCODE)))
Py_Error(Base::BaseExceptionFreeCADError, "Wrong parameters"); return 0;
if (PyObject_TypeCheck(pcObj, &(Part::TopoShapePy::Type))) { if (PyObject_TypeCheck(pcObj, &(Part::TopoShapePy::Type))) {
getAreaPtr()->add(GET_TOPOSHAPE(pcObj),op); getAreaPtr()->add(GET_TOPOSHAPE(pcObj),op);
return Py_None; return Py_None;
} } else if (PyObject_TypeCheck(pcObj, &(PyList_Type)) ||
Py::Sequence shapeSeq(pcObj); PyObject_TypeCheck(pcObj, &(PyTuple_Type))) {
for (Py::Sequence::iterator it = shapeSeq.begin(); it != shapeSeq.end(); ++it) { Py::Sequence shapeSeq(pcObj);
PyObject* item = (*it).ptr(); for (Py::Sequence::iterator it = shapeSeq.begin(); it != shapeSeq.end(); ++it) {
if(!PyObject_TypeCheck(item, &(Part::TopoShapePy::Type))) { PyObject* item = (*it).ptr();
PyErr_SetString(PyExc_TypeError, "non-shape object in sequence"); if(!PyObject_TypeCheck(item, &(Part::TopoShapePy::Type))) {
return 0; PyErr_SetString(PyExc_TypeError, "non-shape object in sequence");
return 0;
}
} }
for (Py::Sequence::iterator it = shapeSeq.begin(); it != shapeSeq.end(); ++it){
PyObject* item = (*it).ptr();
getAreaPtr()->add(GET_TOPOSHAPE(item),
PARAM_PY_FIELDS(PARAM_FARG,AREA_PARAMS_OPCODE));
}
return Py_None;
} }
for (Py::Sequence::iterator it = shapeSeq.begin(); it != shapeSeq.end(); ++it){
PyObject* item = (*it).ptr(); PyErr_SetString(PyExc_TypeError, "shape must be 'TopoShape' or list of 'TopoShape'");
getAreaPtr()->add(GET_TOPOSHAPE(item), return 0;
PARAM_PY_FIELDS(PARAM_FARG,AREA_PARAMS_OPCODE));
}
return Py_None;
} }
PyObject* AreaPy::makeOffset(PyObject *args, PyObject *keywds) PyObject* AreaPy::makeOffset(PyObject *args, PyObject *keywds)
@ -196,7 +201,7 @@ PyObject* AreaPy::makeOffset(PyObject *args, PyObject *keywds)
if (!PyArg_ParseTupleAndKeywords(args, keywds, if (!PyArg_ParseTupleAndKeywords(args, keywds,
"|h" PARAM_PY_KWDS(AREA_PARAMS_OFFSET), kwlist, "|h" PARAM_PY_KWDS(AREA_PARAMS_OFFSET), kwlist,
&index,PARAM_REF(PARAM_FARG,AREA_PARAMS_OFFSET))) &index,PARAM_REF(PARAM_FARG,AREA_PARAMS_OFFSET)))
Py_Error(Base::BaseExceptionFreeCADError, "Wrong parameters"); return 0;
try { try {
//Expand the variable as function call arguments //Expand the variable as function call arguments
@ -219,7 +224,7 @@ PyObject* AreaPy::makePocket(PyObject *args, PyObject *keywds)
if (!PyArg_ParseTupleAndKeywords(args, keywds, if (!PyArg_ParseTupleAndKeywords(args, keywds,
"|h" PARAM_PY_KWDS(AREA_PARAMS_POCKET), kwlist, "|h" PARAM_PY_KWDS(AREA_PARAMS_POCKET), kwlist,
&index,PARAM_REF(PARAM_FARG,AREA_PARAMS_POCKET))) &index,PARAM_REF(PARAM_FARG,AREA_PARAMS_POCKET)))
Py_Error(Base::BaseExceptionFreeCADError, "Wrong parameters"); return 0;
try { try {
TopoDS_Shape resultShape = getAreaPtr()->makePocket(index, TopoDS_Shape resultShape = getAreaPtr()->makePocket(index,
@ -265,7 +270,7 @@ PyObject* AreaPy::setParams(PyObject *args, PyObject *keywds)
PyObject* AreaPy::getParams(PyObject *args) PyObject* AreaPy::getParams(PyObject *args)
{ {
if (!PyArg_ParseTuple(args, "")) if (!PyArg_ParseTuple(args, ""))
Py_Error(Base::BaseExceptionFreeCADError, "This method accepts no argument"); return 0;
const AreaParams &params =getAreaPtr()->getParams(); const AreaParams &params =getAreaPtr()->getParams();
@ -280,7 +285,7 @@ PyObject* AreaPy::getParamsDesc(PyObject *args, PyObject *keywds)
PyObject *pcObj = Py_True; PyObject *pcObj = Py_True;
static char *kwlist[] = {"as_string", NULL}; static char *kwlist[] = {"as_string", NULL};
if (!PyArg_ParseTupleAndKeywords(args, keywds,"|O",kwlist,&pcObj)) if (!PyArg_ParseTupleAndKeywords(args, keywds,"|O",kwlist,&pcObj))
Py_Error(Base::BaseExceptionFreeCADError, "This method accepts no argument"); return 0;
if(PyObject_IsTrue(pcObj)) if(PyObject_IsTrue(pcObj))
return PyString_FromString(PARAM_PY_DOC(NAME,AREA_PARAMS_CONF)); return PyString_FromString(PARAM_PY_DOC(NAME,AREA_PARAMS_CONF));