1 | /* |
---|---|

2 | Open Asset Import Library (assimp) |

3 | ---------------------------------------------------------------------- |

4 | |

5 | Copyright (c) 2006-2017, assimp team |

6 | |

7 | All rights reserved. |

8 | |

9 | Redistribution and use of this software in source and binary forms, |

10 | with or without modification, are permitted provided that the |

11 | following conditions are met: |

12 | |

13 | * Redistributions of source code must retain the above |

14 | copyright notice, this list of conditions and the |

15 | following disclaimer. |

16 | |

17 | * Redistributions in binary form must reproduce the above |

18 | copyright notice, this list of conditions and the |

19 | following disclaimer in the documentation and/or other |

20 | materials provided with the distribution. |

21 | |

22 | * Neither the name of the assimp team, nor the names of its |

23 | contributors may be used to endorse or promote products |

24 | derived from this software without specific prior |

25 | written permission of the assimp team. |

26 | |

27 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |

28 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |

29 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |

30 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |

31 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |

32 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |

33 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |

34 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |

35 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |

36 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |

37 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |

38 | |

39 | ---------------------------------------------------------------------- |

40 | */ |

41 | |

42 | /** @file Declares a helper class, "StandardShapes" which generates |

43 | * vertices for standard shapes, such as cylnders, cones, spheres .. |

44 | */ |

45 | #ifndef AI_STANDARD_SHAPES_H_INC |

46 | #define AI_STANDARD_SHAPES_H_INC |

47 | |

48 | #include <assimp/vector3.h> |

49 | #include <vector> |

50 | |

51 | struct aiMesh; |

52 | |

53 | namespace Assimp { |

54 | |

55 | // --------------------------------------------------------------------------- |

56 | /** \brief Helper class to generate vertex buffers for standard geometric |

57 | * shapes, such as cylinders, cones, boxes, spheres, elipsoids ... . |

58 | */ |

59 | class StandardShapes |

60 | { |

61 | // class cannot be instanced |

62 | StandardShapes() {} |

63 | |

64 | public: |

65 | |

66 | |

67 | // ---------------------------------------------------------------- |

68 | /** Generates a mesh from an array of vertex positions. |

69 | * |

70 | * @param positions List of vertex positions |

71 | * @param numIndices Number of indices per primitive |

72 | * @return Output mesh |

73 | */ |

74 | static aiMesh* MakeMesh(const std::vector<aiVector3D>& positions, |

75 | unsigned int numIndices); |

76 | |

77 | |

78 | static aiMesh* MakeMesh ( unsigned int (*GenerateFunc) |

79 | (std::vector<aiVector3D>&)); |

80 | |

81 | static aiMesh* MakeMesh ( unsigned int (*GenerateFunc) |

82 | (std::vector<aiVector3D>&, bool)); |

83 | |

84 | static aiMesh* MakeMesh ( unsigned int n, void (*GenerateFunc) |

85 | (unsigned int,std::vector<aiVector3D>&)); |

86 | |

87 | // ---------------------------------------------------------------- |

88 | /** @brief Generates a hexahedron (cube) |

89 | * |

90 | * Hexahedrons can be scaled on all axes. |

91 | * @param positions Receives output triangles. |

92 | * @param polygons If you pass true here quads will be returned |

93 | * @return Number of vertices per face |

94 | */ |

95 | static unsigned int MakeHexahedron( |

96 | std::vector<aiVector3D>& positions, |

97 | bool polygons = false); |

98 | |

99 | // ---------------------------------------------------------------- |

100 | /** @brief Generates an icosahedron |

101 | * |

102 | * @param positions Receives output triangles. |

103 | * @return Number of vertices per face |

104 | */ |

105 | static unsigned int MakeIcosahedron( |

106 | std::vector<aiVector3D>& positions); |

107 | |

108 | |

109 | // ---------------------------------------------------------------- |

110 | /** @brief Generates a dodecahedron |

111 | * |

112 | * @param positions Receives output triangles |

113 | * @param polygons If you pass true here pentagons will be returned |

114 | * @return Number of vertices per face |

115 | */ |

116 | static unsigned int MakeDodecahedron( |

117 | std::vector<aiVector3D>& positions, |

118 | bool polygons = false); |

119 | |

120 | |

121 | // ---------------------------------------------------------------- |

122 | /** @brief Generates an octahedron |

123 | * |

124 | * @param positions Receives output triangles. |

125 | * @return Number of vertices per face |

126 | */ |

127 | static unsigned int MakeOctahedron( |

128 | std::vector<aiVector3D>& positions); |

129 | |

130 | |

131 | // ---------------------------------------------------------------- |

132 | /** @brief Generates a tetrahedron |

133 | * |

134 | * @param positions Receives output triangles. |

135 | * @return Number of vertices per face |

136 | */ |

137 | static unsigned int MakeTetrahedron( |

138 | std::vector<aiVector3D>& positions); |

139 | |

140 | |

141 | |

142 | // ---------------------------------------------------------------- |

143 | /** @brief Generates a sphere |

144 | * |

145 | * @param tess Number of subdivions - 0 generates a octahedron |

146 | * @param positions Receives output triangles. |

147 | */ |

148 | static void MakeSphere(unsigned int tess, |

149 | std::vector<aiVector3D>& positions); |

150 | |

151 | |

152 | // ---------------------------------------------------------------- |

153 | /** @brief Generates a cone or a cylinder, either open or closed. |

154 | * |

155 | * @code |

156 | * |

157 | * |-----| <- radius 1 |

158 | * |

159 | * __x__ <- ] ^ |

160 | * / \ | height | |

161 | * / \ | Y |

162 | * / \ | |

163 | * / \ | |

164 | * /______x______\ <- ] <- end cap |

165 | * |

166 | * |-------------| <- radius 2 |

167 | * |

168 | * @endcode |

169 | * |

170 | * @param height Height of the cone |

171 | * @param radius1 First radius |

172 | * @param radius2 Second radius |

173 | * @param tess Number of triangles. |

174 | * @param bOpened true for an open cone/cylinder. An open shape has |

175 | * no 'end caps' |

176 | * @param positions Receives output triangles |

177 | */ |

178 | static void MakeCone(ai_real height,ai_real radius1, |

179 | ai_real radius2,unsigned int tess, |

180 | std::vector<aiVector3D>& positions,bool bOpen= false); |

181 | |

182 | |

183 | // ---------------------------------------------------------------- |

184 | /** @brief Generates a flat circle |

185 | * |

186 | * The circle is constructed in the planned formed by the x,z |

187 | * axes of the cartesian coordinate system. |

188 | * |

189 | * @param radius Radius of the circle |

190 | * @param tess Number of segments. |

191 | * @param positions Receives output triangles. |

192 | */ |

193 | static void MakeCircle(ai_real radius, unsigned int tess, |

194 | std::vector<aiVector3D>& positions); |

195 | |

196 | }; |

197 | } // ! Assimp |

198 | |

199 | #endif // !! AI_STANDARD_SHAPES_H_INC |

200 |