soc-2008-mxcurioni: reimplemented the initialization/allocation for base classes...
authorMaxime Curioni <maxime.curioni@gmail.com>
Tue, 15 Jul 2008 05:33:12 +0000 (05:33 +0000)
committerMaxime Curioni <maxime.curioni@gmail.com>
Tue, 15 Jul 2008 05:33:12 +0000 (05:33 +0000)
commitcc1a6b398da9bd2cec78c4242c5b205f079aa4a6
treea6ba9f201180b00df1375612f73fd8ccc0d0b56d
parent96e52b09da9c808a6d10526f2115178e8499ebec
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.
source/blender/freestyle/SConscript
source/blender/freestyle/intern/python/BinaryPredicate0D.cpp
source/blender/freestyle/intern/python/BinaryPredicate1D.cpp
source/blender/freestyle/intern/python/Freestyle.cpp
source/blender/freestyle/intern/python/Id.cpp
source/blender/freestyle/intern/python/Interface0D.cpp
source/blender/freestyle/intern/python/Interface0D/CurvePoint.cpp
source/blender/freestyle/intern/python/Interface0D/CurvePoint.h [new file with mode: 0644]
source/blender/freestyle/intern/python/Interface1D.cpp