[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21621] branches/soc-2009-kazanbas: More FBX exporter conversion.

Arystanbek Dyussenov arystan.d at gmail.com
Thu Jul 16 10:20:15 CEST 2009


Revision: 21621
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21621
Author:   kazanbas
Date:     2009-07-16 10:20:15 +0200 (Thu, 16 Jul 2009)

Log Message:
-----------
More FBX exporter conversion.

Experimenting with cross-compiling my branch with MinGW on Linux:
- tweaked config/linuxcross.py, source/blender/makesdna/intern/SConscript and tools/Blender.py
So far linking fails.

Modified Paths:
--------------
    branches/soc-2009-kazanbas/config/linuxcross-config.py
    branches/soc-2009-kazanbas/release/io/export_fbx.py
    branches/soc-2009-kazanbas/release/io/export_obj.py
    branches/soc-2009-kazanbas/source/blender/makesdna/intern/SConscript
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_pose.c
    branches/soc-2009-kazanbas/tools/Blender.py

Modified: branches/soc-2009-kazanbas/config/linuxcross-config.py
===================================================================
--- branches/soc-2009-kazanbas/config/linuxcross-config.py	2009-07-16 07:56:17 UTC (rev 21620)
+++ branches/soc-2009-kazanbas/config/linuxcross-config.py	2009-07-16 08:20:15 UTC (rev 21621)
@@ -2,13 +2,13 @@
 LIBDIR = '${LCGDIR}'
 
 BF_PYTHON = LIBDIR + '/python'
-BF_PYTHON_VERSION = '2.5'
+BF_PYTHON_VERSION = '2.6'
 BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}'
 BF_PYTHON_BINARY = 'python'
-BF_PYTHON_LIB = 'python25'
+BF_PYTHON_LIB = 'python26'
 BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib'
 
-WITH_BF_OPENAL = True
+WITH_BF_OPENAL = False # XXX (Arystan)
 WITH_BF_STATICOPENAL = False
 BF_OPENAL = LIBDIR + '/openal'
 BF_OPENAL_INC = '${BF_OPENAL}/include'
@@ -17,6 +17,12 @@
 # Warning, this static lib configuration is untested! users of this OS please confirm.
 BF_OPENAL_LIB_STATIC = '${BF_OPENAL}/lib/libopenal.a'
 
+# copied from win32-mingw-config.py (Arystan)
+WITH_BF_FFMPEG = False
+BF_FFMPEG_LIB = 'avformat swscale avcodec avutil avdevice xvidcore x264'
+BF_FFMPEG_LIBPATH = LIBDIR + '/gcc/ffmpeg/lib'
+BF_FFMPEG_INC =  LIBDIR + '/gcc/ffmpeg/include'
+
 # Warning, this static lib configuration is untested! users of this OS please confirm.
 BF_CXX = '/usr'
 WITH_BF_STATICCXX = False
@@ -33,7 +39,7 @@
 BF_PTHREADS_LIB = 'pthreadGC2'
 BF_PTHREADS_LIBPATH = '${BF_PTHREADS}/lib'
 
-WITH_BF_OPENEXR = True
+WITH_BF_OPENEXR = False
 WITH_BF_STATICOPENEXR = False
 BF_OPENEXR = LIBDIR + '/gcc/openexr'
 BF_OPENEXR_INC = '${BF_OPENEXR}/include ${BF_OPENEXR}/include/OpenEXR'
@@ -58,6 +64,8 @@
 
 BF_TIFF = LIBDIR + '/tiff'
 BF_TIFF_INC = '${BF_TIFF}/include'
+BF_TIFF_LIB = 'libtiff'
+BF_TIFF_LIBPATH = '${BF_TIFF}/lib'
 
 WITH_BF_ZLIB = True
 BF_ZLIB = LIBDIR + '/zlib'
@@ -69,16 +77,26 @@
 
 BF_GETTEXT = LIBDIR + '/gettext'
 BF_GETTEXT_INC = '${BF_GETTEXT}/include'
-BF_GETTEXT_LIB = 'gnu_gettext'
+BF_GETTEXT_LIB = 'gettextlib'
+# BF_GETTEXT_LIB = 'gnu_gettext'
 BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
 
 WITH_BF_GAMEENGINE = False
 
