[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35613] trunk/blender/source/blender/ collada: COLLADA conformance: don't write empty libraries for effect, image and animation

Nathan Letwory nathan at letworyinteractive.com
Fri Mar 18 15:06:14 CET 2011


Revision: 35613
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35613
Author:   jesterking
Date:     2011-03-18 14:06:13 +0000 (Fri, 18 Mar 2011)
Log Message:
-----------
COLLADA conformance: don't write empty libraries for effect, image and animation

Modified Paths:
--------------
    trunk/blender/source/blender/collada/DocumentExporter.cpp
    trunk/blender/source/blender/collada/EffectExporter.cpp
    trunk/blender/source/blender/collada/EffectExporter.h
    trunk/blender/source/blender/collada/ImageExporter.cpp
    trunk/blender/source/blender/collada/ImageExporter.h

Modified: trunk/blender/source/blender/collada/DocumentExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/DocumentExporter.cpp	2011-03-18 13:36:52 UTC (rev 35612)
+++ trunk/blender/source/blender/collada/DocumentExporter.cpp	2011-03-18 14:06:13 UTC (rev 35613)
@@ -307,15 +307,19 @@
 
 	AnimationExporter(COLLADASW::StreamWriter *sw): COLLADASW::LibraryAnimations(sw) { this->sw = sw; }
 
+
+
 	void exportAnimations(Scene *sce)
 	{
-		this->scene = sce;
+		if(hasAnimations(sce)) {
+			this->scene = sce;
 
-		openLibrary();
-		
-		forEachObjectInScene(sce, *this);
-		
-		closeLibrary();
+			openLibrary();
+
+			forEachObjectInScene(sce, *this);
+
+			closeLibrary();
+		}
 	}
 
 	// called for each exported object
@@ -905,6 +909,24 @@
 			}
 		}
 	}
+	
+	bool hasAnimations(Scene *sce)
+	{
+		Base *base= (Base*) sce->base.first;
+		while(base) {
+			Object *ob = base->object;
+			
+			FCurve *fcu = 0;
+			if(ob->adt && ob->adt->action)
+				fcu = (FCurve*)ob->adt->action->curves.first;
+				
+			if ((ob->type == OB_ARMATURE && ob->data) || fcu) {
+				return true;
+			}
+			base= base->next;
+		}
+		return false;
+	}
 };
 
 void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename)

Modified: trunk/blender/source/blender/collada/EffectExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/EffectExporter.cpp	2011-03-18 13:36:52 UTC (rev 35612)
+++ trunk/blender/source/blender/collada/EffectExporter.cpp	2011-03-18 14:06:13 UTC (rev 35613)
@@ -55,15 +55,38 @@
 	return "";
 }
 
+EffectsExporter::EffectsExporter(COLLADASW::StreamWriter *sw) : COLLADASW::LibraryEffects(sw){}
 
-EffectsExporter::EffectsExporter(COLLADASW::StreamWriter *sw) : COLLADASW::LibraryEffects(sw){}
+bool EffectsExporter::hasEffects(Scene *sce)
+{
+	Base *base = (Base *)sce->base.first;
+	
+	while(base) {
+		Object *ob= base->object;
+		int a;
+		for(a = 0; a < ob->totcol; a++)
+		{
+			Material *ma = give_current_material(ob, a+1);
+
+			// no material, but check all of the slots
+			if (!ma) continue;
+
+			return true;
+		}
+		base= base->next;
+	}
+	return false;
+}
+
 void EffectsExporter::exportEffects(Scene *sce)
 {
-	openLibrary();
-	MaterialFunctor mf;
-	mf.forEachMaterialInScene<EffectsExporter>(sce, *this);
+	if(hasEffects(sce)) {
+		openLibrary();
+		MaterialFunctor mf;
+		mf.forEachMaterialInScene<EffectsExporter>(sce, *this);
 
-	closeLibrary();
+		closeLibrary();
+	}
 }
 
 void EffectsExporter::operator()(Material *ma, Object *ob)

Modified: trunk/blender/source/blender/collada/EffectExporter.h
===================================================================
--- trunk/blender/source/blender/collada/EffectExporter.h	2011-03-18 13:36:52 UTC (rev 35612)
+++ trunk/blender/source/blender/collada/EffectExporter.h	2011-03-18 14:06:13 UTC (rev 35613)
@@ -57,10 +57,11 @@
 											/*COLLADASW::Surface *surface*/);
 	
 	COLLADASW::ColorOrTexture getcol(float r, float g, float b, float a);
+private:
+	/** Fills the array of mtex indices which have image. Used for exporting images. */
+	void createTextureIndices(Material *ma, std::vector<int> &indices);
 	
-	//returns the array of mtex indices which have image 
-	//need this for exporting textures
-	void createTextureIndices(Material *ma, std::vector<int> &indices);
+	bool hasEffects(Scene *sce);
 };
 
 #endif

Modified: trunk/blender/source/blender/collada/ImageExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/ImageExporter.cpp	2011-03-18 13:36:52 UTC (rev 35612)
+++ trunk/blender/source/blender/collada/ImageExporter.cpp	2011-03-18 14:06:13 UTC (rev 35613)
@@ -46,13 +46,40 @@
 ImagesExporter::ImagesExporter(COLLADASW::StreamWriter *sw, const char* filename) : COLLADASW::LibraryImages(sw), mfilename(filename)
 {}
 
+bool ImagesExporter::hasImages(Scene *sce)
+{
+	Base *base = (Base *)sce->base.first;
+	
+	while(base) {
+		Object *ob= base->object;
+		int a;
+		for(a = 0; a < ob->totcol; a++)
+		{
+			Material *ma = give_current_material(ob, a+1);
+
+			// no material, but check all of the slots
+			if (!ma) continue;
+			int b;
+			for (b = 0; b < MAX_MTEX; b++) {
+				MTex *mtex = ma->mtex[b];
+				if (mtex && mtex->tex && mtex->tex->ima) return true;
+			}
+
+		}
+		base= base->next;
+	}
+	return false;
+}
+
 void ImagesExporter::exportImages(Scene *sce)
 {
-	openLibrary();
-	MaterialFunctor mf;
-	mf.forEachMaterialInScene<ImagesExporter>(sce, *this);
+	if(hasImages(sce)) {
+		openLibrary();
+		MaterialFunctor mf;
+		mf.forEachMaterialInScene<ImagesExporter>(sce, *this);
 
-	closeLibrary();
+		closeLibrary();
+	}
 }
 
 void ImagesExporter::operator()(Material *ma, Object *ob)

Modified: trunk/blender/source/blender/collada/ImageExporter.h
===================================================================
--- trunk/blender/source/blender/collada/ImageExporter.h	2011-03-18 13:36:52 UTC (rev 35612)
+++ trunk/blender/source/blender/collada/ImageExporter.h	2011-03-18 14:06:13 UTC (rev 35613)
@@ -49,6 +49,8 @@
 	
 	void exportImages(Scene *sce);
 	void operator()(Material *ma, Object *ob);
+private:
+	bool hasImages(Scene *sce);
 };
 
 #endif




More information about the Bf-blender-cvs mailing list