Salome HOME
Mise à niveau python
[modules/smesh.git] / src / Tools / blocFissure / gmu / quadranglesToShapeNoCorner.py
index 9bbf64d30f53d756a85a8f284aa9a668ae7552b5..bd45e7c258397a07fe91275485d25893fc834df9 100644 (file)
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
+"""Groupe de quadrangles de face transformé en face géométrique par filling"""
 
 import logging
 
 import logging
+import numpy as np
+
+import GEOM
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
+
 from . import initLog
 from . import initLog
-import GEOM
-import math
-import numpy as np
 
 def mydot(a):
 
 def mydot(a):
+  """produit scalaire"""
   return np.dot(a,a)
 
   return np.dot(a,a)
 
-# -----------------------------------------------------------------------------
-# --- groupe de quadrangles de face transformé en face géométrique par filling
-
 def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
   """
   groupe de quadrangles de face transformée en faces géométriques par filling
 def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
   """
   groupe de quadrangles de face transformée en faces géométriques par filling
@@ -51,30 +51,31 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
     isVecteurDefaut = True
     vecteurDefaut = shapeFissureParams['vecteurDefaut']
 
     isVecteurDefaut = True
     vecteurDefaut = shapeFissureParams['vecteurDefaut']
 
-  fillings = []       # les faces reconstituées, découpées selon les arêtes vives
-  noeuds_bords = []   #
-  bords_Partages = [] # contient a la fin les courbes correspondant aux arêtes vives
-  fillconts = []      # les faces reconstituées, sans découpage selon les arêtes vives
-  idFilToCont = []    # index face découpée vers face sans découpe
+  fillings = list()       # les faces reconstituées, découpées selon les arêtes vives
+  noeuds_bords = list()   #
+  bords_Partages = list() # contient a la fin les courbes correspondant aux arêtes vives
+  fillconts = list()      # les faces reconstituées, sans découpage selon les arêtes vives
+  idFilToCont = list()    # index face découpée vers face sans découpe
   iface = 0           # index face découpée
   icont = 0           # index face continue
   iface = 0           # index face découpée
   icont = 0           # index face continue
-  
+  pisur2 = np.pi/2.0
+  pisur4 = np.pi/4.0
+
   allNodeIds = meshQuad.GetNodesId()
   while len(allNodeIds):
     logging.debug("len(allNodeIds): %s ", len(allNodeIds))
     nodeIds = allNodeIds
     for idNode in nodeIds: # rechercher un coin
       elems = meshQuad.GetNodeInverseElements(idNode)
   allNodeIds = meshQuad.GetNodesId()
   while len(allNodeIds):
     logging.debug("len(allNodeIds): %s ", len(allNodeIds))
     nodeIds = allNodeIds
     for idNode in nodeIds: # rechercher un coin
       elems = meshQuad.GetNodeInverseElements(idNode)
-      if len(elems) == 1:
+      if ( len(elems) == 1 ):
         # un coin: un noeud, un element quadrangle
         # 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
+        idStart = idNode # le noeud de coin
+        elemStart = elems[0] # l'élément quadrangle au coin
+        break
     xyz = meshQuad.GetNodeXYZ(idStart)
     logging.debug("idStart %s, coords %s", idStart, str(xyz))
     xyz = meshQuad.GetNodeXYZ(idStart)
     logging.debug("idStart %s, coords %s", idStart, str(xyz))
-  
-    nodelines =[] # on va constituer une liste de lignes de points
+
+    nodelines = list() # on va constituer une liste de lignes de points
     nextLine = True
     ligneFinale = False
     while nextLine:
     nextLine = True
     ligneFinale = False
     while nextLine:
@@ -88,8 +89,8 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
         agauche = True
       ligneIncomplete = True # on commence une ligne de points
       debutLigne = True
         agauche = True
       ligneIncomplete = True # on commence une ligne de points
       debutLigne = True
-      nodeline = []
-      elemline = []
+      nodeline = list()
+      elemline = list()
       while ligneIncomplete: # compléter la ligne de points
         nodeline.append(idNode)
         allNodeIds.remove(idNode)
       while ligneIncomplete: # compléter la ligne de points
         nodeline.append(idNode)
         allNodeIds.remove(idNode)
@@ -153,8 +154,8 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
     longueur = [len(val) for val in nodelines]
     logging.debug("longueur = %s", longueur)
     # on a constitué une liste de lignes de points connexes
     longueur = [len(val) for val in nodelines]
     logging.debug("longueur = %s", longueur)
     # on a constitué une liste de lignes de points connexes
-    logging.debug("dimensions [%s, %s]", len(nodelines),  len(nodeline))   
-    
+    logging.debug("dimensions [%s, %s]", len(nodelines),  len(nodeline))
+
     # stockage des coordonnées dans un tableau numpy
     mat = np.zeros((len(nodelines), len(nodeline), 3))
     for i, ligne in enumerate(nodelines):
     # stockage des coordonnées dans un tableau numpy
     mat = np.zeros((len(nodelines), len(nodeline), 3))
     for i, ligne in enumerate(nodelines):
