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

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

Reply via email to