/*************************************/
/* Auteur : Rémi Synave */
/* Date de création : 17/03/15 */
/* Date de modification : 17/03/15 */
/* Version : 0.4 */
/*************************************/
/***************************************************************************/
/* This file is part of a2ri. */
/* */
/* a2ri is free software: you can redistribute it and/or modify it */
/* under the terms of the GNU Lesser General Public License as published */
/* by the Free Software Foundation, either version 3 of the License, or */
/* (at your option) any later version. */
/* */
/* a2ri is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU Lesser General Public License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public */
/* License along with a2ri. */
/* If not, see . */
/***************************************************************************/
#ifndef SKELETON__H
#define SKELETON__H
#include
#include
#include
#include "util.h"
#include "vertex.h"
#include "edge.h"
#include "space_partition.h"
/**
* \struct skeleton skeleton.h skeleton
* 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.
*/
typedef struct
{
skeleton_vertex *ve;
skeleton_edge *ed;
int nbvertex;
int nbedge;
} skeleton;
/**
Initialisation d'un squelette avec un maillage vide
@param m pointeur sur le squelette
@return aucun
*/
void a2ri_skeleton_init (
skeleton * s);
/**
Libération de l'espace mémoire utilisé
@param m pointeur sur le squelette
*/
void a2ri_skeleton_free (
skeleton * s);
/**
Affichage des caractéristiques générales d'un squelette (sommets et arêtes)
@param m le squelette
@return aucun
*/
void a2ri_skeleton_display (
const skeleton * const s);
/**
Affichage des caractéristiques détaillées d'un squelette (sommets et arêtes et leurs adjacences)
@param m le squelette
@return aucun
*/
void a2ri_skeleton_display_detail (
const skeleton * const s);
/**
Ajout d'un vertex (x,y,z) au squelette
@param m pointeur sur le squelette
@param x coordonnée x du vertex
@param y coordonnée y
@param z coordonnée z
@return 1 si succès, 0 sinon
*/
int a2ri_skeleton_add_vertex (
skeleton * s,
double x,
double y,
double z);
/**
Ajout d'une arête défini par trois points (numéros d'index dans la liste de points) au squelette
@param m pointeur sur le squelette
@param ve1 index du premier point
@param ve2 index du second point
@return 1 si succès, 0 sinon
*/
int a2ri_skeleton_add_edge (
skeleton * s,
int ve1,
int ve2);
/**
Translation du squelette
@param m pointeur sur le squelette à translater
@param delta pointeur sur le vecteur de translation
@return aucun
*/
void a2ri_skeleton_translate (
skeleton * s,
const vector3d * const delta);
/**
Rotation d'un squelette en radian autour de l'axe X
@param v pointeur sur le squelette
@param angle angle de rotation du squelette en radian
@return aucun
*/
void a2ri_skeleton_rotateX_radian (
skeleton * s,
double angle);
/**
Rotation d'un squelette en degré autour de l'axe X
@param v pointeur sur le squelette
@param angle angle de rotation du squelette en degré
@return aucun
*/
void a2ri_skeleton_rotateX_degre (
skeleton * s,
double angle);
/**
Rotation d'un squelette en radian suivant l'axe X de centre (cx,cy,cz)
@param v pointeur sur le squelette
@param angle angle de rotation du squelette en radian
@param centre pointeur sur le point3d servant de centre à la rotation
@return aucun
*/
void a2ri_skeleton_rotateX_center_radian (
skeleton * s,
double angle,
const point3d * const centre);
/**
Rotation d'un squelette en degre suivant l'axe X de centre (cx,cy,cz)
@param v pointeur sur le squelette
@param angle angle de rotation du squelette en degre
@param centre pointeur sur le point3d servant de centre à la rotation
@return aucun
*/
void a2ri_skeleton_rotateX_center_degre (
skeleton * s,
double angle,
const point3d * const centre);
/**
Rotation d'un squelette en radian autour de l'axe Y
@param v pointeur sur le squelette
@param angle angle de rotation du squelette en radian
@return aucun
*/
void a2ri_skeleton_rotateY_radian (
skeleton * s,
double angle);
/**
Rotation d'un squelette en degré autour de l'axe Y
@param v pointeur sur le squelette
@param angle angle de rotation du squelette en degré
@return aucun
*/
void a2ri_skeleton_rotateY_degre (
skeleton * s,
double angle);
/**
Rotation d'un squelette en radian suivant l'axe Y de centre (cx,cy,cz)
@param v pointeur sur le squelette
@param angle angle de rotation du squelette en radian
@param centre pointeur sur le point3d servant de centre à la rotation
@return aucun
*/
void a2ri_skeleton_rotateY_center_radian (
skeleton * s,
double angle,
const point3d * const centre);
/**
Rotation d'un squelette en degre suivant l'axe Y de centre (cx,cy,cz)
@param v pointeur sur le squelette
@param angle angle de rotation du squelette en degre
@param centre pointeur sur le point3d servant de centre à la rotation
@return aucun
*/
void a2ri_skeleton_rotateY_center_degre (
skeleton * s,
double angle,
const point3d * const centre);
/**
Rotation d'un squelette en radian autour de l'axe Z
@param v pointeur sur le squelette
@param angle angle de rotation du squelette en radian
@return aucun
*/
void a2ri_skeleton_rotateZ_radian (
skeleton * s,
double angle);
/**
Rotation d'un squelette en degré autour de l'axe Z
@param v pointeur sur le squelette
@param angle angle de rotation du squelette en degré
@return aucun
*/
void a2ri_skeleton_rotateZ_degre (
skeleton * s,
double angle);
/**
Rotation d'un squelette en radian suivant l'axe Z de centre (cx,cy,cz)
@param v pointeur sur le squelette
@param angle angle de rotation du squelette en radian
@param centre pointeur sur le point3d servant de centre à la rotation
@return aucun
*/
void a2ri_skeleton_rotateZ_center_radian (
skeleton * s,
double angle,
const point3d * const centre);
/**
Rotation d'un squelette en degre suivant l'axe Z de centre (cx,cy,cz)
@param v pointeur sur le squelette
@param angle angle de rotation du squelette en degre
@param centre pointeur sur le point3d servant de centre à la rotation
@return aucun
*/
void a2ri_skeleton_rotateZ_center_degre (
skeleton * s,
double angle,
const point3d * const centre);
/**
Rotation d'un squelette en degre suivant l'axe donnée
@param m pointeur sur le squelette
@param angle angle de rotation du squelette en degre
@param axe l'axe de rotation
@return aucun
*/
void a2ri_skeleton_rotate_axe_radian (
skeleton * s,
double angle,
const vector3d * const axe);
/**
Ajout des points d'un skeleton dans une partition de l'espace
@param m le squelette
@param sp la partition de l'espace
@return aucun
*/
void a2ri_skeleton_space_partition (
const skeleton * const s,
space_partition * sp);
#endif