Fixed the handling of constructor arguments in the following Python

types: Interface0D, SVertex, ViewVertex, StrokeVertex, NonTVertex,
and TVertex.
This commit is contained in:
Tamito Kajiyama
2009-08-02 22:39:21 +00:00
parent 74027eafcb
commit e2eb4d567c
6 changed files with 39 additions and 18 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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;