Tile Class Reference

Représente un "tile" du mesh qui est construit pendant la chartification. More...

#include <Tile.hh>

List of all members.

Accès aux divers itérateurs

class Tile_Vertex_Iter
class Tile_Face_Iter
std::vector< unsigned int
>::const_iterator 
neighbour_tiles_begin () const
 Donne une iterateur sur l' id du premier tile voisin.
std::vector< unsigned int
>::const_iterator 
neighbour_tiles_end () const
 Donne une iterateur sur l'id du dernier tile voisin.
std::list< Vertex >::const_iterator interior_vertices_begin () const
 Donne une iterateur sur la première noeud qui n'a pas des voisins dans d'autres tiles.
std::list< Vertex >::const_iterator interior_vertices_end () const
 Donne une iterateur sur la dernière noeud qui n'a pas des voisins dans d'autres tiles.
std::list< Vertex >::const_iterator boundary_vertices_begin () const
 Donne une iterateur sur la première noeud qui a des voisins dans d'autres tiles.
std::list< Vertex >::const_iterator boundary_vertices_end () const
 Donne une iterateur sur la dernière noeud qui a des voisins dans d'autres tiles.
Tile_Vertex_Iter vertices_begin ()
 Donne une iterateur qui parcourt tous les noeuds appartenant dans cette région.
Tile_Face_Iter faces_begin (OriginalMesh *mesh)
 Retourne un iterateur qui parcourt tous les faces qui ont au moins un noeuds à l'intérieur de la région.
Tile_Face_Iter faces_begin (OriginalMesh *mesh, OriginalMesh::FaceHandle &fh)
 Retourne un iterateur qui parcourt tous les faces qui ont au moins un noeuds à l'intérieur de la région.

Public Member Functions

 Tile (const Vertex tile_seed, const unsigned int tile_id)
 Constructeur.
 ~Tile ()
 Destructeur.
Seed get_seed () const
 Retourne le seed de la région.
const unsigned int get_id () const
 Retourne l'identifeur de la région.
BaseMesh::VertexHandle get_base_mesh_vertex () const
 Retourne le sommet dans le maillage de base corréspondant au tile.
void set_base_mesh_vertex (BaseMesh::VertexHandle const &bm_vertex)
 Met à jour le sommet dans le maillage de base corréspondant au tile.
void clear ()
 Remettre la région à l'état initial.
void add_vertex (Vertex v, bool is_on_tile_boundary, bool is_on_mesh_boundary)
 Ajouter le noeud v à la région.
void change_to_boundary (Vertex v)
 Changer status d'un noeud (intérieur ou sur la frontière avec une autre région).
Vertex reposition_seed (const OriginalMesh &mesh)
 Repositionner le seed au noeud le plus proche au centre de la région.
void boundary_parametrization (OriginalMesh &om, const OriginalMesh &bm, const vector< Tile * > &tiles, map< int, unsigned int > &matrix_pos, SparseMatrix &matrix, double *b_ret_x, double *b_ret_y, OriginalMesh::Point &ret_map_centroid)
 Calculer les conditions aux limites et la solution de départ pour utilisé dans la paramétrisation initiale.
double calculate_error (OriginalMesh &mesh)
 Calculer l'erreur normale décrite dans Guskov, p.9.
void find_neighbours_orders (OriginalMesh &m)
 Calculce les voisins ordonnonées.
bool connected_neighbours (OriginalMesh &m, unsigned int germe1, unsigned int germe2)
 Vérifier si les deux sommets dans la région Omega_b sont connectés ou pas.
Vérification des conditions topologiques
bool check_conditions_EB (Vertex &new_seed, const OriginalMesh &mesh)
 Verifie la condition nommée EB dans le papier de Guskov.
bool check_conditions_NZ (Vertex &new_seed, OriginalMesh &mesh)
 Verifie la condition nommée NZ dans le papier de Guskov.
bool check_conditions_MB (Vertex &new_seed, OriginalMesh &mesh)
 Vérifie la condition nommée MB.
bool check_conditions_MN (Vertex &new_seed, OriginalMesh &mesh)
 Vérifie la condition nommée MN.

Static Public Member Functions

static void calculate_boundary_lengths (OriginalMesh &m, const vector< Tile * > &tiles)
 Calculce les longueurs des frontières entre les régions.

Private Member Functions

void calculate_boundary_neighbours (OriginalMesh const &m)
 Créer un map de connectivité pour les sommets sur le bord de la tile.

Private Attributes

