PyAPI Mathutils Vector callbacks, referencing other PyObjects rather then thin wrappi...
authorCampbell Barton <ideasman42@gmail.com>
Mon, 22 Jun 2009 04:26:48 +0000 (04:26 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 22 Jun 2009 04:26:48 +0000 (04:26 +0000)
commitbce3f7e019c174947a0f98063f39533eb59ab03e
treebb66802258a156dec4a39f20c900a750fd7b6b55
parent1efffc1f564af0597512699890d7be9f41a6aee2
PyAPI Mathutils Vector callbacks, referencing other PyObjects rather then thin wrapping vectors which is crash prone.

in short, vectors can work as if they are thin wrapped but not crash blender if the original data is removed.

* RNA vector's return Mathutils vector types.
* BGE vectors for GameObject's localPosition, worldPosition, localPosition, localScale, worldScale, localInertia.
* Comment USE_MATHUTILS define to disable returning vectors.

Example...

* 2.49... *
 loc = gameOb.worldPosition
 loc[1] = 0
 gameOb.worldPosition = loc

* With vectors... *
 gameOb.worldPosition[1] = 0

* But this wont crash... *
 loc = gameOb.worldPosition
 gameOb.endObject()
 loc[1] = 0 # will raise an error that the objects removed.

This breaks games which assume return values are lists.

Will add this to eulers, matrix and quaternion types later.
13 files changed:
source/blender/python/generic/Geometry.c
source/blender/python/generic/Mathutils.c
source/blender/python/generic/Mathutils.h
source/blender/python/generic/matrix.c
source/blender/python/generic/quat.c
source/blender/python/generic/vector.c
source/blender/python/generic/vector.h
source/blender/python/intern/bpy_rna.c
source/blender/python/intern/bpy_util.c
source/gameengine/Expressions/PyObjectPlus.h
source/gameengine/Ketsji/KX_GameObject.cpp
source/gameengine/Ketsji/KX_GameObject.h
source/gameengine/Ketsji/KX_PythonInitTypes.cpp