From 6bccb8f04c3a22603b979907e7da284b46b48f44 Mon Sep 17 00:00:00 2001 From: GERALD NICOLAS Date: Wed, 3 Mar 2021 17:41:55 +0100 Subject: [PATCH] =?utf8?q?M=C3=A9nage?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../blocFissure/gmu/creeZoneDefautMaillage.py | 48 ++++++++++--------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/src/Tools/blocFissure/gmu/creeZoneDefautMaillage.py b/src/Tools/blocFissure/gmu/creeZoneDefautMaillage.py index 169b0d963..f0269ea3d 100644 --- a/src/Tools/blocFissure/gmu/creeZoneDefautMaillage.py +++ b/src/Tools/blocFissure/gmu/creeZoneDefautMaillage.py @@ -30,62 +30,64 @@ from .fissError import fissError def creeZoneDefautMaillage(maillagesSains, shapeDefaut, tailleDefaut, nomZones, coordsNoeudsFissure): - """ - Identification de la zone à remailler, opérations sur le maillage - de l'objet sain. + """Identification de la zone à remailler, opérations sur le maillage de l'objet sain. + La zone à remailler est définie à partir d'un objet géométrique ou à partir d'un jeu de points et d'une distance d'influence. @param maillagesSains : (le maillage de l'objet initial, booleen isHexa) @param shapeDefaut : objet géométrique représentant la fissure - (selon les cas, un point central, ou une shape plus complexe, - dont on ne garde que les vertices) + (selon les cas, un point central, ou une shape plus complexe, dont on ne garde que les vertices) @param tailleDefaut : distance d'influence définissant la zone à remailler: tous les éléments du maillage initial qui pénètrent dans cette zone sont détectés @param nomZones : préfixe des noms de groupes créés dans le maillage initial. S'il y a un groupe de noeuds @coordsNoeudsFissure : jeu de points donné par une liste (x1,y1,z1, x2,y2,z2, ...) - @return (origShapes, verticesShapes, dmoyen) liste id subShapes, - listes noeuds de bord, longueur arête moyenne bord + @return (origShapes, verticesShapes, dmoyen) liste id subShapes, listes noeuds de bord, longueur arête moyenne bord """ logging.info("start") - + logging.debug("distance d'influence (tailleDefaut) = %f" % tailleDefaut) + #print (" shapeDefaut : {}".format(shapeDefaut)) + #print (" nomZones : {}".format(nomZones)) + maillageSain = maillagesSains[0] isHexa = maillagesSains[1] lists = maillageSain.CreateHoleSkin(tailleDefaut, shapeDefaut, nomZones, coordsNoeudsFissure) - logging.debug("lists={}".format(lists)) + #print("lists = {}".format(lists)) trace = True origShapes = list() verticesShapes = list() - cumul = 0 # somme des distances carrées entre point ordonnés (taille des arêtes) - nb = 0 # nombre d'arêtes évaluées + cumul = 0. # somme des distances carrées entre point ordonnés (taille des arêtes) + nb = 0 # nombre d'arêtes évaluées for aList in lists: aShape = aList[0] origShapes.append(aShape) - logging.debug(" shapeId {}".format(aShape)) vertices = list() - xyz0 = None - for inode in range(1, len(aList)): - xyz = maillageSain.GetNodeXYZ(aList[inode]) - if xyz0 is not None: - cumul += distance2(xyz, xyz0) - nb += 1 + xyz0 = maillageSain.GetNodeXYZ(aList[1]) + ###vertices.append(geompy.MakeVertex(xyz0[0], xyz0[1], xyz0[2])) pourquoi pas le premier ? + #print (" node 0 {} : {}".format(aList[1],xyz0)) + #print (xyz0) + for node in aList[2:]: + xyz = maillageSain.GetNodeXYZ(node) + #print (" node {} : {}".format(node,xyz)) + cumul += distance2(xyz, xyz0) xyz0 = xyz - #logging.debug(" node %s %s", aList[inode], xyz) + #logging.debug(" node %s %s", node, xyz) vertices.append(geompy.MakeVertex(xyz[0], xyz[1], xyz[2])) - pass + nb += len(aList) - 2 verticesShapes.append(vertices) - pass + #print ("nb = {}".format(nb)) + #print ("cumul = {}".format(cumul)) - if (nb == 0) : + if (nb == 0): texte = "La zone à remailler n'est pas détectée correctement.
" texte += "Cause possible :" raise fissError(traceback.extract_stack(),texte) - dmoyen = math.sqrt(cumul/nb) # ~ taille de l'arête moyenne du maillage global + dmoyen = math.sqrt(cumul/float(nb)) # ~ taille de l'arête moyenne du maillage global return origShapes, verticesShapes, dmoyen -- 2.30.2