-
- """ Cette fonction permet de générer une liste de lignes à partir du
- maillage support passé en paramètre. On démarre à partir d'un coin
- simple et on parcourt tout les noeuds pour former une ligne. Soit la
- figure ci-dessous :
-
- 1_____4_____7 On part du coin N1, et on cherche les noeuds
- | | | successifs tels que [1, 2, 3]. Lorsqu'on arrive
- | 1 | 3 | arrive sur le noeud de fin de ligne N3, on repart
- | | | du noeud précédent du premier élément (E1), à
- 2_____5_____8 savoir le noeud N4. On suit les noeuds succesifs
- | | | [4, 5, 6] comme précédemment et ainsi de suite.
- | 2 | 4 | Lorsqu'on arrive sur le dernier noeud de la
- | | | dernière ligne, à savoir le noeud N9, on considère
- 3_____6_____9 que toutes les lignes sont créées.
-
- La fonction retourne une liste de lignes utilisées par la suite.
- """
-
- logging.info("start")
-
- allNodeIds = maillageSupport.GetNodesId()
- while len(allNodeIds):
- nodeIds = allNodeIds
- for idNode in nodeIds: # rechercher un coin
- elems = maillageSupport.GetNodeInverseElements(idNode)
- if len(elems) == 1:
- # un coin: un noeud, un element quadrangle
- elem = elems[0]
- break;
- idStart = idNode # le noeud de coin
- elemStart = elem # l'élément quadrangle au coin
- xyz = maillageSupport.GetNodeXYZ(idStart)
- logging.debug("idStart %s, coords %s", idStart, str(xyz))
-
- nodelines =[] # on va constituer une liste de lignes de points
- nextLine = True
- ligneFinale = False
- while nextLine:
- logging.debug("--- une ligne")
- idNode = idStart
- elem = elemStart
- if ligneFinale:
- agauche = False # sens de parcours des 4 noeuds d'un quadrangle
- nextLine = False
+
+ """ Cette fonction permet de générer une liste de lignes à partir du
+ maillage support passé en paramètre. On démarre à partir d'un coin
+ simple et on parcourt tout les noeuds pour former une ligne. Soit la
+ figure ci-dessous :
+
+ 1_____4_____7 On part du coin N1, et on cherche les noeuds
+ | | | successifs tels que [1, 2, 3]. Lorsqu'on arrive
+ | 1 | 3 | arrive sur le noeud de fin de ligne N3, on repart
+ | | | du noeud précédent du premier élément (E1), à
+ 2_____5_____8 savoir le noeud N4. On suit les noeuds succesifs
+ | | | [4, 5, 6] comme précédemment et ainsi de suite.
+ | 2 | 4 | Lorsqu'on arrive sur le dernier noeud de la
+ | | | dernière ligne, à savoir le noeud N9, on considère
+ 3_____6_____9 que toutes les lignes sont créées.
+
+ La fonction retourne une liste de lignes utilisées par la suite.
+ """
+
+ logging.info("start")
+
+ allNodeIds = maillageSupport.GetNodesId()
+ while len(allNodeIds):
+ nodeIds = allNodeIds
+ for idNode in nodeIds: # rechercher un coin
+ elems = maillageSupport.GetNodeInverseElements(idNode)
+ if len(elems) == 1:
+ # un coin: un noeud, un element quadrangle
+ elem = elems[0]
+ idNode_c = idNode
+ break
+ idStart = idNode_c # le noeud de coin
+ elemStart = elem # l'élément quadrangle au coin
+ xyz = maillageSupport.GetNodeXYZ(idStart)
+ logging.debug("idStart %s, coords %s", idStart, str(xyz))
+
+ nodelines = list() # on va constituer une liste de lignes de points
+ nextLine = True
+ ligneFinale = False
+ while nextLine:
+ logging.debug("--- une ligne")
+ idNode = idStart
+ elem = elemStart
+ if ligneFinale:
+ agauche = False # sens de parcours des 4 noeuds d'un quadrangle
+ nextLine = False
+ else:
+ agauche = True
+ ligneIncomplete = True # on commence une ligne de points
+ debutLigne = True
+ nodeline = list()
+ elemline = list()
+ while ligneIncomplete: # compléter la ligne de points
+ nodeline.append(idNode)
+ allNodeIds.remove(idNode)
+ elemline.append(elem)
+ nodes = maillageSupport.GetElemNodes(elem)
+ i_aux = nodes.index(idNode) # repérer l'index du noeud courant (i_aux) dans l'élément quadrangle (0 a 3)
+ if agauche: # déterminer le noeud suivant (j_aux) et celui opposé (k_aux) dans le quadrangle
+ if i_aux < 3:
+ j_aux = i_aux+1
+ else:
+ j_aux = 0
+ if j_aux < 3:
+ k_aux = j_aux+1
+ else:
+ k_aux = 0
+ else:
+ if i_aux > 0:
+ j_aux = i_aux -1
+ else:
+ j_aux = 3
+ if j_aux > 0:
+ k_aux = j_aux -1
+ else:
+ k_aux = 3
+ isuiv = nodes[j_aux] # noeud suivant
+ iapres = nodes[k_aux] # noeud opposé
+ if debutLigne:
+ debutLigne = False
+ # précédent a trouver, dernière ligne : précédent au lieu de suivant
+ if agauche:
+ if i_aux > 0:
+ iprec = nodes[i_aux -1]
+ else:
+ iprec = nodes[3]
+ idStart = iprec
+ elems3 = maillageSupport.GetNodeInverseElements(iprec)
+ if len(elems3) == 1: # autre coin
+ ligneFinale = True