[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54970] trunk/blender: Collada: Added support for ngon export/ import and added triangulate option to export

Gaia Clary gaia.clary at machinimatrix.org
Sat Mar 2 16:58:13 CET 2013


Revision: 54970
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54970
Author:   gaiaclary
Date:     2013-03-02 15:58:13 +0000 (Sat, 02 Mar 2013)
Log Message:
-----------
Collada: Added support for ngon export/import and added triangulate option to export

Modified Paths:
--------------
    trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_rigged.py
    trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_static.py
    trunk/blender/source/blender/collada/CMakeLists.txt
    trunk/blender/source/blender/collada/ControllerExporter.cpp
    trunk/blender/source/blender/collada/DocumentImporter.cpp
    trunk/blender/source/blender/collada/ExportSettings.h
    trunk/blender/source/blender/collada/GeometryExporter.cpp
    trunk/blender/source/blender/collada/GeometryExporter.h
    trunk/blender/source/blender/collada/MeshImporter.cpp
    trunk/blender/source/blender/collada/MeshImporter.h
    trunk/blender/source/blender/collada/collada.cpp
    trunk/blender/source/blender/collada/collada.h
    trunk/blender/source/blender/collada/collada_utils.cpp
    trunk/blender/source/blender/collada/collada_utils.h
    trunk/blender/source/blender/editors/io/io_collada.c

Modified: trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_rigged.py
===================================================================
--- trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_rigged.py	2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_rigged.py	2013-03-02 15:58:13 UTC (rev 54970)
@@ -12,7 +12,7 @@
 op.active_uv_only = True
 op.include_uv_textures = True
 op.use_texture_copies = True
-op.use_ngons = False
+op.triangulate = True
 op.use_object_instantiation = False
 op.sort_by_name = True
 op.second_life = True

Modified: trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_static.py
===================================================================
--- trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_static.py	2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_static.py	2013-03-02 15:58:13 UTC (rev 54970)
@@ -12,7 +12,7 @@
 op.active_uv_only = True
 op.include_uv_textures = True
 op.use_texture_copies = True
-op.use_ngons = False
+op.triangulate = True
 op.use_object_instantiation = False
 op.sort_by_name = True
 op.second_life = False

Modified: trunk/blender/source/blender/collada/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/collada/CMakeLists.txt	2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/source/blender/collada/CMakeLists.txt	2013-03-02 15:58:13 UTC (rev 54970)
@@ -38,7 +38,7 @@
 	../../../intern/guardedalloc
 	../ikplugin
 	../../../intern/iksolver/extern
-	
+	../bmesh
 )
 
 set(INC_SYS

Modified: trunk/blender/source/blender/collada/ControllerExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/ControllerExporter.cpp	2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/source/blender/collada/ControllerExporter.cpp	2013-03-02 15:58:13 UTC (rev 54970)
@@ -201,13 +201,12 @@
 	bool use_instantiation = this->export_settings->use_object_instantiation;
 	Mesh *me;
 
-	if (this->export_settings->apply_modifiers) 
-		me = bc_to_mesh_apply_modifiers(scene, ob, this->export_settings->export_mesh_type);
-	else 
-		me = (Mesh *)ob->data;
+	me = bc_get_mesh_copy(scene,
+				ob,
+				this->export_settings->export_mesh_type,
+				this->export_settings->apply_modifiers,
+				this->export_settings->triangulate);
 	
-	BKE_mesh_tessface_ensure(me);
-
 	if (!me->dvert) return;
 
 	std::string controller_name = id_name(ob_arm);
@@ -292,10 +291,8 @@
 	add_joints_element(&ob->defbase, joints_source_id, inv_bind_mat_source_id);
 	add_vertex_weights_element(weights_source_id, joints_source_id, vcounts, joints);
 
-	if (this->export_settings->apply_modifiers)
-	{
-		BKE_libblock_free_us(&(G.main->mesh), me);
-	}
+	BKE_libblock_free_us(&(G.main->mesh), me);
+
 	closeSkin();
 	closeController();
 }
@@ -305,13 +302,11 @@
 	bool use_instantiation = this->export_settings->use_object_instantiation;
 	Mesh *me;
 