@@ -162,9 +163,9 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
         mat[i,j] = meshQuad.GetNodeXYZ(nodeId)
     logging.debug("matrice de coordonnées: \n%s",mat)
     logging.debug("dimensions %s", mat.shape)
         mat[i,j] = meshQuad.GetNodeXYZ(nodeId)
     logging.debug("matrice de coordonnées: \n%s",mat)
     logging.debug("dimensions %s", mat.shape)
-    
+
     # recherche d'angles supérieurs a un seuil sur une ligne : angle entre deux vecteurs successifs
     # recherche d'angles supérieurs a un seuil sur une ligne : angle entre deux vecteurs successifs
-    cosmin = math.cos(math.pi/4.)          # TODO: angle reference en paramètre
+    cosmin = np.cos(pisur4)                # TODO: angle reference en paramètre
     vecx = mat[:, 1:,  :] - mat[:, :-1, :] # vecteurs selon direction "x"
     vx0 = vecx[:, :-1, :]                  # vecteurs amont
     vx1 = vecx[:, 1:,  :]                  # vecteurs aval
     vecx = mat[:, 1:,  :] - mat[:, :-1, :] # vecteurs selon direction "x"
     vx0 = vecx[:, :-1, :]                  # vecteurs amont
     vx1 = vecx[:, 1:,  :]                  # vecteurs aval
@@ -189,11 +190,11 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
     rupY = [x for x in range(len(nodelines)-2) if np.prod(ruptureY[x, :])]
     logging.debug("lignes de rupture: %s",rupY)
     if (len(rupX)*len(rupY)) > 0:
     rupY = [x for x in range(len(nodelines)-2) if np.prod(ruptureY[x, :])]
     logging.debug("lignes de rupture: %s",rupY)
     if (len(rupX)*len(rupY)) > 0:
-      logging.critical("""Cas non traité: présence d'angles vifs dans 2 directions, 
+      logging.critical("""Cas non traité: présence d'angles vifs dans 2 directions,
       lors de la reconstitution des faces géométriques dans la zone remaillée""")
       lors de la reconstitution des faces géométriques dans la zone remaillée""")
-    
-    mats = []
-    bordsPartages = []
+
+    mats = list()
+    bordsPartages = list()
     if (len(rupX)> 0):
       rupX.append(mat.shape[1]-1)
       for i, index in enumerate(rupX):
     if (len(rupX)> 0):
       rupX.append(mat.shape[1]-1)
       for i, index in enumerate(rupX):
@@ -223,8 +224,8 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
     else:
       mats.append(mat)
       bordsPartages.append([0,0])         # les indices différents de 0 correspondent à des bords partagés
     else:
       mats.append(mat)
       bordsPartages.append([0,0])         # les indices différents de 0 correspondent à des bords partagés
-    
-    curvconts = []
+
+    curvconts = list()
     for nmat, amat in enumerate(mats):
       logging.debug("dimensions matrice %s: %s", nmat, amat.shape)
       nbLignes = amat.shape[1] # pas de rupture, ou rupture selon des colonnes: on transpose
     for nmat, amat in enumerate(mats):
       logging.debug("dimensions matrice %s: %s", nmat, amat.shape)
       nbLignes = amat.shape[1] # pas de rupture, ou rupture selon des colonnes: on transpose
@@ -232,13 +233,13 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
       if len(rupY) > 0 :       # rupture selon des lignes: pas de transposition
         nbLignes = amat.shape[0]
         nbCols = amat.shape[1]
       if len(rupY) > 0 :       # rupture selon des lignes: pas de transposition
         nbLignes = amat.shape[0]
         nbCols = amat.shape[1]
-      curves = []
-      noeudsBords = []
+      curves = list()
+      noeudsBords = list()
       for i in range(4):
         noeudsBords.append([])
       k = 0
       for i in range(nbLignes):
       for i in range(4):
         noeudsBords.append([])
       k = 0
       for i in range(nbLignes):
-        nodeList = []
+        nodeList = list()
         for j in range(nbCols):
           #logging.debug("point[%s,%s] = (%s, %s, %s)",i,j,amat[i,j,0], amat[i,j,1], amat[i,j,2])
           if len(rupY) > 0 : # pas de transposition
         for j in range(nbCols):
           #logging.debug("point[%s,%s] = (%s, %s, %s)",i,j,amat[i,j,0], amat[i,j,1], amat[i,j,2])
           if len(rupY) > 0 : # pas de transposition
@@ -266,7 +267,7 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
         curve = geompy.MakeInterpol(nodeList, False, False)
         #name = "curve_%d"%i
         #geomPublish(initLog.debug,  curve, name )
         curve = geompy.MakeInterpol(nodeList, False, False)
         #name = "curve_%d"%i
         #geomPublish(initLog.debug,  curve, name )
-        if len(curvconts) == 0 or len(curves) > 0: # éliminer les doublons de la surface sans découpe 
+        if len(curvconts) == 0 or len(curves) > 0: # éliminer les doublons de la surface sans découpe
           curvconts.append(nodeList)
         curves.append(curve)
       if bordsPartages[nmat][0] :
           curvconts.append(nodeList)
         curves.append(curve)
       if bordsPartages[nmat][0] :
