[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