Fixed the handling of constructor arguments in the following Python
types: Interface0D, SVertex, ViewVertex, StrokeVertex, NonTVertex, and TVertex.
This commit is contained in:
@@ -182,6 +182,8 @@ PyMODINIT_FUNC Interface0D_Init( PyObject *module )
|
||||
|
||||
int Interface0D___init__(BPy_Interface0D *self, PyObject *args, PyObject *kwds)
|
||||
{
|
||||
if ( !PyArg_ParseTuple(args, "") )
|
||||
return -1;
|
||||
self->if0D = new Interface0D();
|
||||
self->borrowed = 0;
|
||||
return 0;
|
||||
|
||||
@@ -135,7 +135,13 @@ int SVertex___init__(BPy_SVertex *self, PyObject *args, PyObject *kwds)
|
||||
if (! PyArg_ParseTuple(args, "|OO!", &py_point, &Id_Type, &py_id) )
|
||||
return -1;
|
||||
|
||||
if( py_point && py_id ) {
|
||||
if( !py_point ) {
|
||||
self->sv = new SVertex();
|
||||
|
||||
} else if( !py_id && BPy_SVertex_Check(py_point) ) {
|
||||
self->sv = new SVertex( *(((BPy_SVertex *)py_point)->sv) );
|
||||
|
||||
} else if( py_point && py_id ) {
|
||||
Vec3r *v = Vec3r_ptr_from_PyObject(py_point);
|
||||
if( !v ) {
|
||||
PyErr_SetString(PyExc_TypeError, "argument 1 must be a 3D vector (either a list of 3 elements or Vector)");
|
||||
@@ -143,8 +149,7 @@ int SVertex___init__(BPy_SVertex *self, PyObject *args, PyObject *kwds)
|
||||
}
|
||||
self->sv = new SVertex( *v, *(py_id->id) );
|
||||
delete v;
|
||||
} else if( !py_point && !py_id ) {
|
||||
self->sv = new SVertex();
|
||||
|
||||
} else {
|
||||
PyErr_SetString(PyExc_TypeError, "invalid argument(s)");
|
||||
return -1;
|
||||
|
||||
@@ -11,7 +11,7 @@ extern "C" {
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/*--------------- Python API function prototypes for ViewVertex instance -----------*/
|
||||
static int ViewVertex___init__(BPy_ViewVertex *self);
|
||||
static int ViewVertex___init__( BPy_ViewVertex *self, PyObject *args, PyObject *kwds );
|
||||
static PyObject * ViewVertex_setNature( BPy_ViewVertex *self, PyObject *args );
|
||||
static PyObject * ViewVertex_edgesBegin( BPy_ViewVertex *self );
|
||||
static PyObject * ViewVertex_edgesEnd( BPy_ViewVertex *self );
|
||||
@@ -116,10 +116,12 @@ PyTypeObject ViewVertex_Type = {
|
||||
|
||||
//------------------------INSTANCE METHODS ----------------------------------
|
||||
|
||||
int ViewVertex___init__(BPy_ViewVertex *self )
|
||||
int ViewVertex___init__( BPy_ViewVertex *self, PyObject *args, PyObject *kwds )
|
||||
{
|
||||
if( !PyArg_ParseTuple(args, "") )
|
||||
return -1;
|
||||
self->vv = 0; // ViewVertex is abstract
|
||||
self->py_if0D.if0D = new Interface0D();
|
||||
self->py_if0D.if0D = self->vv;
|
||||
self->py_if0D.borrowed = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -141,24 +141,34 @@ int StrokeVertex___init__(BPy_StrokeVertex *self, PyObject *args, PyObject *kwds
|
||||
|
||||
PyObject *obj1 = 0, *obj2 = 0 , *obj3 = 0;
|
||||
|
||||
if (! PyArg_ParseTuple(args, "|OOO", &obj1, &obj2, &obj3) )
|
||||
if (! PyArg_ParseTuple(args, "|OOO!", &obj1, &obj2, &PyFloat_Type, &obj3) )
|
||||
return -1;
|
||||
|
||||
if( !obj1 && !obj2 && !obj3 ){
|
||||
if( !obj1 ){
|
||||
self->sv = new StrokeVertex();
|
||||
|
||||
} else if( BPy_CurvePoint_Check(obj1) && ((BPy_CurvePoint *) obj1)->cp ) {
|
||||
} else if( !obj2 && BPy_StrokeVertex_Check(obj1) && ((BPy_StrokeVertex *) obj1)->sv ) {
|
||||
self->sv = new StrokeVertex( *(((BPy_StrokeVertex *) obj1)->sv) );
|
||||
|
||||
} else if( !obj2 && BPy_CurvePoint_Check(obj1) && ((BPy_CurvePoint *) obj1)->cp ) {
|
||||
self->sv = new StrokeVertex( ((BPy_CurvePoint *) obj1)->cp );
|
||||
|
||||
} else if( BPy_SVertex_Check(obj1) && ((BPy_SVertex *) obj1)->sv ) {
|
||||
} else if( !obj2 && BPy_SVertex_Check(obj1) && ((BPy_SVertex *) obj1)->sv ) {
|
||||
self->sv = new StrokeVertex( ((BPy_SVertex *) obj1)->sv );
|
||||
|
||||
} else if( BPy_StrokeVertex_Check(obj1) && BPy_StrokeVertex_Check(obj2)
|
||||
&& ((BPy_StrokeVertex *) obj1)->sv && ((BPy_StrokeVertex *) obj2)->sv) {
|
||||
|
||||
self->sv = new StrokeVertex( ((BPy_StrokeVertex *) obj1)->sv,
|
||||
((BPy_StrokeVertex *) obj2)->sv,
|
||||
PyFloat_AsDouble( obj3 ) );
|
||||
} else if( obj3 && BPy_StrokeVertex_Check(obj1) && BPy_StrokeVertex_Check(obj2) ) {
|
||||
StrokeVertex *sv1 = ((BPy_StrokeVertex *) obj1)->sv;
|
||||
StrokeVertex *sv2 = ((BPy_StrokeVertex *) obj2)->sv;
|
||||
if( !sv1 || ( sv1->A() == 0 && sv1->B() == 0 ) ) {
|
||||
PyErr_SetString(PyExc_TypeError, "argument 1 is an invalid StrokeVertex object");
|
||||
return -1;
|
||||
}
|
||||
if( !sv2 || ( sv2->A() == 0 && sv2->B() == 0 ) ) {
|
||||
PyErr_SetString(PyExc_TypeError, "argument 2 is an invalid StrokeVertex object");
|
||||
return -1;
|
||||
}
|
||||
self->sv = new StrokeVertex( sv1, sv2, PyFloat_AsDouble( obj3 ) );
|
||||
|
||||
} else {
|
||||
PyErr_SetString(PyExc_TypeError, "invalid argument(s)");
|
||||
return -1;
|
||||
|
||||
@@ -117,13 +117,13 @@ int NonTVertex___init__(BPy_NonTVertex *self, PyObject *args, PyObject *kwds)
|
||||
|
||||
PyObject *obj = 0;
|
||||
|
||||
if (! PyArg_ParseTuple(args, "|O", &obj) )
|
||||
if (! PyArg_ParseTuple(args, "|O!", &SVertex_Type, &obj) )
|
||||
return -1;
|
||||
|
||||
if( !obj ){
|
||||
self->ntv = new NonTVertex();
|
||||
|
||||
} else if( BPy_SVertex_Check(obj) && ((BPy_SVertex *) obj)->sv ) {
|
||||
} else if( ((BPy_SVertex *) obj)->sv ) {
|
||||
self->ntv = new NonTVertex( ((BPy_SVertex *) obj)->sv );
|
||||
|
||||
} else {
|
||||
|
||||
@@ -127,6 +127,8 @@ PyTypeObject TVertex_Type = {
|
||||
|
||||
int TVertex___init__(BPy_TVertex *self, PyObject *args, PyObject *kwds)
|
||||
{
|
||||
if( !PyArg_ParseTuple(args, "") )
|
||||
return -1;
|
||||
self->tv = new TVertex();
|
||||
self->py_vv.vv = self->tv;
|
||||
self->py_vv.py_if0D.if0D = self->tv;
|
||||
|
||||
Reference in New Issue
Block a user