1
0
forked from 0ad/0ad
0ad/source/collada/CommonConvert.h
2006-12-26 22:43:09 +00:00

78 lines
2.0 KiB
C++

#ifndef COMMONCONVERT_H__
#define COMMONCONVERT_H__
#include <exception>
#include <string>
class FUStatus;
class FCDSceneNode;
class FCDEntityInstance;
class FMMatrix44;
class FCDSkinController;
class ColladaException : public std::exception
{
public:
ColladaException(const std::string& msg)
: msg(msg)
{
}
~ColladaException() throw()
{
}
virtual const char* what() const throw()
{
return msg.c_str();
}
private:
std::string msg;
};
struct OutputCB
{
virtual void operator() (const char* data, unsigned int length)=0;
};
/** Throws a ColladaException unless the value is true. */
#define REQUIRE(value, message) require_(__LINE__, value, "Assertion not satisfied", message)
/** Throws a ColladaException unless the status is successful. */
#define REQUIRE_SUCCESS(status) require_(__LINE__, status)
void require_(int line, bool value, const char* type, const char* message);
void require_(int line, const FUStatus& status);
/** Outputs a structure, using sizeof to get the size. */
template<typename T> void write(OutputCB& output, const T& data)
{
output((char*)&data, sizeof(T));
}
/** Error handler for libxml2 */
void errorHandler(void* ctx, const char* msg, ...);
/**
* Tries to find a single suitable entity instance in the scene. Fails if there
* are none, or if there are too many and it's not clear which one should
* be converted.
*
* @param node root scene node to search under
* @param instance output - the found entity instance (if any)
* @param transform - the world-space transform of the found entity
*
* @return true if one was found
*/
bool FindSingleInstance(FCDSceneNode* node, FCDEntityInstance*& instance, FMMatrix44& transform);
/**
* Like FCDSkinController::ReduceInfluences but works correctly.
* Additionally, multiple influences for the same joint-vertex pair are
* collapsed into a single influence.
*/
void SkinReduceInfluences(FCDSkinController* skin, size_t maxInfluenceCount, float minimumWeight);
#endif // COMMONCONVERT_H__