@@ -285,7 +286,7 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
       if centreFondFiss is not None:
         logging.debug("orientation filling a l'aide du centre de fond de fissure")
         vecteurDefaut = geompy.MakeVector(centreFondFiss, vertex)
       if centreFondFiss is not None:
         logging.debug("orientation filling a l'aide du centre de fond de fissure")
         vecteurDefaut = geompy.MakeVector(centreFondFiss, vertex)
-        
+
       if not isVecteurDefaut:
         pointIn_x = 0.0
         pointIn_y = 0.0
       if not isVecteurDefaut:
         pointIn_x = 0.0
         pointIn_y = 0.0
@@ -304,7 +305,7 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
           cdg = geompy.MakeVertex(pointIn_x, pointIn_y, pointIn_z)
           logging.debug("orientation filling par point intérieur %s", (pointIn_x, pointIn_y, pointIn_z))
           vecteurDefaut = geompy.MakeVector(cdg, vertex)
           cdg = geompy.MakeVertex(pointIn_x, pointIn_y, pointIn_z)
           logging.debug("orientation filling par point intérieur %s", (pointIn_x, pointIn_y, pointIn_z))
           vecteurDefaut = geompy.MakeVector(cdg, vertex)
-        
+
       if 'convexe' in shapeFissureParams:
         isConvexe = shapeFissureParams['convexe']
         logging.debug("orientation filling par indication de convexité %s", isConvexe)
       if 'convexe' in shapeFissureParams:
         isConvexe = shapeFissureParams['convexe']
         logging.debug("orientation filling par indication de convexité %s", isConvexe)
@@ -313,11 +314,11 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
           vecteurDefaut = geompy.MakeVector(cdg, vertex)
         else:
           vecteurDefaut = geompy.MakeVector(vertex, cdg)
           vecteurDefaut = geompy.MakeVector(cdg, vertex)
         else:
           vecteurDefaut = geompy.MakeVector(vertex, cdg)
-     
+
       if vecteurDefaut is not None:
         geomPublish(initLog.debug, normal, "normFillOrig%d"%iface)
         geomPublish(initLog.debug, vecteurDefaut, "fromInterieur%d"%iface)
       if vecteurDefaut is not None:
         geomPublish(initLog.debug, normal, "normFillOrig%d"%iface)
         geomPublish(initLog.debug, vecteurDefaut, "fromInterieur%d"%iface)
-        if geompy.GetAngleRadians(vecteurDefaut, normal) > math.pi/2.0:
+        if ( geompy.GetAngleRadians(vecteurDefaut, normal) > pisur2 ):
           filling = geompy.ChangeOrientation(filling)
       geomPublish(initLog.debug,  filling, "filling%d"%iface )
       #geompy.ExportBREP(filling, "filling.brep")
           filling = geompy.ChangeOrientation(filling)
       geomPublish(initLog.debug,  filling, "filling%d"%iface )
       #geompy.ExportBREP(filling, "filling.brep")
@@ -327,14 +328,14 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
       idFilToCont.append(icont)
       bords_Partages += bordsPartages
       logging.debug("bords_Partages = %s", bords_Partages)
       idFilToCont.append(icont)
       bords_Partages += bordsPartages
       logging.debug("bords_Partages = %s", bords_Partages)
-      pass # --- loop on mats
+    # --- loop on mats
     # --- reconstruction des faces continues à partir des listes de noeuds
     #     les courbes doivent suivre la courbure pour éviter les oscillations
     if icont == iface - 1: # pas de découpe, on garde la même face
       fillcont = fillings[-1]
     else:
       nbLignes = len(curvconts[0])
     # --- reconstruction des faces continues à partir des listes de noeuds
     #     les courbes doivent suivre la courbure pour éviter les oscillations
     if icont == iface - 1: # pas de découpe, on garde la même face
       fillcont = fillings[-1]
     else:
       nbLignes = len(curvconts[0])
-      curves = []
+      curves = list()
       for i in range(nbLignes):
         nodes = [curvconts[j][i] for j in range(len(curvconts))]
         curve = geompy.MakeInterpol(nodes, False, False)
       for i in range(nbLignes):
         nodes = [curvconts[j][i] for j in range(len(curvconts))]
         curve = geompy.MakeInterpol(nodes, False, False)
@@ -342,7 +343,7 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
       fillcont = geompy.MakeFilling(geompy.MakeCompound(curves), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
     geomPublish(initLog.debug,  fillcont, "filcont%d"%icont )
     fillconts.append(fillcont)
       fillcont = geompy.MakeFilling(geompy.MakeCompound(curves), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
     geomPublish(initLog.debug,  fillcont, "filcont%d"%icont )
     fillconts.append(fillcont)
-    icont = icont+1   
-    pass   # --- loop while there are remaining nodes
-  
+    icont = icont+1
+    # --- loop while there are remaining nodes
+
   return fillings, noeuds_bords, bords_Partages, fillconts, idFilToCont
   return fillings, noeuds_bords, bords_Partages, fillconts, idFilToCont