Revision: 20924
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20924
Author:   kazanbas
Date:     2009-06-16 10:54:38 +0200 (Tue, 16 Jun 2009)

Log Message:
-----------
The basic OBJ exporter working. The code is release/io/export_obj.py.
To run it, switch to Scripts Window, click Scripts->Reload Scripts 
menu, it appears under Scripts->Export.

Modified Paths:
--------------
    branches/soc-2009-kazanbas/release/io/export_obj.py
    branches/soc-2009-kazanbas/source/blender/editors/mesh/editmesh.c
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_internal.h
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_mesh.c

Modified: branches/soc-2009-kazanbas/release/io/export_obj.py
===================================================================
--- branches/soc-2009-kazanbas/release/io/export_obj.py 2009-06-16 08:52:04 UTC 
(rev 20923)
+++ branches/soc-2009-kazanbas/release/io/export_obj.py 2009-06-16 08:54:38 UTC 
(rev 20924)
@@ -1,7 +1,37 @@
 import bpy
 
+def write_obj(filepath, scene, ob):
+       out = open(filepath, 'w')
+
+       # create a temporary mesh
+       mesh = bpy.data.add_mesh("tmpmesh")
+
+       # copy data with modifiers applied
+       mesh.copy_applied(scene, ob)
+
+       # for vert in mesh.verts:
+       # ^ iterating that way doesn't work atm for some reason
+
+       for i in range(len(mesh.verts)):
+               vert = mesh.verts[i]
+               out.write('v {0} {1} {2}\n'.format(vert.co[0], vert.co[1], 
vert.co[2]))
+       
+       for i in range(len(mesh.faces)):
+               face = mesh.faces[i]
+               out.write('f')
+
+               # but this works
+               for index in face.verts:
+                       out.write(' {0}'.format(index + 1))
+               out.write('\n')
+
+       # TODO: delete mesh here
+
+       out.close()
+       
 class SCRIPT_OT_export_obj(bpy.types.Operator):
-       '''Operator documentation text, will be used for the operator tooltip 
and python docs.'''
+       '''A very basic OBJ exporter, writes only active object's mesh.'''
+
        __label__ = 'Export OBJ'
        
        # List of operator properties, the attributes will be assigned
@@ -17,20 +47,13 @@
                self.debug("exec")
                self.debug("filename = " + self.filename)
 
-               self.debug("num selected objects: 
{0}".format(len(context.selected_objects)))
+               act = context.active_object
 
-               ob = bpy.data.objects["Cube"]
-               o = ob.data
+               if act.type == 'MESH':
+                       write_obj(self.filename, context.scene, act)
+               else:
+                       self.debug("Active object is not a MESH.")
 
-               m = bpy.data.add_mesh("tmpmesh")
-               m.copy_applied(context.scene, ob, True)
-
-               def vert(co):
-                       return "{0}, {1}, {2}".format(co[0], co[1], co[2])
-
-               print("   orig: {0} with 
totverts={1}".format(vert(o.verts[0].co), len(o.verts)))
-               print("applied: {0} with 
totverts={1}".format(vert(m.verts[0].co), len(m.verts)))
-
                # XXX errors are silenced for some reason
 #              raise Exception("oops!")
 
@@ -38,9 +61,8 @@
        
        def invoke(self, context, event):
                self.debug("invoke")
-#              context.add_fileselect(self.__operator__)
-#              return ('RUNNING_MODAL',)
-               return self.exec(context)
+               context.add_fileselect(self.__operator__)
+               return ('RUNNING_MODAL',)
        
        def poll(self, context): # poll isnt working yet
                self.debug("poll")

Modified: branches/soc-2009-kazanbas/source/blender/editors/mesh/editmesh.c
===================================================================
--- branches/soc-2009-kazanbas/source/blender/editors/mesh/editmesh.c   
2009-06-16 08:52:04 UTC (rev 20923)
+++ branches/soc-2009-kazanbas/source/blender/editors/mesh/editmesh.c   
2009-06-16 08:54:38 UTC (rev 20924)
@@ -2041,14 +2041,11 @@
        copy_mesh_data(me, from);
 }
 
-void RNA_api_mesh_copy_applied(Mesh *me, Scene *sce, Object *ob, int 
apply_obmat)
+void RNA_api_mesh_copy_applied(Mesh *me, Scene *sce, Object *ob)
 {
        DerivedMesh *dm= mesh_create_derived_view(sce, ob, CD_MASK_MESH);
        DM_to_mesh(dm, me);
        dm->release(dm);
-
-       if (apply_obmat) {
-       }
 }
 
 void RNA_api_mesh_transform(Mesh *me, float **mat)

Modified: 
branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_internal.h
===================================================================
--- branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_internal.h    
2009-06-16 08:52:04 UTC (rev 20923)
+++ branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_internal.h    
2009-06-16 08:54:38 UTC (rev 20924)
@@ -196,7 +196,7 @@
 void RNA_api_ui_layout(struct StructRNA *srna);
 struct Mesh *RNA_api_add_mesh(struct Main *main, char *name);
 void RNA_api_mesh_copy(struct Mesh *me, struct Mesh *from);
-void RNA_api_mesh_copy_applied(struct Mesh *me, struct Scene *sce, struct 
Object *ob, int apply_obmat);
+void RNA_api_mesh_copy_applied(struct Mesh *me, struct Scene *sce, struct 
Object *ob);
 
 /* ID Properties */
 

Modified: branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_mesh.c        
2009-06-16 08:52:04 UTC (rev 20923)
+++ branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_mesh.c        
2009-06-16 08:54:38 UTC (rev 20924)
@@ -1134,12 +1134,11 @@
        RNA_def_property_flag(prop, PROP_REQUIRED);
 
        func= RNA_def_function(srna, "copy_applied", 
"RNA_api_mesh_copy_applied");
-       RNA_def_function_ui_description(func, "Copy mesh data from object with 
all modifiers and transformations applied.");
+       RNA_def_function_ui_description(func, "Copy mesh data from object with 
all modifiers applied.");
        prop= RNA_def_pointer(func, "sce", "Scene", "", "Scene.");
        RNA_def_property_flag(prop, PROP_REQUIRED);
        prop= RNA_def_pointer(func, "ob", "Object", "", "Object to copy data 
from.");
        RNA_def_property_flag(prop, PROP_REQUIRED);
-       RNA_def_boolean(func, "apply_obmat", 1, "", "Apply object matrix.");
 }
 
 void RNA_def_mesh(BlenderRNA *brna)


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to