Moka kernel
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
gmg-merge.hh File Reference

Go to the source code of this file.

Functions

int getMergeDimension (CDart *ADart)
 
bool canMerge (CDart *ADart1, CDart *ADart2, int ADim)
 
void merge (CDart *ADart1, CDart *ADart2, int ADim, bool ADeleteDarts=false)
 
int isolateMarkedCells (int AMarkNumber, int ADim, bool ADeleteDarts=false)
 
int intuitiveIsolateMarkedCells (int AMarkNumber, bool ADeleteDarts=false)
 
int mergeMarkedCells (int AMarkNumber, int ADim, bool ADeleteDarts=false)
 
int intuitiveMergeMarkedCells (int AMarkNumber, bool ADeleteDarts=false)
 
int isolateMarkedCells (int AMarkNumber, int ADim, bool ADeleteDarts, bool AVerif, int AMarkTreated=-1)
 
void markCellsToBeIsolated (int AMarkSource, int ADim, int AMarkDestination, int AMarkTreated=-1)
 

Function Documentation

bool canMerge ( CDart *  ADart1,
CDart *  ADart2,
int  ADim 
)

Teste si les deux cellules de dimension ADim désignées par les brins ADart1 et ADart2 peuvent être fusionnées.

Parameters
ADart1Un pointeur sur un premier brin
ADart2Un pointeur sur un deuxième brin
ADimUne dimension
Returns
Un booléen indiquant si les deux cellules peuvent être fusionnées.
int getMergeDimension ( CDart *  ADart)

Calcule la plus grande dimension pour laquelle ADart est cousu avec un autre brin. Si le brin n'est cousu ni par alpha0, ni par alpha1, ni par alpha2, ni par alpha3, la valeur retournée est -1.

Remarque: Cette méthode n'est plus utilisée par les méthodes intuitiveIsolateMarkedCells et intuitiveMergeMarkedCells.

Parameters
ADartUn brin de la carte
Returns
La plus grande dimension pour laquelle le brin n'est pas libre

La valeur retournée vaut 3, 2, 1, 0 ou -1.

int intuitiveIsolateMarkedCells ( int  AMarkNumber,
bool  ADeleteDarts = false 
)

Isole lorsque cela est possible les cellules dont un brin au moins est marqué. La méthode procède en 3 passes, avec priorité aux cellules de dimension élevée (faces).

Parameters
AMarkNumberUn numéro de marque
ADeleteDartsUn booléen indiquant si les cellules isolées doivent être détruites
Returns
Le nombre de cellules isolées
int intuitiveMergeMarkedCells ( int  AMarkNumber,
bool  ADeleteDarts = false 
)

Fusionne lorsque cela est possible (avec leurs cellule incidente) les cellules dont un brin au moins est marqué. Les fusions sont faites en 3 passes, avec priorité aux fusions de cellules de dimension élevée (volumes). Lors de chaque passe, les cellules qui doivent être isolées sont déterminées par la méthode protégée 'markCellsToBeIsolated'.

Parameters
AMarkNumberUn numéro de marque
ADeleteDartsUn booléen indiquant si la fusion doit se faire en supprimant des brins
Returns
Le nombre de fusions effectuées
int isolateMarkedCells ( int  AMarkNumber,
int  ADim,
bool  ADeleteDarts = false 
)

Isole lorsque cela est possible les cellules de dimension ADim en fusionnant entre elles les cellules de dimension ADim+1 qui leurs sont incidentes.

Parameters
AMarkNumberUn numéro de marque
ADimUne dimension (0, 1 ou 2)
ADeleteDartsUn booléen indiquant si les cellules isolées doivent être détruites
Returns
Le nombre de cellules isolées
int isolateMarkedCells ( int  AMarkNumber,
int  ADim,
bool  ADeleteDarts,
bool  AVerif,
int  AMarkTreated = -1 
)
protected

Cette méthode auxiliaire isole (uniquement lorsque cela est possible si AVerif=='vrai') les cellules de dimension ADim dont un brin au moins est sélectionné, c'est-à-dire qu'elle fusionne les cellules de dimension ADim+1 incidentes aux cellules de dimension ADim marquées. Lorsqu'une cellule est isolée, elle est marquée comme traitée avec la marque AMarkTreated (si AMarkTreated>=0).

Si AVerif=='faux', les cellules marquées doivent impérativement pouvoir être isolées.

La méthode est utilisée par: isolateMarkedCells(int, int, bool), intuitiveIsolateMarkedCells(int, bool), mergeMarkedCells(int, int, bool) et intuitiveMergeMarkedCells(int, bool).

Parameters
AMarkNumberUn numéro de marque indiquant les brins sélectionnés
ADimLa dimension des cellules qui doivent être isolées
ADeleteDartsUn booléen indiquant si les cellules doivent être supprimées une fois isolées
AVerifUn booléen indiquant si pour chaque cellule marquée il faut vérifier si l'opération d'isolement est possible
AMarkTreatedUn numéro de marque indiquant (si positif ou nul) les brins déjà traités et dont il ne faut donc pas se préoccuper
Returns
Le nombre de cellules isolées

AMarkTreated!=AMarkNumber AVerif=='faux' ou toutes les cellules marquées peuvent être isolées

void markCellsToBeIsolated ( int  AMarkSource,
int  ADim,
int  AMarkDestination,
int  AMarkTreated = -1 
)
protected

Marque avec la marque AMarkDestination tous les brins de chaque cellule de dimension ADim qui peut être isolée (c'est-à-dire qui est ADim-cousue et de degré inférieur ou égal à 2) et qui est incidente à des cellules de dimension ADim+1 dont un brin au moins est marqué avec la marque AMarkSource. Voir le corps de la méthode pour plus de détail.

La méthode est utilisée par: mergeMarkedCells(int, int, bool) et intuitiveMergeMarkedCells(int, bool).

Parameters
AMarkSourceUn numéro de marque
ADimUne dimension (celle des cellules à isoler)
AMarkDestinationUn numéro de marque
AMarkTreatedUn numéro de marque indiquant (si positif ou nul) les brins déjà traités, et dont il ne faut donc pas se préoccuper

Aucun brin n'est marqué avec la marque AMarkDestination 0 <= ADim <= 2

void merge ( CDart *  ADart1,
CDart *  ADart2,
int  ADim,
bool  ADeleteDarts = false 
)

Fusionne les deux cellules de dimension ADim désignées par les brins ADart1 et ADart2.

Parameters
ADart1Un pointeur sur un premier brin
ADart2Un pointeur sur un deuxième brin
ADimUne dimension
ADeleteDartsUn booléen indiquant s'il faut supprimer les brins correspondant à la cellule de dimension ADim-1 située entre les cellules de dimension ADim incidentes à ADart1 et ADart2

canMerge(ADart1, ADart2, ADim)

int mergeMarkedCells ( int  AMarkNumber,
int  ADim,
bool  ADeleteDarts = false 
)

Fusionne lorsque cela est possible (avec leur cellule incidente) les cellules dont un brin au moins est marqué. Les cellules de dimension ADim-1 qui doivent être isolées sont déterminées par la méthode protégée 'markCellsToBeIsolated'.

Parameters
AMarkNumberUn numéro de marque
ADimUne dimension (1, 2 ou 3)
ADeleteDartsUn booléen indiquant si la fusion doit se faire en supprimant des brins
Returns
Le nombre de fusions effectuées