[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15967] trunk/blender/source: Added GameLogic. Mathutils so Mathutils and its types can be accessed from blenderplayer.

Campbell Barton ideasman42 at gmail.com
Tue Aug 5 11:35:46 CEST 2008


Revision: 15967
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15967
Author:   campbellbarton
Date:     2008-08-05 11:35:46 +0200 (Tue, 05 Aug 2008)

Log Message:
-----------
Added GameLogic.Mathutils so Mathutils and its types can be accessed from blenderplayer.
also changed importText so it dosnt do a malloc

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/bad_level_call_stubs/stubs.c
    trunk/blender/source/blender/python/BPY_interface.c
    trunk/blender/source/blender/python/api2_2x/Blender.c
    trunk/blender/source/blender/python/api2_2x/Mathutils.c
    trunk/blender/source/blender/python/api2_2x/Mathutils.h
    trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
    trunk/blender/source/gameengine/Ketsji/SConscript

Modified: trunk/blender/source/blender/blenkernel/bad_level_call_stubs/stubs.c
===================================================================
--- trunk/blender/source/blender/blenkernel/bad_level_call_stubs/stubs.c	2008-08-05 06:51:03 UTC (rev 15966)
+++ trunk/blender/source/blender/blenkernel/bad_level_call_stubs/stubs.c	2008-08-05 09:35:46 UTC (rev 15967)
@@ -117,10 +117,14 @@
 {
 	return 0;
 }
+
+/*
 int EXPP_dict_set_item_str(struct PyObject *dict, char *key, struct PyObject *value)
 {
 	return 0;
 }
+*/
+
 void Node_SetStack(struct BPy_Node *self, struct bNodeStack **stack, int type){}
 void InitNode(struct BPy_Node *self, struct bNode *node){}
 void Node_SetShi(struct BPy_Node *self, struct ShadeInput *shi){}

Modified: trunk/blender/source/blender/python/BPY_interface.c
===================================================================
--- trunk/blender/source/blender/python/BPY_interface.c	2008-08-05 06:51:03 UTC (rev 15966)
+++ trunk/blender/source/blender/python/BPY_interface.c	2008-08-05 09:35:46 UTC (rev 15967)
@@ -163,7 +163,7 @@
 PyObject *CreateGlobalDictionary( void );
 void ReleaseGlobalDictionary( PyObject * dict );
 void DoAllScriptsFromList( ListBase * list, short event );
-PyObject *importText( char *name );
+static PyObject *importText( char *name );
 void init_ourImport( void );
 void init_ourReload( void );
 PyObject *blender_import( PyObject * self, PyObject * args );
@@ -1104,12 +1104,10 @@
 *****************************************************************************/
 void BPY_free_compiled_text( struct Text *text )
 {
-	if( !text->compiled )
-		return;
-	Py_DECREF( ( PyObject * ) text->compiled );
-	text->compiled = NULL;
-
-	return;
+	if( text->compiled ) {
+		Py_DECREF( ( PyObject * ) text->compiled );
+		text->compiled = NULL;
+	}
 }
 
 /*****************************************************************************
@@ -2780,48 +2778,38 @@
 	return;
 }
 
-PyObject *importText( char *name )
+static PyObject *importText( char *name )
 {
 	Text *text;
-	char *txtname;
+	char txtname[22]; /* 21+NULL */
 	char *buf = NULL;
 	int namelen = strlen( name );
-
-	txtname = malloc( namelen + 3 + 1 );
-	if( !txtname )
-		return NULL;
-
+	
+	if (namelen>21-3) return NULL; /* we know this cant be importable, the name is too long for blender! */
+	
 	memcpy( txtname, name, namelen );
 	memcpy( &txtname[namelen], ".py", 4 );
 
-	text = ( Text * ) & ( G.main->text.first );
-
-	while( text ) {
+	for(text = G.main->text.first; text; text = text->id.next) {
 		if( !strcmp( txtname, text->id.name+2 ) )
 			break;
-		text = text->id.next;
 	}
 
-	if( !text ) {
-		free( txtname );
+	if( !text )
 		return NULL;
-	}
 
 	if( !text->compiled ) {
 		buf = txt_to_buf( text );
-		text->compiled =
-			Py_CompileString( buf, text->id.name+2, Py_file_input );
+		text->compiled = Py_CompileString( buf, text->id.name+2, Py_file_input );
 		MEM_freeN( buf );
 
 		if( PyErr_Occurred(  ) ) {
 			PyErr_Print(  );
 			BPY_free_compiled_text( text );
-			free( txtname );
 			return NULL;
 		}
 	}
 
-	free( txtname );
 	return PyImport_ExecCodeModule( name, text->compiled );
 }
 

Modified: trunk/blender/source/blender/python/api2_2x/Blender.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Blender.c	2008-08-05 06:51:03 UTC (rev 15966)
+++ trunk/blender/source/blender/python/api2_2x/Blender.c	2008-08-05 09:35:46 UTC (rev 15967)
@@ -1074,7 +1074,7 @@
 	PyDict_SetItemString(dict, "Material", Material_Init());
 	PyDict_SetItemString(dict, "Mesh", Mesh_Init()); 
 	PyDict_SetItemString(dict, "Metaball", Metaball_Init());
