| /* |
| 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 Declares a helper class, "StandardShapes" which generates |
| * vertices for standard shapes, such as cylnders, cones, spheres .. |
| */ |
| #ifndef AI_STANDARD_SHAPES_H_INC |
| #define AI_STANDARD_SHAPES_H_INC |
| |
| #include <assimp/vector3.h> |
| #include <vector> |
| |
| struct aiMesh; |
| |
| namespace Assimp { |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Helper class to generate vertex buffers for standard geometric |
| * shapes, such as cylinders, cones, boxes, spheres, elipsoids ... . |
| */ |
| class StandardShapes |
| { |
| // class cannot be instanced |
| StandardShapes() {} |
| |
| public: |
| |
| |
| // ---------------------------------------------------------------- |
| /** Generates a mesh from an array of vertex positions. |
| * |
| * @param positions List of vertex positions |
| * @param numIndices Number of indices per primitive |
| * @return Output mesh |
| */ |
| static aiMesh* MakeMesh(const std::vector<aiVector3D>& positions, |
| unsigned int numIndices); |
| |
| |
| static aiMesh* MakeMesh ( unsigned int (*GenerateFunc) |
| (std::vector<aiVector3D>&)); |
| |
| static aiMesh* MakeMesh ( unsigned int (*GenerateFunc) |
| (std::vector<aiVector3D>&, bool)); |
| |
| static aiMesh* MakeMesh ( unsigned int n, void (*GenerateFunc) |
| (unsigned int,std::vector<aiVector3D>&)); |
| |
| // ---------------------------------------------------------------- |
| /** @brief Generates a hexahedron (cube) |
| * |
| * Hexahedrons can be scaled on all axes. |
| * @param positions Receives output triangles. |
| * @param polygons If you pass true here quads will be returned |
| * @return Number of vertices per face |
| */ |
| static unsigned int MakeHexahedron( |
| std::vector<aiVector3D>& positions, |
| bool polygons = false); |
| |
| // ---------------------------------------------------------------- |
| /** @brief Generates an icosahedron |
| * |
| * @param positions Receives output triangles. |
| * @return Number of vertices per face |
| */ |
| static unsigned int MakeIcosahedron( |
| std::vector<aiVector3D>& positions); |
| |
| |
| // ---------------------------------------------------------------- |
| /** @brief Generates a dodecahedron |
| * |
| * @param positions Receives output triangles |
| * @param polygons If you pass true here pentagons will be returned |
| * @return Number of vertices per face |
| */ |
| static unsigned int MakeDodecahedron( |
| std::vector<aiVector3D>& positions, |
| bool polygons = false); |
| |
| |
| // ---------------------------------------------------------------- |
| /** @brief Generates an octahedron |
| * |
| * @param positions Receives output triangles. |
| * @return Number of vertices per face |
| */ |
| static unsigned int MakeOctahedron( |
| std::vector<aiVector3D>& positions); |
| |
| |
| // ---------------------------------------------------------------- |
| /** @brief Generates a tetrahedron |
| * |
| * @param positions Receives output triangles. |
| * @return Number of vertices per face |
| */ |
| static unsigned int MakeTetrahedron( |
| std::vector<aiVector3D>& positions); |
| |
| |
| |
| // ---------------------------------------------------------------- |
| /** @brief Generates a sphere |
| * |
| * @param tess Number of subdivions - 0 generates a octahedron |
| * @param positions Receives output triangles. |
| */ |
| static void MakeSphere(unsigned int tess, |
| std::vector<aiVector3D>& positions); |
| |
| |
| // ---------------------------------------------------------------- |
| /** @brief Generates a cone or a cylinder, either open or closed. |
| * |
| * @code |
| * |
| * |-----| <- radius 1 |
| * |
| * __x__ <- ] ^ |
| * / \ | height | |
| * / \ | Y |
| * / \ | |
| * / \ | |
| * /______x______\ <- ] <- end cap |
| * |
| * |-------------| <- radius 2 |
| * |
| * @endcode |
| * |
| * @param height Height of the cone |
| * @param radius1 First radius |
| * @param radius2 Second radius |
| * @param tess Number of triangles. |
| * @param bOpened true for an open cone/cylinder. An open shape has |
| * no 'end caps' |
| * @param positions Receives output triangles |
| */ |
| static void MakeCone(ai_real height,ai_real radius1, |
| ai_real radius2,unsigned int tess, |
| std::vector<aiVector3D>& positions,bool bOpen= false); |
| |
| |
| // ---------------------------------------------------------------- |
| /** @brief Generates a flat circle |
| * |
| * The circle is constructed in the planned formed by the x,z |
| * axes of the cartesian coordinate system. |
| * |
| * @param radius Radius of the circle |
| * @param tess Number of segments. |
| * @param positions Receives output triangles. |
| */ |
| static void MakeCircle(ai_real radius, unsigned int tess, |
| std::vector<aiVector3D>& positions); |
| |
| }; |
| } // ! Assimp |
| |
| #endif // !! AI_STANDARD_SHAPES_H_INC |