diff options
author | Maxime Curioni <maxime.curioni@gmail.com> | 2008-07-15 09:33:12 +0400 |
---|---|---|
committer | Maxime Curioni <maxime.curioni@gmail.com> | 2008-07-15 09:33:12 +0400 |
commit | cc1a6b398da9bd2cec78c4242c5b205f079aa4a6 (patch) | |
tree | a6ba9f201180b00df1375612f73fd8ccc0d0b56d /source/blender/freestyle/intern/python/Interface0D.cpp | |
parent | 96e52b09da9c808a6d10526f2115178e8499ebec (diff) |
soc-2008-mxcurioni: reimplemented the initialization/allocation for base classes. The Python object type tp_new slot is now set to PyType_GenericNew, instead of the former custom functions. As a note, by default, Python does not set this slot: it is therefore mandatory for the base classes. For children classes, only __init__ is needed.
To make our base classes subclasses, the Py_TPFLAGS_BASETYPE flag was added to the object type tp_flags slot.
Finally, I began to implement CurvePoint, descendant of Interface0D. This commit allowed me to verify that my SWIG replacement method works: interfaces are well taken into account by children. For a test, use the following code:
================================
import Blender
from Blender import Freestyle
from Blender.Freestyle import *
print Interface0D()
print CurvePoint()
================================
The __repr__ method is only implemented in Interface0D:
PyObject * Interface0D___repr__(BPy_Interface0D* self)
{
return PyString_FromFormat("type: %s - address: %p", self->if0D->getExactTypeName().c_str(), self->if0D );}
and the result is of the form:
type: Interface0D - address: 0x18e5ccc0
type: CurvePoint - address: 0x18e473f0
As you can see, the correct getExactTypeName of the class is called.
Diffstat (limited to 'source/blender/freestyle/intern/python/Interface0D.cpp')
-rw-r--r-- | source/blender/freestyle/intern/python/Interface0D.cpp | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/source/blender/freestyle/intern/python/Interface0D.cpp b/source/blender/freestyle/intern/python/Interface0D.cpp index 47b9b28839f..216dbaec1e9 100644 --- a/source/blender/freestyle/intern/python/Interface0D.cpp +++ b/source/blender/freestyle/intern/python/Interface0D.cpp @@ -1,6 +1,7 @@ #include "Interface0D.h" #include "Convert.h" +#include "Interface0D/CurvePoint.h" #ifdef __cplusplus extern "C" { @@ -9,7 +10,7 @@ extern "C" { /////////////////////////////////////////////////////////////////////////////////////////// /*--------------- Python API function prototypes for Interface0D instance -----------*/ -static PyObject * Interface0D___new__(PyTypeObject *type, PyObject *args, PyObject *kwds); +static int Interface0D___init__(BPy_Interface0D *self, PyObject *args, PyObject *kwds); static void Interface0D___dealloc__(BPy_Interface0D *self); static PyObject * Interface0D___repr__(BPy_Interface0D *self); @@ -78,7 +79,7 @@ PyTypeObject Interface0D_Type = { NULL, /* PyBufferProcs *tp_as_buffer; */ /*** Flags to define presence of optional/expanded features ***/ - Py_TPFLAGS_DEFAULT, /* long tp_flags; */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */ NULL, /* char *tp_doc; Documentation string */ /*** Assigned meaning in release 2.0 ***/ @@ -109,9 +110,9 @@ PyTypeObject Interface0D_Type = { NULL, /* descrgetfunc tp_descr_get; */ NULL, /* descrsetfunc tp_descr_set; */ 0, /* long tp_dictoffset; */ - NULL, /* initproc tp_init; */ + (initproc)Interface0D___init__, /* initproc tp_init; */ NULL, /* allocfunc tp_alloc; */ - (newfunc)Interface0D___new__, /* newfunc tp_new; */ + PyType_GenericNew, /* newfunc tp_new; */ /* Low-level free-memory routine */ NULL, /* freefunc tp_free; */ @@ -136,23 +137,22 @@ PyMODINIT_FUNC Interface0D_Init( PyObject *module ) if( PyType_Ready( &Interface0D_Type ) < 0 ) return; + + if( PyType_Ready( &CurvePoint_Type ) < 0 ) + return; Py_INCREF( &Interface0D_Type ); PyModule_AddObject(module, "Interface0D", (PyObject *)&Interface0D_Type); + Py_INCREF( &CurvePoint_Type ); + PyModule_AddObject(module, "CurvePoint", (PyObject *)&CurvePoint_Type); } //------------------------INSTANCE METHODS ---------------------------------- -PyObject * Interface0D___new__(PyTypeObject *type, PyObject *args, PyObject *kwds) +int Interface0D___init__(BPy_Interface0D *self, PyObject *args, PyObject *kwds) { - BPy_Interface0D *self; - - self = (BPy_Interface0D *)type->tp_alloc(type, 0); - if (self != NULL) { - self->if0D = new Interface0D(); - } - - return (PyObject *)self; + self->if0D = new Interface0D(); + return 0; } void Interface0D___dealloc__(BPy_Interface0D* self) |