| /* |
| Open Asset Import Library (assimp) |
| ---------------------------------------------------------------------- |
| |
| Copyright (c) 2006-2017, assimp team |
| |
| All rights reserved. |
| |
| Redistribution and use of this software in source and binary forms, |
| with or without modification, are permitted provided that the |
| following conditions are met: |
| |
| * Redistributions of source code must retain the above |
| copyright notice, this list of conditions and the |
| following disclaimer. |
| |
| * Redistributions in binary form must reproduce the above |
| copyright notice, this list of conditions and the |
| following disclaimer in the documentation and/or other |
| materials provided with the distribution. |
| |
| * Neither the name of the assimp team, nor the names of its |
| contributors may be used to endorse or promote products |
| derived from this software without specific prior |
| written permission of the assimp team. |
| |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| ---------------------------------------------------------------------- |
| */ |
| |
| /** @file PretransformVertices.h |
| * @brief Defines a post processing step to pretransform all |
| * vertices in the scenegraph |
| */ |
| #ifndef AI_PRETRANSFORMVERTICES_H_INC |
| #define AI_PRETRANSFORMVERTICES_H_INC |
| |
| #include "BaseProcess.h" |
| #include <assimp/mesh.h> |
| #include <list> |
| #include <vector> |
| |
| struct aiNode; |
| class PretransformVerticesTest; |
| namespace Assimp { |
| |
| // --------------------------------------------------------------------------- |
| /** The PretransformVertices pre-transforms all vertices in the node tree |
| * and removes the whole graph. The output is a list of meshes, one for |
| * each material. |
| */ |
| class ASSIMP_API PretransformVertices : public BaseProcess |
| { |
| public: |
| |
| PretransformVertices (); |
| ~PretransformVertices (); |
| |
| public: |
| |
| // ------------------------------------------------------------------- |
| // Check whether step is active |
| bool IsActive( unsigned int pFlags) const; |
| |
| // ------------------------------------------------------------------- |
| // Execute step on a given scene |
| void Execute( aiScene* pScene); |
| |
| // ------------------------------------------------------------------- |
| // Setup import settings |
| void SetupProperties(const Importer* pImp); |
| |
| |
| // ------------------------------------------------------------------- |
| /** @brief Toggle the 'keep hierarchy' option |
| * @param d hm ... difficult to guess what this means, hu!? |
| */ |
| void KeepHierarchy(bool d) { |
| configKeepHierarchy = d; |
| } |
| |
| // ------------------------------------------------------------------- |
| /** @brief Check whether 'keep hierarchy' is currently enabled. |
| * @return ... |
| */ |
| bool IsHierarchyKept() const { |
| return configKeepHierarchy; |
| } |
| |
| private: |
| |
| // ------------------------------------------------------------------- |
| // Count the number of nodes |
| unsigned int CountNodes( aiNode* pcNode ); |
| |
| // ------------------------------------------------------------------- |
| // Get a bitwise combination identifying the vertex format of a mesh |
| unsigned int GetMeshVFormat(aiMesh* pcMesh); |
| |
| // ------------------------------------------------------------------- |
| // Count the number of vertices in the whole scene and a given |
| // material index |
| void CountVerticesAndFaces( aiScene* pcScene, aiNode* pcNode, |
| unsigned int iMat, |
| unsigned int iVFormat, |
| unsigned int* piFaces, |
| unsigned int* piVertices); |
| |
| // ------------------------------------------------------------------- |
| // Collect vertex/face data |
| void CollectData( aiScene* pcScene, aiNode* pcNode, |
| unsigned int iMat, |
| unsigned int iVFormat, |
| aiMesh* pcMeshOut, |
| unsigned int aiCurrent[2], |
| unsigned int* num_refs); |
| |
| // ------------------------------------------------------------------- |
| // Get a list of all vertex formats that occur for a given material |
| // The output list contains duplicate elements |
| void GetVFormatList( aiScene* pcScene, unsigned int iMat, |
| std::list<unsigned int>& aiOut); |
| |
| // ------------------------------------------------------------------- |
| // Compute the absolute transformation matrices of each node |
| void ComputeAbsoluteTransform( aiNode* pcNode ); |
| |
| // ------------------------------------------------------------------- |
| // Simple routine to build meshes in worldspace, no further optimization |
| void BuildWCSMeshes(std::vector<aiMesh*>& out, aiMesh** in, |
| unsigned int numIn, aiNode* node); |
| |
| // ------------------------------------------------------------------- |
| // Apply the node transformation to a mesh |
| void ApplyTransform(aiMesh* mesh, const aiMatrix4x4& mat); |
| |
| // ------------------------------------------------------------------- |
| // Reset transformation matrices to identity |
| void MakeIdentityTransform(aiNode* nd); |
| |
| // ------------------------------------------------------------------- |
| // Build reference counters for all meshes |
| void BuildMeshRefCountArray(aiNode* nd, unsigned int * refs); |
| |
| |
| |
| //! Configuration option: keep scene hierarchy as long as possible |
| bool configKeepHierarchy; |
| bool configNormalize; |
| bool configTransform; |
| aiMatrix4x4 configTransformation; |
| }; |
| |
| } // end of namespace Assimp |
| |
| #endif // !!AI_GENFACENORMALPROCESS_H_INC |