nuclear@0: /* nuclear@0: Open Asset Import Library (assimp) nuclear@0: ---------------------------------------------------------------------- nuclear@0: nuclear@0: Copyright (c) 2006-2012, assimp team nuclear@0: All rights reserved. nuclear@0: nuclear@0: Redistribution and use of this software in source and binary forms, nuclear@0: with or without modification, are permitted provided that the nuclear@0: following conditions are met: nuclear@0: nuclear@0: * Redistributions of source code must retain the above nuclear@0: copyright notice, this list of conditions and the nuclear@0: following disclaimer. nuclear@0: nuclear@0: * Redistributions in binary form must reproduce the above nuclear@0: copyright notice, this list of conditions and the nuclear@0: following disclaimer in the documentation and/or other nuclear@0: materials provided with the distribution. nuclear@0: nuclear@0: * Neither the name of the assimp team, nor the names of its nuclear@0: contributors may be used to endorse or promote products nuclear@0: derived from this software without specific prior nuclear@0: written permission of the assimp team. nuclear@0: nuclear@0: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS nuclear@0: "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT nuclear@0: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR nuclear@0: A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT nuclear@0: OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, nuclear@0: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT nuclear@0: LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, nuclear@0: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY nuclear@0: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT nuclear@0: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE nuclear@0: OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. nuclear@0: nuclear@0: ---------------------------------------------------------------------- nuclear@0: */ nuclear@0: nuclear@0: /** @file Defines a (dummy) post processing step to validate the loader's nuclear@0: * output data structure (for debugging) nuclear@0: */ nuclear@0: #ifndef AI_VALIDATEPROCESS_H_INC nuclear@0: #define AI_VALIDATEPROCESS_H_INC nuclear@0: nuclear@0: #include "assimp/types.h" nuclear@0: #include "BaseProcess.h" nuclear@0: nuclear@0: struct aiBone; nuclear@0: struct aiMesh; nuclear@0: struct aiAnimation; nuclear@0: struct aiNodeAnim; nuclear@0: struct aiTexture; nuclear@0: struct aiMaterial; nuclear@0: struct aiNode; nuclear@0: struct aiString; nuclear@0: nuclear@0: namespace Assimp { nuclear@0: nuclear@0: // -------------------------------------------------------------------------------------- nuclear@0: /** Validates the whole ASSIMP scene data structure for correctness. nuclear@0: * ImportErrorException is thrown of the scene is corrupt.*/ nuclear@0: // -------------------------------------------------------------------------------------- nuclear@0: class ValidateDSProcess : public BaseProcess nuclear@0: { nuclear@0: public: nuclear@0: nuclear@0: ValidateDSProcess(); nuclear@0: ~ValidateDSProcess(); nuclear@0: nuclear@0: public: nuclear@0: // ------------------------------------------------------------------- nuclear@0: bool IsActive( unsigned int pFlags) const; nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: void Execute( aiScene* pScene); nuclear@0: nuclear@0: protected: nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: /** Report a validation error. This will throw an exception, nuclear@0: * control won't return. nuclear@0: * @param msg Format string for sprintf().*/ nuclear@0: AI_WONT_RETURN void ReportError(const char* msg,...); nuclear@0: nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: /** Report a validation warning. This won't throw an exception, nuclear@0: * control will return to the callera. nuclear@0: * @param msg Format string for sprintf().*/ nuclear@0: void ReportWarning(const char* msg,...); nuclear@0: nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: /** Validates a mesh nuclear@0: * @param pMesh Input mesh*/ nuclear@0: void Validate( const aiMesh* pMesh); nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: /** Validates a bone nuclear@0: * @param pMesh Input mesh nuclear@0: * @param pBone Input bone*/ nuclear@0: void Validate( const aiMesh* pMesh,const aiBone* pBone,float* afSum); nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: /** Validates an animation nuclear@0: * @param pAnimation Input animation*/ nuclear@0: void Validate( const aiAnimation* pAnimation); nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: /** Validates a material nuclear@0: * @param pMaterial Input material*/ nuclear@0: void Validate( const aiMaterial* pMaterial); nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: /** Search the material data structure for invalid or corrupt nuclear@0: * texture keys. nuclear@0: * @param pMaterial Input material nuclear@0: * @param type Type of the texture*/ nuclear@0: void SearchForInvalidTextures(const aiMaterial* pMaterial, nuclear@0: aiTextureType type); nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: /** Validates a texture nuclear@0: * @param pTexture Input texture*/ nuclear@0: void Validate( const aiTexture* pTexture); nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: /** Validates a light source nuclear@0: * @param pLight Input light nuclear@0: */ nuclear@0: void Validate( const aiLight* pLight); nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: /** Validates a camera nuclear@0: * @param pCamera Input camera*/ nuclear@0: void Validate( const aiCamera* pCamera); nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: /** Validates a bone animation channel nuclear@0: * @param pAnimation Animation channel. nuclear@0: * @param pBoneAnim Input bone animation */ nuclear@0: void Validate( const aiAnimation* pAnimation, nuclear@0: const aiNodeAnim* pBoneAnim); nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: /** Validates a node and all of its subnodes nuclear@0: * @param Node Input node*/ nuclear@0: void Validate( const aiNode* pNode); nuclear@0: nuclear@0: // ------------------------------------------------------------------- nuclear@0: /** Validates a string nuclear@0: * @param pString Input string*/ nuclear@0: void Validate( const aiString* pString); nuclear@0: nuclear@0: private: nuclear@0: nuclear@0: // template to validate one of the aiScene::mXXX arrays nuclear@0: template nuclear@0: inline void DoValidation(T** array, unsigned int size, nuclear@0: const char* firstName, const char* secondName); nuclear@0: nuclear@0: // extended version: checks whethr T::mName occurs twice nuclear@0: template nuclear@0: inline void DoValidationEx(T** array, unsigned int size, nuclear@0: const char* firstName, const char* secondName); nuclear@0: nuclear@0: // extension to the first template which does also search nuclear@0: // the nodegraph for an item with the same name nuclear@0: template nuclear@0: inline void DoValidationWithNameCheck(T** array, unsigned int size, nuclear@0: const char* firstName, const char* secondName); nuclear@0: nuclear@0: aiScene* mScene; nuclear@0: }; nuclear@0: nuclear@0: nuclear@0: nuclear@0: nuclear@0: } // end of namespace Assimp nuclear@0: nuclear@0: #endif // AI_VALIDATEPROCESS_H_INC