Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/collada/CMakeLists.txt3
-rw-r--r--source/blender/collada/DocumentImporter.cpp10
-rw-r--r--source/blender/collada/ExtraHandler.cpp67
-rw-r--r--source/blender/collada/ExtraHandler.h69
-rw-r--r--source/blender/collada/SConscript2
5 files changed, 149 insertions, 2 deletions
diff --git a/source/blender/collada/CMakeLists.txt b/source/blender/collada/CMakeLists.txt
index 73e81025226..830e22f70d7 100644
--- a/source/blender/collada/CMakeLists.txt
+++ b/source/blender/collada/CMakeLists.txt
@@ -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
diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp
index 91652957234..49992a6989f 100644
--- a/source/blender/collada/DocumentImporter.cpp
+++ b/source/blender/collada/DocumentImporter.cpp
@@ -49,6 +49,7 @@
#include "COLLADAFWLight.h"
#include "COLLADASaxFWLLoader.h"
+#include "COLLADASaxFWLIExtraDataCallbackHandler.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
@@ -74,10 +75,11 @@
#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
index 00000000000..8aafccd3734
--- /dev/null
+++ b/source/blender/collada/ExtraHandler.cpp
@@ -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
index 00000000000..463633d744c
--- /dev/null
+++ b/source/blender/collada/ExtraHandler.h
@@ -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 );
+};
+
diff --git a/source/blender/collada/SConscript b/source/blender/collada/SConscript
index 10c3fcaeb96..b2a25e81dd5 100644
--- a/source/blender/collada/SConscript
+++ b/source/blender/collada/SConscript
@@ -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')