COLLADA: supporting barebone class for <extra> support (incomplete).

This commit is contained in:
Nathan Letwory 2011-03-23 14:25:35 +00:00
parent 392829c6ea
commit 3c45a2d298
5 changed files with 149 additions and 2 deletions

@ -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

@ -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;
}

@ -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;
}

@ -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 );
};

@ -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')