.#skeleton.h.1.2 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. /*************************************/
  2. /* Auteur : Rémi Synave */
  3. /* Date de création : 17/03/15 */
  4. /* Date de modification : 17/03/15 */
  5. /* Version : 0.4 */
  6. /*************************************/
  7. /***************************************************************************/
  8. /* This file is part of a2ri. */
  9. /* */
  10. /* a2ri is free software: you can redistribute it and/or modify it */
  11. /* under the terms of the GNU Lesser General Public License as published */
  12. /* by the Free Software Foundation, either version 3 of the License, or */
  13. /* (at your option) any later version. */
  14. /* */
  15. /* a2ri is distributed in the hope that it will be useful, */
  16. /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
  17. /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
  18. /* GNU Lesser General Public License for more details. */
  19. /* */
  20. /* You should have received a copy of the GNU Lesser General Public */
  21. /* License along with a2ri. */
  22. /* If not, see <http://www.gnu.org/licenses/>. */
  23. /***************************************************************************/
  24. #ifndef SKELETON__H
  25. #define SKELETON__H
  26. #include <stdio.h>
  27. #include <stdlib.h>
  28. #include <string.h>
  29. #include "util.h"
  30. #include "vertex.h"
  31. #include "edge.h"
  32. #include "space_partition.h"
  33. /**
  34. * \struct skeleton skeleton.h skeleton
  35. * Structure de données pour stocker un squelette composé d'une ensemble de sommets et d'arêtes. Chaque arête est définie par deux entiers qui sont es indices des sommets délimitant l'arête.
  36. */
  37. typedef struct
  38. {
  39. skeleton_vertex *ve;
  40. skeleton_edge *ed;
  41. int nbvertex;
  42. int nbedge;
  43. } skeleton;
  44. /**
  45. Initialisation d'un squelette avec un maillage vide
  46. @param m pointeur sur le squelette
  47. @return aucun
  48. */
  49. void a2ri_skeleton_init (
  50. skeleton * s);
  51. /**
  52. Libération de l'espace mémoire utilisé
  53. @param m pointeur sur le squelette
  54. */
  55. void a2ri_skeleton_free (
  56. skeleton * s);
  57. /**
  58. Affichage des caractéristiques générales d'un squelette (sommets et arêtes)
  59. @param m le squelette
  60. @return aucun
  61. */
  62. void a2ri_skeleton_display (
  63. const skeleton * const s);
  64. /**
  65. Affichage des caractéristiques détaillées d'un squelette (sommets et arêtes et leurs adjacences)
  66. @param m le squelette
  67. @return aucun
  68. */
  69. void a2ri_skeleton_display_detail (
  70. const skeleton * const s);
  71. /**
  72. Ajout d'un vertex (x,y,z) au squelette
  73. @param m pointeur sur le squelette
  74. @param x coordonnée x du vertex
  75. @param y coordonnée y
  76. @param z coordonnée z
  77. @return 1 si succès, 0 sinon
  78. */
  79. int a2ri_skeleton_add_vertex (
  80. skeleton * s,
  81. double x,
  82. double y,
  83. double z);
  84. /**
  85. Ajout d'une arête défini par trois points (numéros d'index dans la liste de points) au squelette
  86. @param m pointeur sur le squelette
  87. @param ve1 index du premier point
  88. @param ve2 index du second point
  89. @return 1 si succès, 0 sinon
  90. */
  91. int a2ri_skeleton_add_edge (
  92. skeleton * s,
  93. int ve1,
  94. int ve2);
  95. /**
  96. Translation du squelette
  97. @param m pointeur sur le squelette à translater
  98. @param delta pointeur sur le vecteur de translation
  99. @return aucun
  100. */
  101. void a2ri_skeleton_translate (
  102. skeleton * s,
  103. const vector3d * const delta);
  104. /**
  105. Rotation d'un squelette en radian autour de l'axe X
  106. @param v pointeur sur le squelette
  107. @param angle angle de rotation du squelette en radian
  108. @return aucun
  109. */
  110. void a2ri_skeleton_rotateX_radian (
  111. skeleton * s,
  112. double angle);
  113. /**
  114. Rotation d'un squelette en degré autour de l'axe X
  115. @param v pointeur sur le squelette
  116. @param angle angle de rotation du squelette en degré
  117. @return aucun
  118. */
  119. void a2ri_skeleton_rotateX_degre (
  120. skeleton * s,
  121. double angle);
  122. /**
  123. Rotation d'un squelette en radian suivant l'axe X de centre (cx,cy,cz)
  124. @param v pointeur sur le squelette
  125. @param angle angle de rotation du squelette en radian
  126. @param centre pointeur sur le point3d servant de centre à la rotation
  127. @return aucun
  128. */
  129. void a2ri_skeleton_rotateX_radian_center (
  130. skeleton * s,
  131. double angle,
  132. const point3d * const centre);
  133. /**
  134. Rotation d'un squelette en degre suivant l'axe X de centre (cx,cy,cz)
  135. @param v pointeur sur le squelette
  136. @param angle angle de rotation du squelette en degre
  137. @param centre pointeur sur le point3d servant de centre à la rotation
  138. @return aucun
  139. */
  140. void a2ri_skeleton_rotateX_degre_center (
  141. skeleton * s,
  142. double angle,
  143. const point3d * const centre);
  144. /**
  145. Rotation d'un squelette en radian autour de l'axe Y
  146. @param v pointeur sur le squelette
  147. @param angle angle de rotation du squelette en radian
  148. @return aucun
  149. */
  150. void a2ri_skeleton_rotateY_radian (
  151. skeleton * s,
  152. double angle);
  153. /**
  154. Rotation d'un squelette en degré autour de l'axe Y
  155. @param v pointeur sur le squelette
  156. @param angle angle de rotation du squelette en degré
  157. @return aucun
  158. */
  159. void a2ri_skeleton_rotateY_degre (
  160. skeleton * s,
  161. double angle);
  162. /**
  163. Rotation d'un squelette en radian suivant l'axe Y de centre (cx,cy,cz)
  164. @param v pointeur sur le squelette
  165. @param angle angle de rotation du squelette en radian
  166. @param centre pointeur sur le point3d servant de centre à la rotation
  167. @return aucun
  168. */
  169. void a2ri_skeleton_rotateY_radian_center (
  170. skeleton * s,
  171. double angle,
  172. const point3d * const centre);
  173. /**
  174. Rotation d'un squelette en degre suivant l'axe Y de centre (cx,cy,cz)
  175. @param v pointeur sur le squelette
  176. @param angle angle de rotation du squelette en degre
  177. @param centre pointeur sur le point3d servant de centre à la rotation
  178. @return aucun
  179. */
  180. void a2ri_skeleton_rotateY_degre_center (
  181. skeleton * s,
  182. double angle,
  183. const point3d * const centre);
  184. /**
  185. Rotation d'un squelette en radian autour de l'axe Z
  186. @param v pointeur sur le squelette
  187. @param angle angle de rotation du squelette en radian
  188. @return aucun
  189. */
  190. void a2ri_skeleton_rotateZ_radian (
  191. skeleton * s,
  192. double angle);
  193. /**
  194. Rotation d'un squelette en degré autour de l'axe Z
  195. @param v pointeur sur le squelette
  196. @param angle angle de rotation du squelette en degré
  197. @return aucun
  198. */
  199. void a2ri_skeleton_rotateZ_degre (
  200. skeleton * s,
  201. double angle);
  202. /**
  203. Rotation d'un squelette en radian suivant l'axe Z de centre (cx,cy,cz)
  204. @param v pointeur sur le squelette
  205. @param angle angle de rotation du squelette en radian
  206. @param centre pointeur sur le point3d servant de centre à la rotation
  207. @return aucun
  208. */
  209. void a2ri_skeleton_rotateZ_radian_center (
  210. skeleton * s,
  211. double angle,
  212. const point3d * const centre);
  213. /**
  214. Rotation d'un squelette en degre suivant l'axe Z de centre (cx,cy,cz)
  215. @param v pointeur sur le squelette
  216. @param angle angle de rotation du squelette en degre
  217. @param centre pointeur sur le point3d servant de centre à la rotation
  218. @return aucun
  219. */
  220. void a2ri_skeleton_rotateZ_degre_center (
  221. skeleton * s,
  222. double angle,
  223. const point3d * const centre);
  224. /**
  225. Rotation d'un squelette en degre suivant l'axe donnée
  226. @param m pointeur sur le squelette
  227. @param angle angle de rotation du squelette en degre
  228. @param axe l'axe de rotation
  229. @return aucun
  230. */
  231. void a2ri_skeleton_rotate_axe_radian (
  232. skeleton * s,
  233. double angle,
  234. const vector3d * const axe);
  235. /**
  236. Ajout des points d'un skeleton dans une partition de l'espace
  237. @param m le squelette
  238. @param sp la partition de l'espace
  239. @return aucun
  240. */
  241. void a2ri_skeleton_space_partition (
  242. const skeleton * const s,
  243. space_partition * sp);
  244. #endif