-	if (this->export_settings->apply_modifiers) {
-		me = bc_to_mesh_apply_modifiers(scene, ob, this->export_settings->export_mesh_type);
-	} 
-	else {
-		me = (Mesh *)ob->data;
-	}
-	BKE_mesh_tessface_ensure(me);
+	me = bc_get_mesh_copy(scene,
+				ob,
+				this->export_settings->export_mesh_type,
+				this->export_settings->apply_modifiers,
+				this->export_settings->triangulate);
 
 	std::string controller_name = id_name(ob) + "-morph";
 	std::string controller_id = get_controller_id(key, ob);
@@ -332,11 +327,9 @@
 	                                 COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, morph_weights_id)));
 	targets.add();
 
-	if (this->export_settings->apply_modifiers)
-	{
-		BKE_libblock_free_us(&(G.main->mesh), me);
-	}
+	BKE_libblock_free_us(&(G.main->mesh), me);
 
+
 	//support for animations
 	//can also try the base element and param alternative
 	add_weight_extras(key);

Modified: trunk/blender/source/blender/collada/DocumentImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/DocumentImporter.cpp	2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/source/blender/collada/DocumentImporter.cpp	2013-03-02 15:58:13 UTC (rev 54970)
@@ -157,7 +157,8 @@
 	
 	delete ehandler;
 
-	mesh_importer.bmeshConversion();
+	//XXX No longer needed (geometries are now created as bmesh)
+	//mesh_importer.bmeshConversion();
 
 	return true;
 }

Modified: trunk/blender/source/blender/collada/ExportSettings.h
===================================================================
--- trunk/blender/source/blender/collada/ExportSettings.h	2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/source/blender/collada/ExportSettings.h	2013-03-02 15:58:13 UTC (rev 54970)
@@ -45,7 +45,7 @@
 	bool include_material_textures;
 	bool use_texture_copies;
 
-	bool use_ngons;
+	bool triangulate;
 	bool use_object_instantiation;
 	bool sort_by_name;
 	bool second_life;

Modified: trunk/blender/source/blender/collada/GeometryExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/GeometryExporter.cpp	2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/source/blender/collada/GeometryExporter.cpp	2013-03-02 15:58:13 UTC (rev 54970)
@@ -57,7 +57,6 @@
 {
 }
 
-
 void GeometryExporter::exportGeom(Scene *sce)
 {
 	openLibrary();
@@ -77,15 +76,12 @@
 #endif
 
 	bool use_instantiation = this->export_settings->use_object_instantiation;
-	bool use_ngons         = this->export_settings->use_ngons;
-	Mesh *me;
-	if (this->export_settings->apply_modifiers) {
-		me = bc_to_mesh_apply_modifiers(mScene, ob, this->export_settings->export_mesh_type);
-	}
-	else {
-		me = (Mesh *)ob->data;
-	}
-	BKE_mesh_tessface_ensure(me);
+	bool triangulate       = this->export_settings->triangulate;
+	Mesh *me = bc_get_mesh_copy( mScene, 
+					ob,
+					this->export_settings->export_mesh_type,
+					this->export_settings->apply_modifiers,
+					this->export_settings->triangulate);
 
 	std::string geom_id = get_geometry_id(ob, use_instantiation);
 	std::vector<Normal> nor;
@@ -118,12 +114,13 @@
 	bool has_uvs = (bool)CustomData_has_layer(&me->fdata, CD_MTFACE);
 	
 	// writes <source> for uv coords if mesh has uv coords
-	if (has_uvs)
+	if (has_uvs) {
 		createTexcoordsSource(geom_id, me);
+	}
 
-	if (has_color)
+	if (has_color) {
 		createVertexColorSource(geom_id, me);
-
+	}
 	// <vertices>
 
 	COLLADASW::Vertices verts(mSW);
@@ -140,11 +137,11 @@
 		// XXX slow
 		if (ob->totcol) {
 			for (int a = 0; a < ob->totcol; a++) {
-				createPolylist(a, use_ngons, has_uvs, has_color, ob, me, geom_id, norind);
+				createPolylist(a, has_uvs, has_color, ob, me, geom_id, norind);
 			}
 		}
 		else {
-			createPolylist(0, use_ngons, has_uvs, has_color, ob, me, geom_id, norind);
+			createPolylist(0, has_uvs, has_color, ob, me, geom_id, norind);
 		}
 	}
 	
