2008-09-07 16:51:05 +00:00
|
|
|
/*
|
|
|
|
Open Asset Import Library (ASSIMP)
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
|
|
|
Copyright (c) 2006-2008, ASSIMP Development 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 Development 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 <vector>
|
|
|
|
|
2008-09-12 20:25:11 +00:00
|
|
|
|
2008-09-07 16:51:05 +00:00
|
|
|
namespace Assimp {
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
/** \brief Helper class to generate vertex buffers for standard geometric
|
|
|
|
* shapes, such as cylinders, cones, boxes, spheres, elipsoids ... .
|
|
|
|
*/
|
|
|
|
class ASSIMP_API StandardShapes
|
|
|
|
{
|
|
|
|
// class cannot be instanced
|
|
|
|
StandardShapes() {}
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
2008-10-27 00:36:26 +00:00
|
|
|
|
|
|
|
// ----------------------------------------------------------------
|
|
|
|
/** 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));
|
|
|
|
|
2008-11-02 22:30:37 +00:00
|
|
|
static aiMesh* MakeMesh ( unsigned int n, void (*GenerateFunc)
|
2008-10-27 00:36:26 +00:00
|
|
|
(unsigned int,std::vector<aiVector3D>&));
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------
|
2008-09-11 20:50:15 +00:00
|
|
|
/** @brief Generates a hexahedron (cube)
|
|
|
|
*
|
|
|
|
* Hexahedrons can be scaled on all axes.
|
|
|
|
* @param positions Receives output triangles.
|
2008-10-27 00:36:26 +00:00
|
|
|
* @param polygons If you pass true here quads will be returned
|
|
|
|
* @return Number of vertices per face
|
2008-09-11 20:50:15 +00:00
|
|
|
*/
|
2008-10-27 00:36:26 +00:00
|
|
|
static unsigned int MakeHexahedron(
|
|
|
|
std::vector<aiVector3D>& positions,
|
|
|
|
bool polygons = false);
|
2008-09-11 20:50:15 +00:00
|
|
|
|
2008-10-27 00:36:26 +00:00
|
|
|
// ----------------------------------------------------------------
|
2008-09-10 14:39:35 +00:00
|
|
|
/** @brief Generates an icosahedron
|
|
|
|
*
|
|
|
|
* @param positions Receives output triangles.
|
2008-10-27 00:36:26 +00:00
|
|
|
* @return Number of vertices per face
|
2008-09-10 14:39:35 +00:00
|
|
|
*/
|
2008-10-27 00:36:26 +00:00
|
|
|
static unsigned int MakeIcosahedron(
|
|
|
|
std::vector<aiVector3D>& positions);
|
2008-09-10 14:39:35 +00:00
|
|
|
|
|
|
|
|
2008-10-27 00:36:26 +00:00
|
|
|
// ----------------------------------------------------------------
|
2008-09-10 20:37:24 +00:00
|
|
|
/** @brief Generates a dodecahedron
|
|
|
|
*
|
2008-09-11 20:50:15 +00:00
|
|
|
* @param positions Receives output triangles
|
2008-10-27 00:36:26 +00:00
|
|
|
* @param polygons If you pass true here pentagons will be returned
|
|
|
|
* @return Number of vertices per face
|
2008-09-10 20:37:24 +00:00
|
|
|
*/
|
2008-10-27 00:36:26 +00:00
|
|
|
static unsigned int MakeDodecahedron(
|
|
|
|
std::vector<aiVector3D>& positions,
|
|
|
|
bool polygons = false);
|
|
|
|
|
2008-09-10 20:37:24 +00:00
|
|
|
|
2008-10-27 00:36:26 +00:00
|
|
|
// ----------------------------------------------------------------
|
2008-09-10 20:37:24 +00:00
|
|
|
/** @brief Generates an octahedron
|
|
|
|
*
|
2008-09-11 20:50:15 +00:00
|
|
|
* @param positions Receives output triangles.
|
2008-10-27 00:36:26 +00:00
|
|
|
* @return Number of vertices per face
|
2008-09-11 20:50:15 +00:00
|
|
|
*/
|
2008-10-27 00:36:26 +00:00
|
|
|
static unsigned int MakeOctahedron(
|
|
|
|
std::vector<aiVector3D>& positions);
|
|
|
|
|
2008-09-11 20:50:15 +00:00
|
|
|
|
2008-10-27 00:36:26 +00:00
|
|
|
// ----------------------------------------------------------------
|
2008-09-11 20:50:15 +00:00
|
|
|
/** @brief Generates a tetrahedron
|
|
|
|
*
|
2008-09-10 20:37:24 +00:00
|
|
|
* @param positions Receives output triangles.
|
2008-10-27 00:36:26 +00:00
|
|
|
* @return Number of vertices per face
|
2008-09-10 20:37:24 +00:00
|
|
|
*/
|
2008-10-27 00:36:26 +00:00
|
|
|
static unsigned int MakeTetrahedron(
|
|
|
|
std::vector<aiVector3D>& positions);
|
|
|
|
|
2008-09-10 20:37:24 +00:00
|
|
|
|
|
|
|
|
2008-10-27 00:36:26 +00:00
|
|
|
// ----------------------------------------------------------------
|
2008-09-07 16:51:05 +00:00
|
|
|
/** @brief Generates a sphere
|
|
|
|
*
|
2008-09-10 20:37:24 +00:00
|
|
|
* @param tess Number of subdivions - 0 generates a octahedron
|
2008-09-07 16:51:05 +00:00
|
|
|
* @param positions Receives output triangles.
|
|
|
|
*/
|
2008-09-16 16:17:32 +00:00
|
|
|
static void MakeSphere(unsigned int tess,
|
2008-09-07 16:51:05 +00:00
|
|
|
std::vector<aiVector3D>& positions);
|
|
|
|
|
2008-10-27 00:36:26 +00:00
|
|
|
|
|
|
|
// ----------------------------------------------------------------
|
|
|
|
/** @brief Generates a cone or a cylinder, either open or closed.
|
2008-09-07 16:51:05 +00:00
|
|
|
*
|
|
|
|
* @code
|
|
|
|
*
|
|
|
|
* |-----| <- radius 1
|
|
|
|
*
|
|
|
|
* __x__ <- center 1
|
|
|
|
* / \
|
|
|
|
* / \
|
|
|
|
* / \
|
|
|
|
* / \
|
|
|
|
* /______x______\ <- center 2
|
|
|
|
*
|
|
|
|
* |-------------| <- radius 2
|
|
|
|
*
|
|
|
|
* @endcode
|
|
|
|
*
|
|
|
|
* @param center1 First center point
|
|
|
|
* @param radius1 First radius
|
|
|
|
* @param center2 Second center point
|
|
|
|
* @param radius2 Second radius
|
2008-09-10 20:37:24 +00:00
|
|
|
* @param tess Number of subdivisions
|
2008-09-07 16:51:05 +00:00
|
|
|
* @param bOpened true for an open cone/cylinder.
|
|
|
|
* @param positions Receives output triangles.
|
|
|
|
*/
|
|
|
|
static void MakeCone(aiVector3D& center1,float radius1,
|
2008-09-10 20:37:24 +00:00
|
|
|
aiVector3D& center2,float radius2,unsigned int tess,
|
2008-09-07 16:51:05 +00:00
|
|
|
std::vector<aiVector3D>& positions,bool bOpened = false);
|
|
|
|
|
2008-10-27 00:36:26 +00:00
|
|
|
|
|
|
|
// ----------------------------------------------------------------
|
2008-09-07 16:51:05 +00:00
|
|
|
/** @brief Generates a flat circle
|
|
|
|
*
|
|
|
|
* @param center Center point of the circle
|
|
|
|
* @param radius Radius of the circle
|
|
|
|
* @param normal Normal vector of the circle.
|
|
|
|
* This is also the normal vector of all triangles generated by
|
|
|
|
* this function.
|
2008-09-10 20:37:24 +00:00
|
|
|
* @param tess Number of triangles
|
2008-09-07 16:51:05 +00:00
|
|
|
* @param positions Receives output triangles.
|
|
|
|
*/
|
2008-09-20 15:55:51 +00:00
|
|
|
static void MakeCircle(const aiVector3D& center, const aiVector3D& normal,
|
2008-09-10 20:37:24 +00:00
|
|
|
float radius, unsigned int tess,
|
2008-09-07 16:51:05 +00:00
|
|
|
std::vector<aiVector3D>& positions);
|
|
|
|
|
|
|
|
};
|
|
|
|
} // ! Assimp
|
|
|
|
|
2008-09-12 20:25:11 +00:00
|
|
|
#endif // !! AI_STANDARD_SHAPES_H_INC
|