const unsigned int id
Seed seed
BaseMesh::VertexHandle base_mesh_vertex
bool boundary_neighbours_calculated
std::map< int, std::list<
int > * > 
boundary_neighbours
list< Vertexinterior_vertices
 Contient tous les noeuds qui sont à l'intérieur de la région.
list< Vertexboundary_vertices
 Contient tous les noeuds qui ont au moins un voisin appartenant à une autre région.
unsigned int no_vertices_on_mesh_boundary
 Nombre de noeuds qui se trouve sur des frontières de la surface du mesh.
vector< unsigned int > neighbour_tiles
 Liste des tiles (identifiée par leurs id) qui sont voisins à ce tile.

Static Private Attributes

static TableauBiDim< double > tile_boundary_length


Detailed Description

Représente un "tile" du mesh qui est construit pendant la chartification.

Elle est realisee en utilisant std::list qui contient tous les noeuds apartennant au tile. En plus le seed est memorise.


Constructor & Destructor Documentation

Tile::Tile ( const Vertex  tile_seed,
const unsigned int  tile_id 
)

Constructeur.

Parameters:
tile_seed,: seed de la nouvelle région
tile_id,: id de la région (pas nécessairement unique)

Tile::~Tile (  )  [inline]

Destructeur.


Member Function Documentation

void Tile::calculate_boundary_neighbours ( OriginalMesh const &  m  )  [private]

Créer un map de connectivité pour les sommets sur le bord de la tile.

Pour chaque sommet du tile ayant un voisin dans une autre tile (sommet dit "sur le bord"), cette méthode trouve les sommets voisins sur le bord. Il stocke dans le map boundary_neighbours la liste de ces voisins pour chaque sommet sur le bord.

Parameters:
m Le mesh

std::vector< unsigned int >::const_iterator Tile::neighbour_tiles_begin (  )  const

Donne une iterateur sur l' id du premier tile voisin.

std::vector< unsigned int >::const_iterator Tile::neighbour_tiles_end (  )  const

Donne une iterateur sur l'id du dernier tile voisin.

std::list< Vertex >::const_iterator Tile::interior_vertices_begin (  )  const

Donne une iterateur sur la première noeud qui n'a pas des voisins dans d'autres tiles.

std::list< Vertex >::const_iterator Tile::interior_vertices_end (  )  const

Donne une iterateur sur la dernière noeud qui n'a pas des voisins dans d'autres tiles.

std::list< Vertex >::const_iterator Tile::boundary_vertices_begin (  )  const

Donne une iterateur sur la première noeud qui a des voisins dans d'autres tiles.

std::list< Vertex >::const_iterator Tile::boundary_vertices_end (  )  const

Donne une iterateur sur la dernière noeud qui a des voisins dans d'autres tiles.

Tile_Vertex_Iter Tile::vertices_begin (  ) 

Donne une iterateur qui parcourt tous les noeuds appartenant dans cette région.

Tile_Face_Iter Tile::faces_begin ( OriginalMesh mesh  ) 

Retourne un iterateur qui parcourt tous les faces qui ont au moins un noeuds à l'intérieur de la région.

Parameters:
mesh mesh dans lequel ce Tile représente une région

Tile_Face_Iter Tile::faces_begin ( OriginalMesh mesh,
OriginalMesh::FaceHandle &  fh 
)

Retourne un iterateur qui parcourt tous les faces qui ont au moins un noeuds à l'intérieur de la région.

Parameters:
mesh mesh dans lequel ce Tile représente une région
fh face handle du triangle qui doit être parcouru au premier

Seed Tile::get_seed (  )  const [inline]

Retourne le seed de la région.

const unsigned int Tile::get_id (  )  const [inline]

Retourne l'identifeur de la région.

BaseMesh::VertexHandle Tile::get_base_mesh_vertex (  )  const [inline]

Retourne le sommet dans le maillage de base corréspondant au tile.

void Tile::set_base_mesh_vertex ( BaseMesh::VertexHandle const &  bm_vertex  )  [inline]

Met à jour le sommet dans le maillage de base corréspondant au tile.

void Tile::clear (  ) 

Remettre la région à l'état initial.

L'appel vide les listes des noeuds, seulement le seed est gardé.

void Tile::add_vertex ( Vertex  v,
bool  is_on_tile_boundary,
bool  is_on_mesh_boundary 
)

Ajouter le noeud v à la région.

