# --- inventaire des faces de peau coupées par la fissure
- ptEdgeFond, fsFissuExt, edFisExtPe, edFisExtPi, \
- facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, ptFisExtPi, \
+ ptEdgeFond, fsFissuExt, edFisExtPe, edFisExtPi, facesPeaux, edCircPeau, \
+ gpedgeBord, gpedgeVifs, edFissPeau, ptFisExtPi, \
edgeRadFacePipePeau, facesPipePeau = \
construitFissureGenerale_b( partitionsPeauFissFond, \
edgesPipeFiss, edgesFondFiss, wireFondFiss, aretesVivesC, \
# --- maillage faces de peau
meshesFacesPeau = mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut, \
- facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, \
+ facesPeaux, edCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, \
bordsLibres, grpEdgesPeauFissureExterne, grpAretesVives, \
edgesCircPipeGroup, dmoyen, rayonPipe, nbsegRad, \
mailleur, nro_cas)
edFisExtPi = [ list() for _ in range(nbFacesFilling)] # pour chaque face [edge commun au pipe des faces de fissure externes]
facesPeaux = [None for _ in range(nbFacesFilling)] # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes)
edCircPeau = [ list() for _ in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
- ptCircPeau = [ list() for _ in range(nbFacesFilling)] # pour chaque face de peau : [subshape point sur edge circulaire aux débouchés du pipe]
gpedgeBord = [None for _ in range(nbFacesFilling)] # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
gpedgeVifs = [None for _ in range(nbFacesFilling)] # pour chaque face de peau : groupes subshape des edges aux arêtes vives entre fillings
edFissPeau = [ list() for _ in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
edFisExtPi[ifil] = dataPPFF['edgesFissExtPipe']
facesPeaux[ifil] = dataPPFF['facePeau']
edCircPeau[ifil] = dataPPFF['edgesCircPeau']
- ptCircPeau[ifil] = dataPPFF['verticesCircPeau']
gpedgeBord[ifil] = dataPPFF['groupEdgesBordPeau']
gpedgeVifs[ifil] = dataPPFF['bordsVifs']
edFissPeau[ifil] = dataPPFF['edgesFissurePeau']
geomPublish(initLog.debug, avc, name, nro_cas)
return ptEdgeFond, fsFissuExt, edFisExtPe, edFisExtPi, facesPeaux, edCircPeau, \
- ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, ptFisExtPi, \
+ gpedgeBord, gpedgeVifs, edFissPeau, ptFisExtPi, \
edgeRadFacePipePeau, facesPipePeau
# --- edges de la face de peau partagées avec la face de fissure
edgesFissurePeau = identifieEdgesPeau_c(verticesPipePeau, facePeau, edgesListees, verticesCircPeau)
- return (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau,
- edgesCircPeau, verticesCircPeau, groupEdgesBordPeau,
+ return (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau, \
+ edgesCircPeau, groupEdgesBordPeau, \
bordsVifs, edgesFissurePeau, aretesVivesCoupees)
nro_cas=None):
"""Identification précise des edges et disques des faces de peau selon index extremité fissure"""
logging.info('start')
+ logging.info("Traitement des arêtes de '%s'", facePeau.GetName())
for face in facesPeauSorted[:-1]: # la ou les faces débouchantes, pas la grande face de peau
logging.debug("examen face debouchante circulaire")
sharedVertices = geompy.GetSharedShapesMulti([face, edgesPeauFondIn[j_aux_0]], geompy.ShapeType["VERTEX"])
nameFace = "facePipePeau_{}".format(i_aux)
nameVert = "endEdgeFond_{}".format(i_aux)
- nameEdge = "edgeRadFacePipePeau_{}".format(i_aux)
facesPipePeau[i_aux] = face
endsEdgeFond[i_aux] = sharedVertices[0]
geomPublish(initLog.debug, face, nameFace, nro_cas)
for edge in edgesFace:
if geompy.MinDistance(edge, sharedVertices[0]) < 1e-3:
edgeRadFacePipePeau[i_aux] = edge
+ nameEdge = "edgeRadFacePipePeau_{}".format(i_aux)
geomPublish(initLog.debug, edge, nameEdge, nro_cas)
break
# --- edges elliptiques de la face de peau et points de jonction de la face externe de fissure
- logging.info("Traitement des arêtes de '%s'", facePeau.GetName())
- edgesCircPeau = [None for _ in range(len(facesPipePeau))]
- verticesCircPeau = [None for _ in range(len(facesPipePeau))]
+ logging.info('Nombre de faces : len(facesPipePeau) = %d', len(facesPipePeau))
+ edgesCircPeau = list()
+ verticesCircPeau = list()
for i_aux,fcirc in enumerate(facesPipePeau):
- logging.info(". Partage avec la face '%s'", fcirc.GetName())
+ # Arêtes
edges = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["EDGE"])
- grpEdgesCirc = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
- geompy.UnionList(grpEdgesCirc, edges)
- edgesCircPeau[i_aux] = grpEdgesCirc
- name = "edgeCirc_{}".format(i_aux)
- geomPublishInFather(initLog.always, facePeau, grpEdgesCirc, name)
+ groupe = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
+ geompy.UnionList(groupe, edges)
+ geomPublishInFather(initLog.always, facePeau, groupe, "edgeCirc_{}".format(i_aux))
+ edgesCircPeau.append(groupe)
edgesListees = edgesListees + edges
+ # Sommets
vertices = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["VERTEX"])
- grpVertCircPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["VERTEX"])
- geompy.UnionList(grpVertCircPeau, vertices)
- verticesCircPeau[i_aux] = grpVertCircPeau
- name = "pointEdgeCirc_{}".format(i_aux)
- geomPublishInFather(initLog.info, facePeau, grpVertCircPeau, name)
+ groupe = geompy.CreateGroup(facePeau, geompy.ShapeType["VERTEX"])
+ geompy.UnionList(groupe, vertices)
+ geomPublishInFather(initLog.info, facePeau, groupe, "point(s)EdgeCirc_{}".format(i_aux))
+ verticesCircPeau.append(groupe)
- logging.info('==> Nombre de sommets : len(verticesCircPeau) = %d', len(verticesCircPeau))
+ logging.info("==> Nombre de groupes d'arêtes : len(edgesCircPeau) = %d", len(edgesCircPeau))
+ logging.info("==> Nombre de groupes de sommets : len(verticesCircPeau) = %d", len(verticesCircPeau))
return edgesCircPeau, verticesCircPeau
"""edges de bord de la face de peau"""
logging.info('start')
+ # Liste des arêtes de bord
edgesFilling = geompy.ExtractShapes(fillingFaceExterne, geompy.ShapeType["EDGE"], False)
+ logging.info('Détermination des arêtes de bord à partir des %d arêtes de fillingFaceExterne', len(edgesFilling))
edgesBords = list()
for i_aux, edge in enumerate(edgesFilling):
edgepeau = geompy.GetInPlace(facePeau, edge)
if geompy.ShapeInfo(edgepeau)['EDGE'] > 1:
logging.debug(" EDGES multiples")
l_edges = geompy.ExtractShapes(edgepeau, geompy.ShapeType["EDGE"], False)
- edgesBords += l_edges
- edgesListees += l_edges
+ edgesBords.extend(l_edges)
+ edgesListees.extend(l_edges)
else:
logging.debug(" EDGE")
edgesBords.append(edgepeau)
edgesListees.append(edgepeau)
+ logging.info('==> Nombre d arêtes de bord : len(edgesBords) = %d', len(edgesBords))
groupEdgesBordPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
geompy.UnionList(groupEdgesBordPeau, edgesBords)
bordsVifs = None
if aretesVivesC is not None:
- logging.debug("identification des bords vifs par GetInPlace")
+ logging.info("identification des bords vifs par GetInPlace")
bordsVifs = geompy.GetInPlace(facePeau, aretesVivesC)
if bordsVifs is None:
logging.debug("pas d'identification des bords vifs par GetInPlace: test par distance")
if ( dist < 0.001 ):
edvifs.append(edge)
break
- if len(edvifs) >0:
+ if edvifs:
+ logging.info('==> Nombre d arêtes de bord vif : len(edvifs) = %d', len(edvifs))
bordsVifs = geompy.CreateGroup(facePeau,geompy.ShapeType["EDGE"])
for edge in edvifs:
geompy.AddObject(bordsVifs, geompy.GetSubShapeID(facePeau, edge))
logging.info('start')
logging.info("Traitement des arêtes de '%s'", facePeau.GetName())
logging.info('Nombre de sommets : len(verticesPipePeau) = %d', len(verticesPipePeau))
- #logging.info('verticesPipePeau = %s', verticesPipePeau)
- logging.info('Nombre de sommets : len(verticesCircPeau) = %d', len(verticesCircPeau))
- #logging.info('verticesCircPeau = %s', verticesCircPeau)
edgesPeau = geompy.ExtractShapes(facePeau, geompy.ShapeType["EDGE"], False)
logging.info('Nombre total d arêtes de la peau : len(edgesPeau) = %d', len(edgesPeau))
edges = substractSubShapes(facePeau, edgesPeau, edgesListees)
- edgesFissurePeau = list()
-# --- au moins une extrémité du pipe sur cette face de peau
+ l_edge_cercle = list()
+# --- au moins une extrémité du pipe sur cette face de peau : arêtes sui les prenent toutes
if verticesPipePeau:
- # En premier, les edges associés aux extrémités du pipe
- edgesFissurePeau = [None for _ in range(len(verticesCircPeau))]
- for edge in edges:
- for i_aux, vertex in enumerate(verticesCircPeau):
- logging.info(".. distance %s", geompy.MinDistance(vertex, edge))
- if ( ( geompy.MinDistance(vertex, edge) < 1.e-3 ) and ( edge not in edgesFissurePeau ) ):
- edgesFissurePeau[i_aux] = edge
- name = "edgeFissurePeau_{}".format(i_aux)
- logging.info("... entrée de %s à la place %d", edge, i_aux)
- geomPublishInFather(initLog.debug, facePeau, edge, name)
- # Ensuite, on ajoute les edges manquantes
+ i_aux = -1
for edge in edges:
- if edge not in edgesFissurePeau:
- logging.info("... ajout")
- edgesFissurePeau.append(edge)
+ for groupe in verticesCircPeau:
+ cercle = True
+ for id_vertex in geompy.GetObjectIDs(groupe):
+ vertex = geompy.GetSubShape(facePeau, [id_vertex])
+ distance = geompy.MinDistance(vertex, edge)
+ logging.info(".. distance %s", distance)
+ if ( distance > 1.e-3 ):
+ cercle = False
+ break
+ if cercle:
+ logging.info("... entrée de %s dans l_edge_cercle", edge)
+ l_edge_cercle.append(edge)
+ i_aux += 1
+ name = "edgeFissurePeauCercle_{}".format(i_aux)
+ geomPublishInFather(initLog.info, facePeau, edge, name)
- else:
- for i_aux, edge in enumerate(edges):
+# --- Les arêtes n'appartenant pas aux cercles
+ edgesFissurePeau = list()
+ for i_aux, edge in enumerate(edges):
+ if edge not in l_edge_cercle:
edgesFissurePeau.append(edge)
- name = "edgeFissurePeau{}".format(i_aux)
+ name = "edgeFissurePeau_{}".format(i_aux)
geomPublishInFather(initLog.debug, facePeau, edge, name)
logging.info('==> Nombre d arêtes : len(edgesFissurePeau) = %d', len(edgesFissurePeau))
from .identifieFacesPeau import identifieFacesPeau
from .identifieEdgesPeau import identifieEdgesPeau
-def identifieElementsGeometriquesPeau(ifil, partitionPeauFissFond, edgesPipeFiss, \
- edgesFondFiss, wireFondFiss, aretesVivesC, \
- facesDefaut, centreFondFiss, rayonPipe, \
- aretesVivesCoupees, \
+def identifieElementsGeometriquesPeau(ifil, partitionPeauFissFond, \
+ edgesPipeFiss, edgesFondFiss, wireFondFiss, aretesVivesC, \
+ facesDefaut, centreFondFiss, rayonPipe, aretesVivesCoupees, \
nro_cas=None):
"""Identification des éléments géométriques de la face de peau"""
logging.info('start')
# --- identification précise des edges et disques des faces de peau selon index extremité fissure
- (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau, edgesCircPeau, verticesCircPeau, groupEdgesBordPeau, \
+ (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau, \
+ edgesCircPeau, groupEdgesBordPeau, \
bordsVifs, edgesFissurePeau, aretesVivesCoupees) = \
identifieEdgesPeau(edgesFissExtPipe, verticesPipePeau, facePeau, facesPeauSorted, \
edgesPeauFondIn, fillingFaceExterne, aretesVivesC, aretesVivesCoupees, \
edgesFissExtPipe = edgesFissExtPipe, # pour chaque face [edge commun au pipe des faces de fissure externes]
facePeau = facePeau, # pour chaque face : la face de peau finale a mailler (percee des faces débouchantes)
edgesCircPeau = edgesCircPeau, # pour chaque face de peau : [groupe subshapes edges circulaires aux débouchés du pipe]
- verticesCircPeau = verticesCircPeau, # pour chaque face de peau : [groupe subshapes points sur edges circulaires aux débouchés du pipe]
groupEdgesBordPeau = groupEdgesBordPeau, # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
bordsVifs = bordsVifs, # pour chaque face de peau : groupe subshape des edges aux bords correspondant à des arêtes vives
edgesFissurePeau = edgesFissurePeau, # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
hypo2d.SetQuadAllowed( 0 )
putName(hypo2d, "faceFiss", i_pref=nro_cas)
- logging.info("UseExisting1DElements depuis '%s'", edgesPipeFissureExterneC.GetName())
+ logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \
+ edgesPipeFissureExterneC.GetName(), edgeFaceFissGroup.GetName())
algo1d = meshFaceFiss.UseExisting1DElements(geom=edgesPipeFissureExterneC)
putName(algo1d.GetSubMesh(), "edgeFissPeau", i_pref=nro_cas)
hypo1d = algo1d.SourceEdges([ edgeFaceFissGroup ],0,0)
from .putName import putName
def mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut, \
- facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, \
+ facesPeaux, edCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, \
bordsLibres, grpEdgesPeauFissureExterne, grpAretesVives, \
edgesCircPipeGroup, dmoyen, rayonPipe, nbsegRad, \
mailleur="MeshGems", nro_cas=None):
# --- edges de bord de la face de filling
filling = facesDefaut[ifil]
edgesFilling = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], False)
- groupEdgesBordPeau = geompy.CreateGroup(filling, geompy.ShapeType["EDGE"])
- geompy.UnionList(groupEdgesBordPeau, edgesFilling)
- geomPublishInFather(initLog.always, filling, groupEdgesBordPeau, "EdgesBords", nro_cas)
+ gpedgeBord[ifil] = geompy.CreateGroup(filling, geompy.ShapeType["EDGE"])
+ geompy.UnionList(gpedgeBord[ifil], edgesFilling)
+ geomPublishInFather(initLog.always, filling, gpedgeBord[ifil], "EdgesBords", nro_cas)
logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \
- groupEdgesBordPeau.GetName(), bordsLibres.GetName())
- algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau)
+ gpedgeBord[ifil].GetName(), bordsLibres.GetName())
+ algo1d = meshFacePeau.UseExisting1DElements(geom=gpedgeBord[ifil])
putName(algo1d.GetSubMesh(), "bordsLibres", ifil, nro_cas)
hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0)
putName(hypo1d, "SourceEdges_{}".format(bordsLibres.GetName()), ifil, nro_cas)
else:
logging.info("face de peau %d coupée par la fissure", ifil)
- edgesCircPeau = edCircPeau[ifil] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
- _ = ptCircPeau[ifil] # pour chaque face de peau : [subshape point sur edge circulaire aux débouchés du pipe]
- groupEdgesBordPeau = gpedgeBord[ifil] # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
- bordsVifs = gpedgeVifs[ifil] # pour chaque face de peau : groupe subshape des edges aux bords correspondant à des arêtes vives
- edgesFissurePeau = edFissPeau[ifil] # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
+ # edCircPeau[ifil] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
+ # gpedgeBord[ifil] : pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
+ # gpedgeVifs[ifil] : pour chaque face de peau : groupe subshape des edges aux bords correspondant à des arêtes vives
+ # edFissPeau[ifil] : pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \
- groupEdgesBordPeau.GetName(), bordsLibres.GetName())
- algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau)
+ gpedgeBord[ifil].GetName(), bordsLibres.GetName())
+ algo1d = meshFacePeau.UseExisting1DElements(geom=gpedgeBord[ifil])
putName(algo1d.GetSubMesh(), "bordsLibres", ifil, nro_cas)
hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0)
putName(hypo1d, "SourceEdges_{}".format(bordsLibres.GetName()), i_pref=nro_cas)
- objet = geompy.MakeCompound(edgesFissurePeau)
- geomPublishInFather(initLog.always, facePeau, objet, "edgesFissurePeau")
+ objet = geompy.MakeCompound(edFissPeau[ifil])
+ geomPublishInFather(initLog.always, facePeau, objet, "edFissPeau_{}".format(ifil))
logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \
objet.GetName(), grpEdgesPeauFissureExterne.GetName())
algo1d = meshFacePeau.UseExisting1DElements(geom=objet)
hypo1d = algo1d.SourceEdges([ grpEdgesPeauFissureExterne ],0,0)
putName(hypo1d, "SourceEdges_{}".format(grpEdgesPeauFissureExterne.GetName()), i_pref=nro_cas)
- if bordsVifs is not None:
+ if gpedgeVifs[ifil] is not None:
logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \
- bordsVifs.GetName(), grpAretesVives.GetName())
- algo1d = meshFacePeau.UseExisting1DElements(geom=bordsVifs)
- putName(algo1d.GetSubMesh(), "bordsVifs", ifil, nro_cas)
+ gpedgeVifs[ifil].GetName(), grpAretesVives.GetName())
+ algo1d = meshFacePeau.UseExisting1DElements(geom=gpedgeVifs[ifil])
+ putName(algo1d.GetSubMesh(), "gpedgeVifs", ifil, nro_cas)
hypo1d = algo1d.SourceEdges([ grpAretesVives ],0,0)
putName(hypo1d, "SourceEdges_{}".format(grpAretesVives.GetName()), i_pref=nro_cas)
- for i_aux, edgeCirc in enumerate(edgesCircPeau):
+ for i_aux, edgeCirc in enumerate(edCircPeau[ifil]):
texte = "i_aux = {}".format(i_aux)
logging.info(texte)
if edgeCirc is not None: