|
From: <ba...@us...> - 2006-09-18 00:19:21
|
Revision: 368
http://svn.sourceforge.net/cadcdev/?rev=368&view=rev
Author: bardtx
Date: 2006-09-17 17:19:18 -0700 (Sun, 17 Sep 2006)
Log Message:
-----------
kos: Add simple Blender model export plugin
Added Paths:
-----------
kos/utils/blender/
kos/utils/blender/ccode_export.py
Added: kos/utils/blender/ccode_export.py
===================================================================
--- kos/utils/blender/ccode_export.py (rev 0)
+++ kos/utils/blender/ccode_export.py 2006-09-18 00:19:18 UTC (rev 368)
@@ -0,0 +1,103 @@
+#!BPY
+
+# Blender simple export plugin by Christian Henz
+
+"""
+Name: 'C code (.h)...'
+Blender: 232
+Group: 'Export'
+Tooltip: 'Export selected mesh to C code (*.h)'
+"""
+
+__bpydoc__ = """\
+"""
+
+import Blender
+
+def write(filename):
+
+ file = open(filename, "wb")
+
+ objects = Blender.Object.GetSelected()
+ objname = objects[0].name
+ meshname = objects[0].data.name
+ mesh = Blender.NMesh.GetRaw(meshname)
+
+ obj = Blender.Object.Get(objname)
+
+ file.write( "/* Generated file, do not edit! */\n" )
+ file.write( "/* Object: %s */\n" % objname )
+
+ file.write( "const int %s_num_vertices = %d; \n" % ( objname, len( mesh.verts ) ) )
+ file.write( "const float %s_vertices[%d][3] = { \n" % ( objname, len( mesh.verts ) ) )
+
+ for i in range( len( mesh.verts ) ):
+ x, y, z = mesh.verts[i].co
+ file.write( " { %ff, %ff, %ff }, \n" % ( x, y, z ) )
+
+ file.write( "}; \n" );
+
+
+ file.write( "const int %s_num_triangles = %d; \n" % ( objname, len( mesh.faces ) ) )
+ file.write( "const int %s_triangles[%d][3] = { \n" % ( objname, len( mesh.faces ) ) )
+
+ for i in range( len( mesh.faces ) ):
+
+ if len( mesh.faces[ i ].v ) == 3:
+ file.write( " { %d, %d, %d }, \n" % ( mesh.faces[ i ].v[0].index, mesh.faces[ i ].v[1].index, mesh.faces[ i ].v[2].index ) )
+ else:
+ print "Warning: Dropping non-triangle!!!"
+
+ file.write( "}; \n" );
+
+
+ file.write( "const int %s_num_materials[%d][4] = { \n" % (objname, len( mesh.materials ) ) )
+ file.write( "const float %s_materials[%d][4] = { \n" % (objname, len( mesh.materials ) ) )
+
+ for m in mesh.materials:
+
+ file.write( " { %ff, %ff, %ff, %ff }, \n" % ( m.R, m.G, m.B, m.alpha ) )
+
+ file.write( "}; \n" );
+
+
+ file.write( "const int %s_triangle_materials[%d] = { \n" % ( objname, len( mesh.faces ) ) )
+
+ for i in range( len( mesh.faces ) ):
+
+ if len( mesh.faces[ i ].v ) == 3:
+ file.write( " %d, \n" % ( mesh.faces[ i ].materialIndex ) )
+ else:
+ print "Warning: Dropping non-triangle!!!"
+
+ file.write( "}; \n" );
+
+
+ file.write( "const float %s_triangle_normals[%d][3] = { \n" % (objname, len( mesh.faces ) ) )
+
+ for t in mesh.faces:
+
+ if len( t.v ) == 3:
+ file.write( " { %ff, %ff, %ff }, \n" % ( t.normal[0], t.normal[1], t.normal[2] ) )
+ else:
+ print "Warning: Dropping non-triangle!!!"
+
+ file.write( "}; \n" );
+
+
+ file.write( "const float %s_vertex_normals[%d][3] = { \n" % (objname, len( mesh.verts ) ) )
+
+ for v in mesh.verts:
+
+ file.write( " { %ff, %ff, %ff }, \n" % ( v.no[0], v.no[1], v.no[2] ) )
+
+ file.write( "}; \n" );
+
+
+ file.close()
+
+def fs_callback( filename ):
+ if filename.find( '.h', -2 ) <= 0: filename += '.h'
+ write( filename )
+
+Blender.Window.FileSelector( fs_callback, "Export C code" )
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|