Parameters:
v noeud à ajouter à la région
is_on_tile_boundary doit être mis à vrai ssi noeud v a un voisin appartenant à une autre région (si ce n'est pas encore certain mettre à faux et utiliser change_to_boundary plus tard)
is_on_mesh_boundary doit être mis à vrai ssi noeud v se trouve sur une frontière du mesh

void Tile::change_to_boundary ( Vertex  v  ) 

Changer status d'un noeud (intérieur ou sur la frontière avec une autre région).

Noeud v était mémorisé comme noeud intérieur mais en cours de l'algorithme on a vu qu'il a des voisins appartenant déjà à d'autres régions Attention: Comportement indéfini si vertex n'était pas encore ajouté à la région (avec add_vertex)!

Parameters:
v vertex à changer

Vertex Tile::reposition_seed ( const OriginalMesh mesh  ) 

Repositionner le seed au noeud le plus proche au centre de la région.

Réalise "repositionning" décrit dans l'algo de Guskov, p 9

Returns:
le nouveau seed.

void Tile::boundary_parametrization ( OriginalMesh om,
const OriginalMesh bm,
const vector< Tile * > &  tiles,
map< int, unsigned int > &  matrix_pos,
SparseMatrix matrix,
double *  b_ret_x,
double *  b_ret_y,
OriginalMesh::Point ret_map_centroid 
)

Calculer les conditions aux limites et la solution de départ pour utilisé dans la paramétrisation initiale.

Parameters:
om Maillage de départ
bm Maillage de base
tiles Les tiles
matrix_pos L'indexation utilisé dans l'assemblage du système linéaire
matrix La matrice du système
b_ret_x Tableau dans laquelle la coordonnée x du second membre du système sera stockée (paramètre de rétour)
b_ret_y Tableau dans laquelle la coordonnée y du second membre du système sera stockée (paramètre de rétour)
ret_map_centroid Centroid des points dans R^2 corréspondants aux point sur le frontière du tile, utilisé comme solution initiale (paramètre de rétour)

void Tile::calculate_boundary_lengths ( OriginalMesh m,
const vector< Tile * > &  tiles 
) [static]

Calculce les longueurs des frontières entre les régions.

Calcule la longueur des frontières entre tous les paires de régions. Nous utilisons la définition de la frontière entre deux régions donnée dans Klein et al "Vertex-Based Triangulation of Meshes", page 4 Le résultat sera mémorisé dans tile_boundary_length

Precondition:
les vertices du mesh doivent avoir les propiétés suivantes déjà calculées:
  • (unsigned int) tile_id (indiqué par TILE_NUMBER_ID, la région à laquelle le noeud appartient)
  • (double) distance (indiqué par DISTANCE_NUMBER_ID, la distance entre le noeud et son seed)
Parameters:
m Le mesh
tiles vector contenant les différents Tile
See also:
tile_boundary_length

bool Tile::check_conditions_EB ( Vertex new_seed,
const OriginalMesh mesh 
)

Verifie la condition nommée EB dans le papier de Guskov.

Si la region contient des noeuds qui se trouvent sur la limitation de la surface (verifié avec mesh.is_boundary(vertex) ) et le seed n'en est pas un la fonction cherche un noeud quelconque sur la limitation dans cette region.

bool Tile::check_conditions_NZ ( Vertex new_seed,
OriginalMesh mesh 
)

Verifie la condition nommée NZ dans le papier de Guskov.

Si la region contient des noeuds sur des limitations de la surface cette fonction verifie que ces trous ne causent pas de genus. Un trou est un genus ssi il se trouve complètement à l'intérieur de la région. Ayant déjà vérifié la condition EB le seed se trouve forcement sur la frontière d'un trou. On verifie donc d'abord si ce trou forme un genus en parcourant la frontière du trou: Ssi on sort de la région le trou n'est pas un genus.

bool Tile::check_conditions_MB ( Vertex new_seed,
OriginalMesh mesh 
)

Vérifie la condition nommée MB.

La condition est vérifié si le bord du tile consiste d'une seule component connexe. La vérification est faite en parcourant les noeuds dans boundary_vertices qui sont connecté à un noeud donné à l'aide du methode calculate_boundary_neighbours. Si on visite dans cette façon tous les noeuds dans boundary_vertices, la condition est vérifiée, sinon on crée un nouvel germe sur un noeud voisin du germe courant.

Precondition:
Les conditions EB et NZ sont vérifiées pour ce tile.
Parameters:
new_seed Vertex dans lequel le methode stocke le nouvel germe en cas de violation de la condition (si on renvoie false)
mesh Le mesh
Returns:
true si la condition est vérifiée, false sinon

bool Tile::check_conditions_MN ( Vertex new_seed,
OriginalMesh mesh 
)

Vérifie la condition nommée MN.

La condition est vérifié si le bord de chaque tile avec chacun de ces tiles voisins consiste en un seul component connexe. La vérification est faite en d'abord groupant les noeuds dans boundary_vertices après les tiles dans lesquelles ils sont des voisins. Ensuite, pour chaque groupe, un component connexe est trouvé en parcourant les noeuds connecté à un noeud donné (à l'aide du methode calculate_boundary_neighbours). Si ce componant ne contient pas tous les noeuds du group, on a trouvé une violation. Dans ce cas, on met un nouvel germe sur un noeud dans le plus court du component connexe parcouru et un autre component connexe. Ceci est une approximation des longeurs des courbes de frontières associées.