@@ -156,10 +153,6 @@
 
 	closeGeometry();
 
-	if (this->export_settings->apply_modifiers) {
-		BKE_libblock_free_us(&(G.main->mesh), me);
-	}
-
 	if (this->export_settings->include_shapekeys) {
 		Key * key = BKE_key_from_object(ob);
 		if (key) {
@@ -168,16 +161,16 @@
 			kb = kb->next;
 			for (; kb; kb = kb->next) {
 				BKE_key_convert_to_mesh(kb, me);
-				export_key_mesh(ob, me, kb, use_ngons);
+				export_key_mesh(ob, me, kb);
 			}
 		}
 	}
-#if 0
-	dm->release(dm);
-#endif
+
+	BKE_libblock_free_us(&(G.main->mesh), me);
+
 }
 
-void GeometryExporter::export_key_mesh(Object *ob, Mesh *me, KeyBlock *kb, bool use_ngons)
+void GeometryExporter::export_key_mesh(Object *ob, Mesh *me, KeyBlock *kb)
 {
 	std::string geom_id = get_geometry_id(ob, false) + "_morph_" + translate_id(kb->name);
 	std::vector<Normal> nor;
@@ -208,11 +201,13 @@
 	bool has_uvs = (bool)CustomData_has_layer(&me->fdata, CD_MTFACE);
 	
 	// writes <source> for uv coords if mesh has uv coords
-	if (has_uvs)
+	if (has_uvs) {
 		createTexcoordsSource(geom_id, me);
+	}
 
-	if (has_color)
+	if (has_color) {
 		createVertexColorSource(geom_id, me);
+	}
 
 	// <vertices>
 
@@ -228,11 +223,11 @@
 	// XXX slow		
 	if (ob->totcol) {
 		for (int a = 0; a < ob->totcol; a++) {
-			createPolylist(a, use_ngons, has_uvs, has_color, ob, me, geom_id, norind);
+			createPolylist(a, has_uvs, has_color, ob, me, geom_id, norind);
 		}
 	}
 	else {
-		createPolylist(0, use_ngons, has_uvs, has_color, ob, me, geom_id, norind);
+		createPolylist(0, has_uvs, has_color, ob, me, geom_id, norind);
 	}
 	
 	closeMesh();
@@ -297,9 +292,7 @@
 }
 
 // powerful because it handles both cases when there is material and when there's not
-// Call this function when ngons shall be exported unchanged
 void GeometryExporter::createPolylist(short material_index,
-									  bool use_ngons,
                                       bool has_uvs,
                                       bool has_color,
                                       Object *ob,
@@ -308,18 +301,6 @@
                                       std::vector<Face>& norind)
 {
 
-	if (!use_ngons) {
-		createTriangulatedPolylist(
-				material_index,
-				has_uvs,
-				has_color,
-				ob,
-				me,
-				geom_id,
-				norind);
-		return;
-	}
-
 	MPoly *mpolys = me->mpoly;
 	MLoop *mloops = me->mloop;
 	int totpolys  = me->totpoly;
@@ -426,128 +407,7 @@
 	polylist.finish();
 }
 
-// powerful because it handles both cases when there is material and when there's not
-// Call this function when ngons shall be exported as Tris or Quads
-void GeometryExporter::createTriangulatedPolylist(short material_index,
-                                      bool has_uvs,
-                                      bool has_color,
-                                      Object *ob,
-                                      Mesh *me,
-                                      std::string& geom_id,
-                                      std::vector<Face>& norind)
-{
-	MFace *mfaces = me->mface;
-	int totfaces = me->totface;
 
-	// <vcount>
-	int i;
-	int faces_in_polylist = 0;
-	std::vector<unsigned long> vcount_list;
-
-	// count faces with this material
-	for (i = 0; i < totfaces; i++) {
-		MFace *f = &mfaces[i];
-		
-		if (f->mat_nr == material_index) {
-			faces_in_polylist++;
-			if (f->v4 == 0) {
-				vcount_list.push_back(3);
-			}
-			else {
-				vcount_list.push_back(4);
-			}
-		}
-	}
-
-	// no faces using this material
-	if (faces_in_polylist == 0) {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list