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 helper class to compute a vertex-triangle adjacency map */ nuclear@0: #ifndef AI_VTADJACENCY_H_INC nuclear@0: #define AI_VTADJACENCY_H_INC nuclear@0: nuclear@0: #include "BaseProcess.h" nuclear@0: #include "assimp/types.h" nuclear@0: #include "assimp/ai_assert.h" nuclear@0: nuclear@0: struct aiMesh; nuclear@0: namespace Assimp { nuclear@0: nuclear@0: // -------------------------------------------------------------------------------------------- nuclear@0: /** @brief The VertexTriangleAdjacency class computes a vertex-triangle nuclear@0: * adjacency map from a given index buffer. nuclear@0: * nuclear@0: * @note Although it is called #VertexTriangleAdjacency, the current version does also nuclear@0: * support arbitrary polygons. */ nuclear@0: // -------------------------------------------------------------------------------------------- nuclear@0: class VertexTriangleAdjacency nuclear@0: { nuclear@0: public: nuclear@0: nuclear@0: // ---------------------------------------------------------------------------- nuclear@0: /** @brief Construction from an existing index buffer nuclear@0: * @param pcFaces Index buffer nuclear@0: * @param iNumFaces Number of faces in the buffer nuclear@0: * @param iNumVertices Number of referenced vertices. This value nuclear@0: * is computed automatically if 0 is specified. nuclear@0: * @param bComputeNumTriangles If you want the class to compute nuclear@0: * a list containing the number of referenced triangles per vertex nuclear@0: * per vertex - pass true. */ nuclear@0: VertexTriangleAdjacency(aiFace* pcFaces,unsigned int iNumFaces, nuclear@0: unsigned int iNumVertices = 0, nuclear@0: bool bComputeNumTriangles = true); nuclear@0: nuclear@0: nuclear@0: // ---------------------------------------------------------------------------- nuclear@0: /** @brief Destructor */ nuclear@0: ~VertexTriangleAdjacency(); nuclear@0: nuclear@0: nuclear@0: public: nuclear@0: nuclear@0: // ---------------------------------------------------------------------------- nuclear@0: /** @brief Get all triangles adjacent to a vertex nuclear@0: * @param iVertIndex Index of the vertex nuclear@0: * @return A pointer to the adjacency list. */ nuclear@0: unsigned int* GetAdjacentTriangles(unsigned int iVertIndex) const nuclear@0: { nuclear@0: ai_assert(iVertIndex < iNumVertices); nuclear@0: return &mAdjacencyTable[ mOffsetTable[iVertIndex]]; nuclear@0: } nuclear@0: nuclear@0: nuclear@0: // ---------------------------------------------------------------------------- nuclear@0: /** @brief Get the number of triangles that are referenced by nuclear@0: * a vertex. This function returns a reference that can be modified nuclear@0: * @param iVertIndex Index of the vertex nuclear@0: * @return Number of referenced triangles */ nuclear@0: unsigned int& GetNumTrianglesPtr(unsigned int iVertIndex) nuclear@0: { nuclear@0: ai_assert(iVertIndex < iNumVertices && NULL != mLiveTriangles); nuclear@0: return mLiveTriangles[iVertIndex]; nuclear@0: } nuclear@0: nuclear@0: nuclear@0: public: nuclear@0: nuclear@0: //! Offset table nuclear@0: unsigned int* mOffsetTable; nuclear@0: nuclear@0: //! Adjacency table nuclear@0: unsigned int* mAdjacencyTable; nuclear@0: nuclear@0: //! Table containing the number of referenced triangles per vertex nuclear@0: unsigned int* mLiveTriangles; nuclear@0: nuclear@0: //! Debug: Number of referenced vertices nuclear@0: unsigned int iNumVertices; nuclear@0: nuclear@0: }; nuclear@0: } nuclear@0: nuclear@0: #endif // !! AI_VTADJACENCY_H_INC