[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