/*************************************/
/* Auteur : Rémi Synave */
/* Date de création : 01/03/07 */
/* Date de modification : 15/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 BOUNDING_BOX__H
#define BOUNDING_BOX__H
#include
#include
#include
#include
#include
#include "util.h"
#include "model.h"
#include "point.h"
#include "matrix.h"
/**
Calcul des boites englobantes (parallélépipèdes) des faces de la liste
@param m le modèle
@param faces tableau contenant les numéros des faces pour lesquels on veut les boites englobantes
@param nbfaces taille du tableau
@param ptmin pointeur sur le tableau contenant les points (xmin,ymin,zmin) des boites englobantes
@param ptmax pointeur sur le tableau contenant les points (xmax,ymax,zmax) des boites englobantes
**/
void a2ri_vf_axis_aligned_bounding_box (
const vf_model * const m,
const int * const faces,
int nbfaces,
point3d ** ptmin,
point3d ** ptmax);
/**
Calcul des sphères englobantes des faces de la liste en utilisant les fastball de Ritter
@param m le modèle
@param faces tableau contenant les numéros des faces pour lesquels on veut les sphères englobantes
@param nbfaces taille du tableau
@param listcentre pointeur sur le tableau de point3d contenant les centres de sphères englobantes
@param listradius pointeur sur le tableau contenant les rayons des sphères englobantes
**/
void a2ri_vf_bounding_ball_ritter (
const vf_model * const m,
const int * const faces,
int nbfaces,
point3d ** listcentre,
double ** listradius);
/**
Calcul des sphères englobantes des faces de la liste
@param m le modèle
@param faces tableau contenant les numéros des faces pour lesquels on veut les sphères englobantes
@param nbfaces taille du tableau
@param listcentre pointeur sur le tableau de point3d contenant les centres de sphères englobantes
@param listradius pointeur sur le tableau contenant les rayons des sphères englobantes
**/
void a2ri_vf_bounding_ball_minimale (
const vf_model * const m,
const int * const faces,
int nbfaces,
point3d ** listcentre,
double ** listradius);
/**
Calcul l'oriented bounding box du maillage
@param m le modèle
@param newbasex pointeur sur le vecteur "X" de la nouvelle base dans laquelle l'oriented bounding box est représenté
@param newbasey pointeur sur le vecteur "Y" de la nouvelle base dans laquelle l'oriented bounding box est représenté
@param newbasez pointeur sur le vecteur "Z" de la nouvelle base dans laquelle l'oriented bounding box est représenté
@param ptmin pointeur sur le point3d contenant le coin inférieur de l'oriented bounding box
@param ptmax pointeur sur le point3d contenant le coin supérieur de l'oriented bounding box
**/
void a2ri_vf_oriented_bounding_box (
const vf_model * const m,
vector3d * newbasex,
vector3d * newbasey,
vector3d * newbasez,
point3d * ptmin,
point3d * ptmax);
/**
Calcul des sphères englobantes des faces de la liste
@param m le modèle
@param faces tableau contenant les numéros des faces pour lesquels on veut les sphères englobantes
@param nbfaces taille du tableau
@param listcentre pointeur sur le tableau de point3d contenant les centres de sphères englobantes
@param listradius pointeur sur le tableau contenant les rayons des sphères englobantes
**/
void a2ri_vef_bounding_ball_minimale (
const vef_model * const m,
const int * const faces,
int nbfaces,
point3d ** listcentre,
double ** listradius);
/**
Calcul des sphères englobantes des faces de la liste
@param m le modèle
@param faces tableau contenant les numéros des faces pour lesquels on veut les sphères englobantes
@param nbfaces taille du tableau
@param listcentre pointeur sur le tableau de point3d contenant les centres de sphères englobantes
@param listradius pointeur sur le tableau contenant les rayons des sphères englobantes
**/
void point3d_bounding_ball_minimale (
const point3d * const faces,
int nbfaces,
point3d ** listcentre,
double ** listradius);
#endif