This commit is contained in:
GERALD NICOLAS 2021-03-03 17:41:55 +01:00
parent 2e62464296
commit 6bccb8f04c

View File

@ -30,62 +30,64 @@ from .fissError import fissError
def creeZoneDefautMaillage(maillagesSains, shapeDefaut, tailleDefaut, def creeZoneDefautMaillage(maillagesSains, shapeDefaut, tailleDefaut,
nomZones, coordsNoeudsFissure): 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 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. ou à partir d'un jeu de points et d'une distance d'influence.
@param maillagesSains : (le maillage de l'objet initial, booleen isHexa) @param maillagesSains : (le maillage de l'objet initial, booleen isHexa)
@param shapeDefaut : objet géométrique représentant la fissure @param shapeDefaut : objet géométrique représentant la fissure
(selon les cas, un point central, ou une shape plus complexe, (selon les cas, un point central, ou une shape plus complexe, dont on ne garde que les vertices)
dont on ne garde que les vertices)
@param tailleDefaut : distance d'influence définissant la zone à remailler: @param tailleDefaut : distance d'influence définissant la zone à remailler:
tous les éléments du maillage initial qui pénètrent dans cette zone tous les éléments du maillage initial qui pénètrent dans cette zone
sont détectés 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 @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, ...) @coordsNoeudsFissure : jeu de points donné par une liste (x1,y1,z1, x2,y2,z2, ...)
@return (origShapes, verticesShapes, dmoyen) liste id subShapes, @return (origShapes, verticesShapes, dmoyen) liste id subShapes, listes noeuds de bord, longueur arête moyenne bord
listes noeuds de bord, longueur arête moyenne bord
""" """
logging.info("start") logging.info("start")
logging.debug("distance d'influence (tailleDefaut) = %f" % tailleDefaut)
#print (" shapeDefaut : {}".format(shapeDefaut))
#print (" nomZones : {}".format(nomZones))
maillageSain = maillagesSains[0] maillageSain = maillagesSains[0]
isHexa = maillagesSains[1] isHexa = maillagesSains[1]
lists = maillageSain.CreateHoleSkin(tailleDefaut, shapeDefaut, nomZones, coordsNoeudsFissure) lists = maillageSain.CreateHoleSkin(tailleDefaut, shapeDefaut, nomZones, coordsNoeudsFissure)
logging.debug("lists={}".format(lists)) #print("lists = {}".format(lists))
trace = True trace = True
origShapes = list() origShapes = list()
verticesShapes = list() verticesShapes = list()
cumul = 0 # somme des distances carrées entre point ordonnés (taille des arêtes) cumul = 0. # somme des distances carrées entre point ordonnés (taille des arêtes)
nb = 0 # nombre d'arêtes évaluées nb = 0 # nombre d'arêtes évaluées
for aList in lists: for aList in lists:
aShape = aList[0] aShape = aList[0]
origShapes.append(aShape) origShapes.append(aShape)
logging.debug(" shapeId {}".format(aShape))
vertices = list() vertices = list()
xyz0 = None xyz0 = maillageSain.GetNodeXYZ(aList[1])
for inode in range(1, len(aList)): ###vertices.append(geompy.MakeVertex(xyz0[0], xyz0[1], xyz0[2])) pourquoi pas le premier ?
xyz = maillageSain.GetNodeXYZ(aList[inode]) #print (" node 0 {} : {}".format(aList[1],xyz0))
if xyz0 is not None: #print (xyz0)
cumul += distance2(xyz, xyz0) for node in aList[2:]:
nb += 1 xyz = maillageSain.GetNodeXYZ(node)
#print (" node {} : {}".format(node,xyz))
cumul += distance2(xyz, xyz0)
xyz0 = xyz 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])) vertices.append(geompy.MakeVertex(xyz[0], xyz[1], xyz[2]))
pass nb += len(aList) - 2
verticesShapes.append(vertices) 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.<br>" texte = "La zone à remailler n'est pas détectée correctement.<br>"
texte += "Cause possible :<ul>" texte += "Cause possible :<ul>"
texte += "<li>La distance d'influence est trop petite. " texte += "<li>La distance d'influence est trop petite. "
texte += "L'ordre de grandeur minimal correspond à la taille des mailles du maillage sain dans la zone à remailler.</li></ul>" texte += "L'ordre de grandeur minimal correspond à la taille des mailles du maillage sain dans la zone à remailler.</li></ul>"
raise fissError(traceback.extract_stack(),texte) 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 return origShapes, verticesShapes, dmoyen