![]() |
Moka kernel
|
Go to the source code of this file.
Functions | |
bool | canExtrudeHalfCell (CDart *ADart, int ADim, int AMarkToExtrude=-1) |
bool | canExtrudeCell (CDart *ADart, int ADim) |
int | getExtrusionDimension (CDart *ADart) |
CDart * | topoExtrude (CDart *ADart, int ADim, bool AExtrusionWithAdjacentSews, int AMarkExtruded=-1, int ADirectInfoIndex=-1) |
virtual CDart * | extrudeByNormal (CDart *ADart, int ADim, bool AExtrusionWithAdjacentSews, TCoordinate AExtrusionCoef, int AMarkToExtrude=-1, int AMarkExtruded=-1) |
int | extrudeByNormalMarkedCells (int AMarkNumber, int ADim, bool AExtrusionWithAdjacentSews, TCoordinate AExtrusionCoef) |
int | intuitiveExtrudeByNormalMarkedCells (int AMarkNumber, bool AExtrusionWithAdjacentSews, TCoordinate AExtrusionCoef) |
bool | canExtrudeByPath (CDart *ADart, int ADim, CDart *APath) |
virtual CDart * | extrudeByPath (CDart *ADart, int ADim, CDart *APath, bool AExtrusionWithAdjacentSews, int AMarkExtruded=-1, int ADirectInfoIndex=-1) |
virtual int | extrudeByPathMarkedCells (int AMarkNumber, int ADim, CDart *APath, bool AExtrusionWithAdjacentSews) |
bool | canExtrudeByRevolution (CDart *ADart, int ADim, bool AClosed) |
virtual CDart * | createRevolutionPath (bool AClosed, int ANbEdges) |
void | destroyRevolutionPath (CDart *ADart) |
virtual CDart * | extrudeByRevolution (CDart *ADart, int ADim, bool AClosed, int ANbEdges, bool AExtrusionWithAdjacentSews, int AMarkExtruded=-1, int ADirectInfoIndex=-1) |
virtual int | extrudeByRevolutionMarkedCells (int AMarkNumber, int ADim, bool AClosed, int ANbEdges, bool AExtrusionWithAdjacentSews) |
virtual void | markCellsToBeExtrudedByNormal (int ADim, int AMarkNumberSrce, int AMarkNumberDest) |
int | extrudeByNormalMarkedCells (int AMarkNumber, int ADim, int AMarkTreated, bool AExtrusionWithAdjacentSews, TCoordinate AExtrusionCoef) |
bool canExtrudeByPath | ( | CDart * | ADart, |
int | ADim, | ||
CDart * | APath | ||
) |
Teste si l'extrusion de la cellule de dimension ADim incidente à ADart selon le chemin donné par APath est possible.
ADart | Un brin de la carte incident à la cellule à extruder |
ADim | Une dimension (1 ou 2) |
APath | Un brin de la carte incident au chemin d'extrusion |
bool canExtrudeByRevolution | ( | CDart * | ADart, |
int | ADim, | ||
bool | AClosed | ||
) |
Teste si l'extrusion de la cellule de dimension ADim incidente à ADart autour d'un axe est possible.
ADart | Un brin de la carte incident à la cellule à extruder |
ADim | Une dimension (1 ou 2) |
AClosed | Un booléen indiquant si la révolution est complète (angle de 360°) |
bool canExtrudeCell | ( | CDart * | ADart, |
int | ADim | ||
) |
Teste si la cellule de dimension ADim incidente à ADart (ORBIT_CELL[ADim]) peut être extrudée. C'est le cas si tous les brins qui la constituent sont ADim+1-libres ou si tous les brins qui la constituent sont ADim-libres.
Si l'extrusion est possible et si au moins un brin de la cellule est ADim-cousu, cela signifie que la cellule va être dupliquée avant l'extrusion. Par exemple pour extruder une face d'un volume, les brins de la face étant 2-cousus il faut créer de nouveaux brins et les 3-coudre à la face avant d'appliquer l'extrusion sur la demi-face nouvellement créée.
ADart | Un brin de la carte |
ADim | Une dimension (0, 1 ou 2) |
bool canExtrudeHalfCell | ( | CDart * | ADart, |
int | ADim, | ||
int | AMarkToExtrude = -1 |
||
) |
Teste si la demi-cellule de dimension ADim incidente à ADart (ORBIT_INF[ADim]) peut être extrudée. C'est le cas si tous les brins qui la constituent sont ADim-libres.
Si AMarkToExtrude est positif ou nul, il indique les cellules qui doivent être extrudées en parallèle. Ce paramètre est utilisé par la méthode 'canExtrudeByPath'.
ADart | Un brin de la carte |
ADim | Une dimension (0, 1 ou 2) |
AMarkToExtrude | Un numéro de marque |
|
virtual |
Crée un chemin d'extrusion composé de ANbEdges arêtes, ouvert ou fermé selon la valeur de AClosed. Ce chemin est utilisé pour simuler l'extrusion par révolution autour d'un axe.
AClosed | Un booléen indiquant si la révolution est complète (angle de 360°) |
ANbEdges | Le nombre d'arêtes du chemin |
void destroyRevolutionPath | ( | CDart * | ADart | ) |
Détruit un chemin de révolution créé avec la méthode 'createRevolutionPath'.
ADart | Un brin du chemin de révolution |
isIsolatedPolyline(ADart)
|
virtual |
Extrude la cellule de dimension ADim incidente à ADart en s'appuyant sur la méthode 'topoExtrude'.
Le paramètre AMarkToExtrude est un numéro de marque indiquant quelles cellules doivent être extrudées. Ce paramètre est utile lors du calcul des plongements.
Pour la signification des paramètre AExtrusionWithAdjacentSews et AMarkExtruded, se reporter à la méthode 'topoExtrude'.
ADart | Un brin de la carte |
ADim | Une dimension (0, 1 ou 2) |
AExtrusionWithAdjacentSews | Un booléen |
AExtrusionCoef | Un TCoordinate fixant le coefficient d'extrusion. |
AMarkToExtrude | Un numéro de marque |
AMarkExtruded | Un numéro de marque |
canExtrudeCell(ADart, ADim)
int extrudeByNormalMarkedCells | ( | int | AMarkNumber, |
int | ADim, | ||
bool | AExtrusionWithAdjacentSews, | ||
TCoordinate | AExtrusionCoef | ||
) |
Extrude lorsque c'est possible les cellules de dimension ADim qui sont marquées avec la marque AMarkNumber.
Cette méthode s'appuie sur la méthode protégée 'extrudeByNormalMarkedCells(int, int, int, bool)'.
AMarkNumber | Un numéro de marque |
ADim | Une dimension (0, 1 ou 2) |
AExtrusionWithAdjacentSews | Un booléen |
AExtrusionCoef | Un TCoordinate fixant le coefficient d'extrusion. |
|
protected |
Extrude lorsque c'est possible les cellules de dimension ADim qui sont marquées avec la marque AMarkNumber.
Le résultat obtenu dépend de la valeur que donne la méthode 'getExtrusionWithAdjacentSews'.
Si AMarkTreated est positif ou nul, les cellules extrudées sont marquées comme telles avec la marque AMarkTreated. Ceci permet de ne pas extruder plusieurs fois la même cellule dans des dimensions différentes (voir méthode 'intuitiveExtrudeMarkedCells').
Remarque: Comme CGMapGeneric ne traite pas les plongements, aucune vérification sur les brins sélectionnés n'est effectuée. Par exemple, en dimension 2 si un brin d'une face est sélectionné et si sont alpha0 l'est aussi, on ne peut pas effectuer le calcul des plongements car il y alpha ambiguïté sur le sens de la normale de la face à extruder. Cependant, topologiquement il n'y alpha aucun problème. Cette méthode devra donc être surchargée dans les classes dérivant de CGMapGeneric.
AMarkNumber | Un numéro de marque |
ADim | Une dimension (0, 1 ou 2) |
AMarkTreated | Un numéro de marque |
AExtrusionWithAdjacentSews | Un booléen |
AExtrusionCoef | Un TCoordinate fixant le coefficient d'extrusion. |
|
virtual |
Extrude la cellule de dimension ADim incidente à ADart selon le chemin donné par APath (orbite O1) en s'appuyant sur la méthode 'topoExtrude' appelée plusieurs fois.
Le paramètre ADirectInfoIndex est un indice de champ directInfo dans lequel sont mémorisées les ADim-coutures des brins avant extrusion. Ce paramètre est utile pour la couture des cellules extrudées adjacentes si le chemin est fermé ou si le brin initial est au milieu du chemin. En effet, dans ce cas là la cellule extrudée se retrouve isolée et lorsque ses ex-voisines sont à leur tour extrudées, on ne peut pas déterminer à quelle cellules les cellules issues de l'extrusion doivent être cousues.
Pour la signification des paramètre AExtrusionWithAdjacentSews et AMarkExtruded, se reporter à la méthode 'topoExtrude'.
ADart | Un brin de la carte incident à la cellule à extruder |
ADim | Une dimension (1 ou 2) |
APath | Un brin de la carte incident au chemin d'extrusion |
AExtrusionWithAdjacentSews | Un booléen |
AMarkExtruded | Un numéro de marque |
ADirectInfoIndex | Un indice de champ directInfo |
canExtrudeByPath(ADart, ADim, APath)
|
virtual |
Extrude lorsque c'est possible selon le chemin donné les cellules de dimension ADim qui sont marquées avec la marque AMarkNumber.
Le résultat dépend obtenu de la valeur que donne la méthode 'getExtrusionWithAdjacentSews'.
AMarkNumber | Un numéro de marque |
ADim | Une dimension (1 ou 2) |
APath | Un brin de la carte incident au chemin d'extrusion |
AMarkExtruded | Un numéro de marque |
|
virtual |
Extrude la cellule de dimension ADim incidente à ADart selon autour d'un axe. La méthode crée un chemin constitué de ANbEdges arêtes qui est fermé ou ouvert selon la valeur de AClosed puis appelle la méthode 'extrudeByPath'.
Pour la signification des paramètres AMarkExtruded et ADirectInfoIndex, se reporter à la méthode 'extrudeByPath'.
ADart | Un brin de la carte incident à la cellule à extruder |
ADim | Une dimension (1 ou 2) |
AClosed | Un booléen indiquant si la révolution est complète (angle de 360°) |
ANbEdges | Le nombre de sections à créer |
AExtrusionWithAdjacentSews | Un booléen |
AMarkExtruded | Un numéro de marque |
ADirectInfoIndex | Un indice de champ directInfo |
canExtrudeByRevolution(ADart, ADim, AClosed) ANbEdges >= 3
|
virtual |
Extrude par révolution lorsque c'est possible les cellules de dimension ADim qui sont marquées avec la marque AMarkNumber.
Le résultat dépend obtenu de la valeur que donne la méthode 'getExtrusionWithAdjacentSews'.
AMarkNumber | Un numéro de marque |
ADim | Une dimension (1 ou 2) |
AClosed | Un booléen indiquant si la révolution est complète (angle de 360°) |
ANbEdges | Le nombre de sections à créer |
AMarkExtruded | Un numéro de marque |
int getExtrusionDimension | ( | CDart * | ADart | ) |
Donne la plus petite dimension D telle que la cellule dimension D incidente à ADart puisse être extrudée. Si l'extrusion est impossible, la méthode retourne la valeur 3.
ADart | Un brin de la carte |
int intuitiveExtrudeByNormalMarkedCells | ( | int | AMarkNumber, |
bool | AExtrusionWithAdjacentSews, | ||
TCoordinate | AExtrusionCoef | ||
) |
Extrude lorsque c'est possible les cellules marquées avec la marque AMarkNumber. La méthode essaie d'abord d'extruder les sommets marqués, puis les arêtes et en enfin les faces.
AMarkNumber | Un numéro de marque |
AExtrusionWithAdjacentSews | Un booléen |
|
protectedvirtual |
Marque entièrement les cellules de dimension ADim qui doivent être extrudées. Cette méthode ne fait rien d'autre qu'appeler 'markIncidentCells', mais elle peut être surchargée par les classes qui dérivent de CGMapGeneric pour ne marquer que la moitié des cellules à extruder, ceci afin de résoudre les problèmes d'orientation de l'extrusion dans le cadre de l'extrusion selon un vecteur normal.
ADim | Une dimension (0, 1 ou 2) |
AMarkNumberSrce | Un numéro de marque source |
AMarkNumberDest | Un numéro de marque destination |
CDart* topoExtrude | ( | CDart * | ADart, |
int | ADim, | ||
bool | AExtrusionWithAdjacentSews, | ||
int | AMarkExtruded = -1 , |
||
int | ADirectInfoIndex = -1 |
||
) |
Extrude la cellule de dimension ADim incidente à ADart.
Si AMarkExtruded est positif ou nul et si la méthode 'getExtrusionWithAdacentSews' renvoie la valeur 'vrai', la cellule extrudée est cousue aux cellules adjacentes déjà extrudées. Si ADirectInfoIndex est positif ou nul, les cellules adjacentes sont déterminées à partir du champ directInfo correspondant (ce champ mémorise simplement l'image par alpha-ADim de chaque brin). Ceci est particulièrement utile pour la méthode 'extrudeByPath' lorsque le chemin est fermé ou lorsque le brin initial est au milieu du chemin. En effet, dans ce cas là les cellules sont isolées avant extrusion d'où l'impossibilité de retrouver les cellules adjacentes qui ont déjà été extrudées (voir la méthode 'extrudeByPath' pour plus d'informations).
Ces cellules de dimension ADim+1 peuvent facilement être repérées car les cellules de dimension ADim à partir desquelles on les alpha obtenues sont marquées avec la marque AMarkExtruded.
ADart | Un brin de la carte |
ADim | Une dimension (0, 1 ou 2) |
AExtrusionWithAdjacentSews | Un booléen pour indiquer comment doit s'effectuer l'extrusion. Si vrai', les cellules adjacentes extrudées en parallèle sont cousues entre elles, sinon elles ne sont pas cousues entre elles |
AMarkExtruded | Un numéro de marque |
ADirectInfoIndex | Un indice de champ directInfo |
canExtrudeCell(ADart, ADim)