+WITH_BF_ODE = True
+BF_ODE = LIBDIR + '/ode'
+BF_ODE_INC = BF_ODE + '/include'
+BF_ODE_LIB = BF_ODE + '/lib/libode.a'
+
 WITH_BF_BULLET = True
 BF_BULLET = '#extern/bullet2/src'
 BF_BULLET_INC = '${BF_BULLET}'
 BF_BULLET_LIB = 'extern_bullet'
 
+BF_SOLID = '#extern/solid'
+BF_SOLID_INC = '${BF_SOLID}'
+BF_SOLID_LIB = 'extern_solid'
+
 BF_WINTAB = LIBDIR + '/wintab'
 BF_WINTAB_INC = '${BF_WINTAB}/INCLUDE'
 
@@ -100,9 +118,12 @@
 
 # Mesa Libs should go here if your using them as well....
 WITH_BF_STATICOPENGL = False
-BF_OPENGL = 'C:\\MingW'
-BF_OPENGL_INC = '${BF_OPENGL}/include'
-BF_OPENGL_LIBINC = '${BF_OPENGL}/lib'
+BF_OPENGL = ''
+# BF_OPENGL = 'C:\\MingW'
+BF_OPENGL_INC = ''
+# BF_OPENGL_INC = '${BF_OPENGL}/include'
+BF_OPENGL_LIBINC = ''
+# BF_OPENGL_LIBINC = '${BF_OPENGL}/lib'
 BF_OPENGL_LIB = 'opengl32 glu32'
 BF_OPENGL_LIB_STATIC = [ '${BF_OPENGL}/lib/libGL.a', '${BF_OPENGL}/lib/libGLU.a',
              '${BF_OPENGL}/lib/libXmu.a', '${BF_OPENGL}/lib/libXext.a',
@@ -111,9 +132,13 @@
 CC = 'i586-mingw32msvc-gcc'
 CXX = 'i586-mingw32msvc-g++'
 
+# Custom built MinGW (Arystan)
+# CC = 'i586-pc-mingw32-gcc'
+# CXX = 'i586-pc-mingw32-g++'
+
 CCFLAGS = [ '-pipe', '-funsigned-char', '-fno-strict-aliasing' ]
 
-CPPFLAGS = [ '-DXP_UNIX', '-DWIN32', '-DFREE_WINDOWS' ]
+CPPFLAGS = [ '-DXP_UNIX', '-DWIN32', '-DFREE_WINDOWS', '-DLINUX_CROSS' ]
 CXXFLAGS = ['-pipe', '-mwindows', '-funsigned-char', '-fno-strict-aliasing' ]
 REL_CFLAGS = [ '-O2' ]
 REL_CCFLAGS = [ '-O2' ]
@@ -122,7 +147,7 @@
 CC_WARN = [ '-Wall' ]
 
 
-LLIBS = [ '-ldxguid', '-lgdi32', '-lmsvcrt', '-lwinmm', '-lmingw32', '-lm', '-lws2_32', '-lz'] #'-lutil', '-lc', '-lm', '-ldl', '-lpthread' ]
+LLIBS = [ '-ldxguid', '-lgdi32', '-lmsvcrt', '-lwinmm', '-lmingw32', '-lm', '-lws2_32', '-lz', '-lstdc++'] #'-lutil', '-lc', '-lm', '-ldl', '-lpthread' ]
 
 BF_DEBUG = False
 BF_DEBUG_CCFLAGS= []
@@ -134,3 +159,5 @@
 BF_BUILDDIR = '../build/linuxcross'
 BF_INSTALLDIR='../install/linuxcross'
 BF_DOCDIR='../install/doc'
+
+# LINKFLAGS = ['-Wl,--start-group']

Modified: branches/soc-2009-kazanbas/release/io/export_fbx.py
===================================================================
--- branches/soc-2009-kazanbas/release/io/export_fbx.py	2009-07-16 07:56:17 UTC (rev 21620)
+++ branches/soc-2009-kazanbas/release/io/export_fbx.py	2009-07-16 08:20:15 UTC (rev 21621)
@@ -60,9 +60,10 @@
 # except:
 # 	os = None
 
-import Blender
+# import Blender
 import bpy
-from Blender.Mathutils import Matrix, Vector, RotationMatrix
+import Mathutils
+# from Blender.Mathutils import Matrix, Vector, RotationMatrix
 
 import BPyObject
 import BPyMesh
@@ -258,9 +259,48 @@
 def mat4x4str(mat):
 	return '%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f' % tuple([ f for v in mat for f in v ])
 
+# XXX not used
+# duplicated in OBJ exporter
+def getVertsFromGroup(me, group_index):
+	ret = []
+
+	for i, v in enumerate(me.verts):
+		for g in v.groups:
+			if g.group == group_index:
+				ret.append((i, g.weight))
+
+		return ret
+
+# ob must be OB_MESH
+def BPyMesh_meshWeight2List(ob):
+	''' Takes a mesh and return its group names and a list of lists, one list per vertex.
+	aligning the each vert list with the group names, each list contains float value for the weight.
+	These 2 lists can be modified and then used with list2MeshWeight to apply the changes.
+	'''
+
+	me = ob.data
+
+	# Clear the vert group.
+	groupNames= [g.name for g in ob.vertex_groups]
+	len_groupNames= len(groupNames)
+	
+	if not len_groupNames:
+		# no verts? return a vert aligned empty list
+		return [[] for i in xrange(len(me.verts))], []
+	else:
+		vWeightList= [[0.0]*len_groupNames for i in xrange(len(me.verts))]
+
+	for i, v in enumerate(me.verts):
+		for g in v.groups:
+			vWeightList[i][g.group] = g.weight
+
+	return groupNames, vWeightList
+
+
 def meshNormalizedWeights(me):
 	try: # account for old bad BPyMesh
-		groupNames, vWeightList = BPyMesh.meshWeight2List(me)
+		groupNames, vWeightList = BPyMesh_meshWeight2List(me)
+# 		groupNames, vWeightList = BPyMesh.meshWeight2List(me)
 	except:
 		return [],[]
 	
@@ -564,7 +604,7 @@
 				matrix_rot = mtx_x90 * matrix_rot
 			elif type =='CAMERA':
 # 			elif ob and type =='Camera':
-				y = Vector(0,1,0) * matrix_rot
+				y = Mathutils.Vector(0,1,0) * matrix_rot
 				matrix_rot = matrix_rot * Mathutils.RotationMatrix(math.pi/2, 3, 'r', y)
 			
 			return matrix_rot
@@ -666,7 +706,7 @@
 					matrix_rot = mtx_x90 * matrix_rot
 					rot = tuple(matrix_rot.toEuler())
 				elif ob and ob.type =='Camera':
-					y = Vector(0,1,0) * matrix_rot
+					y = Mathutils.Vector(0,1,0) * matrix_rot
 					matrix_rot = matrix_rot * Mathutils.RotationMatrix(math.pi/2, 3, 'r', y)
 					rot = tuple(matrix_rot.toEuler())
 				else:
@@ -1052,8 +1092,8 @@
 		file.write('\n\t\tTypeFlags: "Camera"')
 		file.write('\n\t\tGeometryVersion: 124')
 		file.write('\n\t\tPosition: %.6f,%.6f,%.6f' % loc)
-		file.write('\n\t\tUp: %.6f,%.6f,%.6f' % tuple(Vector(0,1,0) * matrix_rot) )
-		file.write('\n\t\tLookAt: %.6f,%.6f,%.6f' % tuple(Vector(0,0,-1)*matrix_rot) )
+		file.write('\n\t\tUp: %.6f,%.6f,%.6f' % tuple(Mathutils.Vector(0,1,0) * matrix_rot) )
+		file.write('\n\t\tLookAt: %.6f,%.6f,%.6f' % tuple(Mathutils.Vector(0,0,-1)*matrix_rot) )
 		
 		#file.write('\n\t\tUp: 0,0,0' )
 		#file.write('\n\t\tLookAt: 0,0,0' )
@@ -1458,7 +1498,8 @@
 		if my_mesh.blenTextures:	do_textures = True
 		else:						do_textures = False	
 		
-		do_uvs = me.faceUV
+		do_uvs = len(me.uv_layers) > 0
+# 		do_uvs = me.faceUV
 		
 		
 		file.write('\n\tModel: "Model::%s", "Mesh" {' % my_mesh.fbxName)
@@ -1490,20 +1531,24 @@
 		file.write('\n\t\tPolygonVertexIndex: ')
 		i=-1
 		for f in me.faces:
-			fi = [v.index for v in f]
+			fi = [v_index for j, v_index in enumerate(f.verts) if v_index != 0 or j != 3]
+# 			fi = [v.index for v in f]
+
 			# flip the last index, odd but it looks like
 			# this is how fbx tells one face from another
 			fi[-1] = -(fi[-1]+1)
 			fi = tuple(fi)
 			if i==-1:
-				if len(f) == 3:		file.write('%i,%i,%i' % fi )
+				if len(fi) == 3:	file.write('%i,%i,%i' % fi )
+# 				if len(f) == 3:		file.write('%i,%i,%i' % fi )
 				else:				file.write('%i,%i,%i,%i' % fi )
 				i=0
 			else:
 				if i==13:
 					file.write('\n\t\t')
 					i=0
-				if len(f) == 3:		file.write(',%i,%i,%i' % fi )
+				if len(fi) == 3:	file.write(',%i,%i,%i' % fi )
+# 				if len(f) == 3:		file.write(',%i,%i,%i' % fi )
 				else:				file.write(',%i,%i,%i,%i' % fi )
 			i+=1
 		
@@ -1511,13 +1556,15 @@
 		i=-1
 		for ed in me.edges:
 				if i==-1:
-					file.write('%i,%i' % (ed.v1.index, ed.v2.index))
+					file.write('%i,%i' % (ed.verts[0], ed.verts[1]))
+# 					file.write('%i,%i' % (ed.v1.index, ed.v2.index))
 					i=0
 				else:
 					if i==13:
 						file.write('\n\t\t')
 						i=0
-					file.write(',%i,%i' % (ed.v1.index, ed.v2.index))
+					file.write(',%i,%i' % (ed.verts[0], ed.verts[1]))
+# 					file.write(',%i,%i' % (ed.v1.index, ed.v2.index))
 				i+=1
 		
 		file.write('\n\t\tGeometryVersion: 124')
@@ -1533,11 +1580,13 @@
 		i=-1
 		for v in me.verts:
 			if i==-1:
-				file.write('%.15f,%.15f,%.15f' % tuple(v.no));	i=0
+				file.write('%.15f,%.15f,%.15f' % tuple(v.normal));	i=0
+# 				file.write('%.15f,%.15f,%.15f' % tuple(v.no));	i=0
 			else:
 				if i==2:
 					file.write('\n			 ');	i=0
-				file.write(',%.15f,%.15f,%.15f' % tuple(v.no))
+				file.write(',%.15f,%.15f,%.15f' % tuple(v.normal))
+# 				file.write(',%.15f,%.15f,%.15f' % tuple(v.no))
 			i+=1
 		file.write('\n\t\t}')
 		
@@ -1571,32 +1620,49 @@
 			ReferenceInformationType: "Direct"
 			Smoothing: ''')
 		
-		SHARP = Blender.Mesh.EdgeFlags.SHARP
+# 		SHARP = Blender.Mesh.EdgeFlags.SHARP
 		i=-1
 		for ed in me.edges:
 			if i==-1:
-				file.write('%i' % ((ed.flag&SHARP)!=0));	i=0
+				file.write('%i' % (ed.sharp));	i=0
+# 				file.write('%i' % ((ed.flag&SHARP)!=0));	i=0
 			else:
 				if i==54:
 					file.write('\n			 ');	i=0
-				file.write(',%i' % ((ed.flag&SHARP)!=0))
+				file.write(',%i' % (ed.sharp))
+# 				file.write(',%i' % ((ed.flag&SHARP)!=0))
 			i+=1
 		
 		file.write('\n\t\t}')
-		del SHARP
+# 		del SHARP
+
+		# small utility function
+		# returns a slice of data depending on number of face verts
+		# data is either a MeshTextureFace or MeshColor
+		def face_data(data, face):
+			if f.verts[3] == 0:
+				totvert = 3
+			else:
+				totvert = 4
+						
+			return data[:totvert]
+
 		
-		

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list