[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14304] trunk/blender/source/blender/ python/api2_2x/Object.c:
Brecht Van Lommel
brechtvanlommel at pandora.be
Tue Apr 1 12:15:39 CEST 2008
Revision: 14304
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14304
Author: blendix
Date: 2008-04-01 12:15:39 +0200 (Tue, 01 Apr 2008)
Log Message:
-----------
Fix for bug #8629: python object.boundingBox was not in worldspace
anymore for meshes due to a bugfix. The python code assumed ob->bb
was in worldspace while it isn't, also meant metaball bounding boxes
were wrong.
Modified Paths:
--------------
trunk/blender/source/blender/python/api2_2x/Object.c
Modified: trunk/blender/source/blender/python/api2_2x/Object.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Object.c 2008-04-01 10:10:37 UTC (rev 14303)
+++ trunk/blender/source/blender/python/api2_2x/Object.c 2008-04-01 10:15:39 UTC (rev 14304)
@@ -1498,73 +1498,57 @@
default:
Py_RETURN_NONE;
}
+ } else { /* the ob bbox exists */
+ vec = ( float * ) self->object->bb->vec;
+ }
- { /* transform our obdata bbox by the obmat.
- the obmat is 4x4 homogeneous coords matrix.
- each bbox coord is xyz, so we make it homogenous
- by padding it with w=1.0 and doing the matrix mult.
- afterwards we divide by w to get back to xyz.
- */
- /* printmatrix4( "obmat", self->object->obmat); */
- float tmpvec[4]; /* tmp vector for homogenous coords math */
- int i;
- float *from;
+ { /* transform our obdata bbox by the obmat.
+ the obmat is 4x4 homogeneous coords matrix.
+ each bbox coord is xyz, so we make it homogenous
+ by padding it with w=1.0 and doing the matrix mult.
+ afterwards we divide by w to get back to xyz.
+ */
+ /* printmatrix4( "obmat", self->object->obmat); */
- bbox = PyList_New( 8 );
- if( !bbox )
- return EXPP_ReturnPyObjError
- ( PyExc_MemoryError,
- "couldn't create pylist" );
- for( i = 0, from = vec; i < 8; i++, from += 3 ) {
- memcpy( tmpvec, from, 3 * sizeof( float ) );
- tmpvec[3] = 1.0f; /* set w coord */
- Mat4MulVec4fl( self->object->obmat, tmpvec );
- /* divide x,y,z by w */
- tmpvec[0] /= tmpvec[3];
- tmpvec[1] /= tmpvec[3];
- tmpvec[2] /= tmpvec[3];
+ float tmpvec[4]; /* tmp vector for homogenous coords math */
+ int i;
+ float *from;
+ bbox = PyList_New( 8 );
+ if( !bbox )
+ return EXPP_ReturnPyObjError
+ ( PyExc_MemoryError,
+ "couldn't create pylist" );
+ for( i = 0, from = vec; i < 8; i++, from += 3 ) {
+ memcpy( tmpvec, from, 3 * sizeof( float ) );
+ tmpvec[3] = 1.0f; /* set w coord */
+ Mat4MulVec4fl( self->object->obmat, tmpvec );
+ /* divide x,y,z by w */
+ tmpvec[0] /= tmpvec[3];
+ tmpvec[1] /= tmpvec[3];
+ tmpvec[2] /= tmpvec[3];
+
#if 0
- { /* debug print stuff */
- int i;
+ { /* debug print stuff */
+ int i;
- printf( "\nobj bbox transformed\n" );
- for( i = 0; i < 4; ++i )
- printf( "%f ", tmpvec[i] );
+ printf( "\nobj bbox transformed\n" );
+ for( i = 0; i < 4; ++i )
+ printf( "%f ", tmpvec[i] );
- printf( "\n" );
- }
+ printf( "\n" );
+ }
#endif
- /* because our bounding box is calculated and
- does not have its own memory,
- we must create vectors that allocate space */
+ /* because our bounding box is calculated and
+ does not have its own memory,
+ we must create vectors that allocate space */
- vector = newVectorObject( NULL, 3, Py_NEW);
- memcpy( ( ( VectorObject * ) vector )->vec,
- tmpvec, 3 * sizeof( float ) );
- PyList_SET_ITEM( bbox, i, vector );
- }
- }
- } else { /* the ob bbox exists */
- vec = ( float * ) self->object->bb->vec;
-
- if( !vec )
- return EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "couldn't retrieve bounding box data" );
-
- bbox = PyList_New( 8 );
-
- if( !bbox )
- return EXPP_ReturnPyObjError( PyExc_MemoryError,
- "couldn't create pylist" );
-
- /* create vectors referencing object bounding box coords */
- for( i = 0; i < 8; i++ ) {
- vector = newVectorObject( vec, 3, Py_WRAP );
+ vector = newVectorObject( NULL, 3, Py_NEW);
+ memcpy( ( ( VectorObject * ) vector )->vec,
+ tmpvec, 3 * sizeof( float ) );
PyList_SET_ITEM( bbox, i, vector );
- vec += 3;
}
}
More information about the Bf-blender-cvs
mailing list