[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20924] branches/soc-2009-kazanbas: The basic OBJ exporter working.

Arystanbek Dyussenov arystan.d at gmail.com
Tue Jun 16 10:54:39 CEST 2009


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)





More information about the Bf-blender-cvs mailing list