Precondition:
Les conditions EB et NZ sont vérifiées pour ce tile.
Parameters:
new_seed Vertex dans lequel le methode stocke le nouvel germe en cas de violation de la condition (si on renvoie false)
mesh Le mesh
Returns:
true si la condition est vérifiée, false sinon

double Tile::calculate_error ( OriginalMesh mesh  ) 

Calculer l'erreur normale décrite dans Guskov, p.9.

void Tile::find_neighbours_orders ( OriginalMesh m  ) 

Calculce les voisins ordonnonées.

Parcourir la frontière en mémorisant les tiles voisins rencontrés

Parameters:
m Le maillage de départ
Precondition:
neighbour_tiles contient les régions voisines de cette région ordonnées par un parcour de la frontière

bool Tile::connected_neighbours ( OriginalMesh m,
unsigned int  germe1,
unsigned int  germe2 
)

Vérifier si les deux sommets dans la région Omega_b sont connectés ou pas.

Parameters:
m Le maillage de départ
germe1 un sommet
germe2 autre sommet
Returns:
vrai ssi les deux sommets germe1 et germe2 sont connecté dans la région Omaga_b


Friends And Related Function Documentation

friend class Tile_Vertex_Iter [friend]

friend class Tile_Face_Iter [friend]


Member Data Documentation

const unsigned int Tile::id [private]

Identifieur unique de la région

Seed Tile::seed [private]

VertexHandle indiquant le seed de cette région

BaseMesh::VertexHandle Tile::base_mesh_vertex [private]

Sommet dans maillage de base correspondant au tile

bool Tile::boundary_neighbours_calculated [private]

Indique si le map boundary_neighbours et à jour

See also:
calculate_boundary_neighbours

std::map< int, std::list< int >* > Tile::boundary_neighbours [private]

Map de connectivité mise à jour par la methode calculate_boundary_neighbours

See also:
calculate_boundary_neighbours

TableauBiDim< double > Tile::tile_boundary_length [static, private]

Après l'appel de calculate_boundary_lengths cet array contient les longueurs des frontières entre les régions

See also:
calculate_boundary_lengths

list<Vertex> Tile::interior_vertices [private]

Contient tous les noeuds qui sont à l'intérieur de la région.

Ce sont les noeuds qui n'ont pas de voisins appartenant à une autre région. intersect(interior_vertices, boundary_vertices) = {} (Attention: boundary ici ne dit rien sur les frontière de la surface du mesh!)

See also:
boundary_vertices

list<Vertex> Tile::boundary_vertices [private]

Contient tous les noeuds qui ont au moins un voisin appartenant à une autre région.

intersect(interior_vertices, boundary_vertices) = {} (Attention: boundary ici ne dit rien sur les frontière de la surface du mesh!)

See also:
interior_vertices

no_vertices_on_mesh_boundary

unsigned int Tile::no_vertices_on_mesh_boundary [private]

Nombre de noeuds qui se trouve sur des frontières de la surface du mesh.

( = #{v | mesh.is_boundary(v) et v element de la région} ) Attention: mesh_boundary = noeuds qui se trouve sur la surface du mesh (cad un arc adjacent est sur la frontiere)

See also:
boundary_vertices = noeuds qui ont des voisins à l'exterieur de la région (cad dans d'autres régions)

vector< unsigned int > Tile::neighbour_tiles [private]

Liste des tiles (identifiée par leurs id) qui sont voisins à ce tile.


The documentation for this class was generated from the following files:
Generated on Fri Jun 15 17:25:00 2007 for GuskovRemeshing by  doxygen 1.5.2