COLLADA: supporting barebone class for <extra> support (incomplete).
authorNathan Letwory <nathan@letworyinteractive.com>
Wed, 23 Mar 2011 14:25:35 +0000 (14:25 +0000)
committerNathan Letwory <nathan@letworyinteractive.com>
Wed, 23 Mar 2011 14:25:35 +0000 (14:25 +0000)
source/blender/collada/CMakeLists.txt
source/blender/collada/DocumentImporter.cpp
source/blender/collada/ExtraHandler.cpp [new file with mode: 0644]
source/blender/collada/ExtraHandler.h [new file with mode: 0644]
source/blender/collada/SConscript

index 73e81025226bb522408d48723b35f182452b9fd6..830e22f70d7ef304901a41f4571b49e0de9626e0 100644 (file)
@@ -51,6 +51,7 @@ else()
                ${OPENCOLLADA_INC}/COLLADABaseUtils/include
                ${OPENCOLLADA_INC}/COLLADAFramework/include
                ${OPENCOLLADA_INC}/COLLADASaxFrameworkLoader/include 
+               ${OPENCOLLADA_INC}/GeneratedSaxParser/include 
        )
 endif()
 
@@ -62,6 +63,7 @@ set(SRC
        DocumentExporter.cpp
        DocumentImporter.cpp
        EffectExporter.cpp
+       ExtraHandler.cpp
        GeometryExporter.cpp
        ImageExporter.cpp
        InstanceWriter.cpp
@@ -82,6 +84,7 @@ set(SRC
        DocumentExporter.h
        DocumentImporter.h
        EffectExporter.h
+       ExtraHandler.h
        GeometryExporter.h
        ImageExporter.h
        InstanceWriter.h
index 91652957234f511ef08ff7efbfd1f100d305a2fb..49992a6989f581be9afcf95ce0a5773dc59c02cf 100644 (file)
@@ -49,6 +49,7 @@
 #include "COLLADAFWLight.h"
 
 #include "COLLADASaxFWLLoader.h"
+#include "COLLADASaxFWLIExtraDataCallbackHandler.h"
 
 #include "BLI_listbase.h"
 #include "BLI_math.h"
 
 #include "MEM_guardedalloc.h"
 
+#include "ExtraHandler.h"
 #include "DocumentImporter.h"
 #include "TransformReader.h"
-#include "collada_internal.h"
 
+#include "collada_internal.h"
 #include "collada_utils.h"
 
 
@@ -143,6 +145,10 @@ private:
                /** TODO Add error handler (implement COLLADASaxFWL::IErrorHandler */
                COLLADASaxFWL::Loader loader;
                COLLADAFW::Root root(&loader, this);
+               ExtraHandler *ehandler = new ExtraHandler();
+               
+               loader.registerExtraDataCallbackHandler(ehandler);
+               
 
                if (!root.loadDocument(mFilename))
                        return false;
@@ -157,6 +163,8 @@ private:
                if (!root2.loadDocument(mFilename))
                        return false;
                
+               
+               delete ehandler;
 
                return true;
        }
diff --git a/source/blender/collada/ExtraHandler.cpp b/source/blender/collada/ExtraHandler.cpp
new file mode 100644 (file)
index 0000000..8aafccd
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Nathan Letwory.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/collada/ExtraHandler.cpp
+ *  \ingroup collada
+ */
+
+#include "BLI_string.h"
+
+#include "ExtraHandler.h"
+
+ExtraHandler::ExtraHandler(){}
+
+ExtraHandler::~ExtraHandler(){}
+
+bool ExtraHandler::elementBegin( const char* elementName, const char** attributes)
+{
+       printf("begin: %s\n", elementName);
+       return true;
+}
+
+bool ExtraHandler::elementEnd(const char* elementName )
+{
+       printf("end: %s\n", elementName);
+       return true;
+}
+
+bool ExtraHandler::textData(const char* text, size_t textLength)
+{
+       char buf[1024] = {0};
+       _snprintf(buf, textLength, "%s", text);
+       printf("data: %s\n", buf);
+       return true;
+}
+
+bool ExtraHandler::parseElement ( 
+       const char* profileName, 
+       const unsigned long& elementHash, 
+       const COLLADAFW::UniqueId& uniqueId ) {
+               if(BLI_strcaseeq(profileName, "blender")) {
+                       printf("In parseElement for supported profile %s for id %s\n", profileName, uniqueId.toAscii().c_str());
+                       return true;
+               }
+               printf("In parseElement for unsupported profile %s for id %s\n", profileName, uniqueId.toAscii().c_str());
+               return false;
+}
diff --git a/source/blender/collada/ExtraHandler.h b/source/blender/collada/ExtraHandler.h
new file mode 100644 (file)
index 0000000..463633d
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Nathan Letwory.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/collada/ExtraHandler.h
+ *  \ingroup collada
+ */
+
+#include <string>
+#include <map>
+#include <vector>
+#include <algorithm> // sort()
+
+#include "COLLADASaxFWLIExtraDataCallbackHandler.h"
+
+
+/** \brief Handler class for <extra> data, through which different
+ * profiles can be handled
+ */
+class ExtraHandler : public COLLADASaxFWL::IExtraDataCallbackHandler
+{
+public:
+       /** Constructor. */
+       ExtraHandler();
+
+       /** Destructor. */
+       virtual ~ExtraHandler();
+
+       /** Handle the beginning of an element. */
+       bool elementBegin( const char* elementName, const char** attributes);
+       
+       /** Handle the end of an element. */
+       bool elementEnd(const char* elementName );
+       
+       /** Receive the data in text format. */
+       bool textData(const char* text, size_t textLength);
+
+       /** Method to ask, if the current callback handler want to read the data of the given extra element. */
+       bool parseElement ( 
+               const char* profileName, 
+               const unsigned long& elementHash, 
+               const COLLADAFW::UniqueId& uniqueId );
+private:
+       /** Disable default copy constructor. */
+       ExtraHandler( const ExtraHandler& pre );
+       /** Disable default assignment operator. */
+       const ExtraHandler& operator= ( const ExtraHandler& pre );
+};
+
index 10c3fcaeb96e052a43334a2f9b492b0b06e55ef7..b2a25e81dd51632848adde14e081bfe522ddc71c 100644 (file)
@@ -35,7 +35,7 @@ defs = []
 if  env['OURPLATFORM']=='darwin':
     incs = '../blenlib ../blenkernel ../windowmanager ../blenloader ../makesdna ../makesrna ../editors/include ../../../intern/guardedalloc [OPENCOLLADA]/COLLADAStreamWriter [OPENCOLLADA]/COLLADABaseUtils [OPENCOLLADA]/COLLADAFramework [OPENCOLLADA]/COLLADASaxFrameworkLoader '.replace('[OPENCOLLADA]', env['BF_OPENCOLLADA_INC'])
 else:
-    incs = '../blenlib ../blenkernel ../windowmanager ../makesdna ../blenloader ../makesrna ../editors/include ../../../intern/guardedalloc [OPENCOLLADA]/COLLADAStreamWriter/include [OPENCOLLADA]/COLLADABaseUtils/include [OPENCOLLADA]/COLLADAFramework/include [OPENCOLLADA]/COLLADASaxFrameworkLoader/include '.replace('[OPENCOLLADA]', env['BF_OPENCOLLADA_INC'])
+    incs = '../blenlib ../blenkernel ../windowmanager ../makesdna ../blenloader ../makesrna ../editors/include ../../../intern/guardedalloc [OPENCOLLADA]/COLLADAStreamWriter/include [OPENCOLLADA]/COLLADABaseUtils/include [OPENCOLLADA]/COLLADAFramework/include [OPENCOLLADA]/COLLADASaxFrameworkLoader/include [OPENCOLLADA]/GeneratedSaxParser/include '.replace('[OPENCOLLADA]', env['BF_OPENCOLLADA_INC'])
 
 if env['BF_BUILDINFO']:
     defs.append('NAN_BUILDINFO')