-	PyDict_SetItemString(dict, "Mathutils", Mathutils_Init());
+	PyDict_SetItemString(dict, "Mathutils", Mathutils_Init("Blender.Mathutils"));
 	PyDict_SetItemString(dict, "Geometry", Geometry_Init());
 	PyDict_SetItemString(dict, "Modifier", Modifier_Init());
 	PyDict_SetItemString(dict, "NMesh", NMesh_Init());

Modified: trunk/blender/source/blender/python/api2_2x/Mathutils.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Mathutils.c	2008-08-05 06:51:03 UTC (rev 15966)
+++ trunk/blender/source/blender/python/api2_2x/Mathutils.c	2008-08-05 09:35:46 UTC (rev 15967)
@@ -106,8 +106,9 @@
 	{"Point", (PyCFunction) M_Mathutils_Point, METH_VARARGS, M_Mathutils_Point_doc},
 	{NULL, NULL, 0, NULL}
 };
-//----------------------------MODULE INIT-------------------------
-PyObject *Mathutils_Init(void)
+/*----------------------------MODULE INIT-------------------------*/
+/* from can be Blender.Mathutils or GameLogic.Mathutils for the BGE */
+PyObject *Mathutils_Init(char *from)
 {
 	PyObject *submodule;
 
@@ -125,8 +126,7 @@
 	if( PyType_Ready( &quaternion_Type ) < 0 )
 		return NULL;
 	
-	submodule = Py_InitModule3("Blender.Mathutils",
-				    M_Mathutils_methods, M_Mathutils_doc);
+	submodule = Py_InitModule3(from, M_Mathutils_methods, M_Mathutils_doc);
 	return (submodule);
 }
 //-----------------------------METHODS----------------------------

Modified: trunk/blender/source/blender/python/api2_2x/Mathutils.h
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Mathutils.h	2008-08-05 06:51:03 UTC (rev 15966)
+++ trunk/blender/source/blender/python/api2_2x/Mathutils.h	2008-08-05 09:35:46 UTC (rev 15967)
@@ -38,7 +38,7 @@
 #include "euler.h"
 #include "point.h"
 
-PyObject *Mathutils_Init( void );
+PyObject *Mathutils_Init( char * from );
 PyObject *row_vector_multiplication(VectorObject* vec, MatrixObject * mat);
 PyObject *column_vector_multiplication(MatrixObject * mat, VectorObject* vec);
 PyObject *row_point_multiplication(PointObject* pt, MatrixObject * mat);

Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2008-08-05 06:51:03 UTC (rev 15966)
+++ trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2008-08-05 09:35:46 UTC (rev 15967)
@@ -62,6 +62,10 @@
 
 #include "KX_PyMath.h"
 
+extern "C" {
+	#include "Mathutils.h" // Blender.Mathutils module copied here so the blenderlayer can use.
+}
+
 #include "PHY_IPhysicsEnvironment.h"
 // FIXME: Enable for access to blender python modules.  This is disabled because
 // python has dependencies on a lot of other modules and is a pain to link.
@@ -733,7 +737,10 @@
 
 	ErrorObject = PyString_FromString("GameLogic.error");
 	PyDict_SetItemString(d, "error", ErrorObject);
-
+	
+	// Add Blender.Mathutils module, duplicate code :/
+	PyDict_SetItemString(d, "Mathutils", Mathutils_Init("GameLogic.Mathutils"));
+	
 	// XXXX Add constants here
 	/* To use logic bricks, we need some sort of constants. Here, we associate */
 	/* constants and sumbolic names. Add them to dictionary d.                 */

Modified: trunk/blender/source/gameengine/Ketsji/SConscript
===================================================================
--- trunk/blender/source/gameengine/Ketsji/SConscript	2008-08-05 06:51:03 UTC (rev 15966)
+++ trunk/blender/source/gameengine/Ketsji/SConscript	2008-08-05 09:35:46 UTC (rev 15967)
@@ -5,7 +5,21 @@
 
 sources = env.Glob('*.cpp')
 
-incs = '. #source/kernel/gen_system #intern/string #intern/guardedalloc'
+# Mathutils C files.
+sources.extend([\
+	'#source/blender/python/api2_2x/Mathutils.c',\
+	'#source/blender/python/api2_2x/constant.c',\
+	'#source/blender/python/api2_2x/euler.c',\
+	'#source/blender/python/api2_2x/gen_utils.c',\
+	'#source/blender/python/api2_2x/matrix.c',\
+	'#source/blender/python/api2_2x/point.c',\
+	'#source/blender/python/api2_2x/quat.c',\
+	'#source/blender/python/api2_2x/vector.c',\
+])
+
+incs = '. #source/blender/python/api2_2x' # Only for Mathutils! - no other deps
+
+incs += ' #source/kernel/gen_system #intern/string #intern/guardedalloc'
 incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer #intern/bmfont'
 incs += ' #intern/SoundSystem #intern/SoundSystem/include #intern/SoundSystem/openal'
 incs += ' #intern/SoundSystem/dummy #intern/SoundSystem/intern #source/gameengine/Converter'





More information about the Bf-blender-cvs mailing list