#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# -----------------------------------------------------------------------------
-# --- zone de defaut, constructions geometrique avec CAO d'origine
+def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, lgExtrusion=50):
+ """Construction CAO de la zone à remailler, quand on utilise la CAO d'origine,apres appel creeZoneDefautMaillage
-def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, dmoyen, lgExtrusion=50):
- """
- Construction CAO de la zone à remailler, quand on utilise la CAO d'origine,
- apres appel creeZoneDefautMaillage
@param objetSain : la géometrie de l'objet initial
@param shapeDefaut : objet géometrique représentant la fissure
(selon les cas, un point central, ou une shape plus complexe,
dont on ne garde que les vertices)
@param origShapes : liste id subShapes
@param verticesShapes : listes noeuds de bord
@param objetSain : la géometrie de l'objet initial
@param shapeDefaut : objet géometrique représentant la fissure
(selon les cas, un point central, ou une shape plus complexe,
dont on ne garde que les vertices)
@param origShapes : liste id subShapes
@param verticesShapes : listes noeuds de bord
@lgExtrusion : distance d'extrusion de la face du defaut
(ne vaut que pour des fissures courtes)
@return (facesDefaut, centreDefaut, normalDefaut, extrusionDefaut)
@lgExtrusion : distance d'extrusion de la face du defaut
(ne vaut que pour des fissures courtes)
@return (facesDefaut, centreDefaut, normalDefaut, extrusionDefaut)
for ishape, vertices in enumerate(verticesShapes):
aShape = origShapes[ishape]
for ishape, vertices in enumerate(verticesShapes):
aShape = origShapes[ishape]
if trace:
name="partition_%d"%aShape
geomPublish(initLog.debug, partition, name)
if trace:
name="partition_%d"%aShape
geomPublish(initLog.debug, partition, name)
ccurves = geompy.MakeCompound(curves)
gravCenter = geompy.MakeCDG(ccurves)
geomPublish(initLog.debug, gravCenter, "cdg_curves")
ccurves = geompy.MakeCompound(curves)
gravCenter = geompy.MakeCDG(ccurves)
geomPublish(initLog.debug, gravCenter, "cdg_curves")
- logging.debug(" --- original shape %s", origShapes[i])
- dists = []
- facesToSort = []
- subFaces = geompy.ExtractShapes(partitions[i], geompy.ShapeType["FACE"], True)
+ logging.debug(" --- original shape %s", origShapes[indice])
+ dists = list()
+ facesToSort = list()
+ subFaces = geompy.ExtractShapes(part, geompy.ShapeType["FACE"], True)
for aFace in subFaces:
cdg = geompy.MakeCDG(aFace)
distance = geompy.MinDistance(cdg, centreSphere)
for aFace in subFaces:
cdg = geompy.MakeCDG(aFace)
distance = geompy.MinDistance(cdg, centreSphere)
facesToSort.append(aFace)
if trace:
logging.debug("distance = %s", distance)
facesToSort.append(aFace)
if trace:
logging.debug("distance = %s", distance)
facesDefaut = decoupes[0]
if len(decoupes) > 1:
facesDefaut = geompy.MakePartition(decoupes, [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
geomPublish(initLog.debug, facesDefaut, "facesDefaut")
facesDefaut = decoupes[0]
if len(decoupes) > 1:
facesDefaut = geompy.MakePartition(decoupes, [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
geomPublish(initLog.debug, facesDefaut, "facesDefaut")
if len(decoupes) > 1: # plusieurs faces de defaut
subFaces = geompy.ExtractShapes(facesDefaut, geompy.ShapeType["FACE"], True)
# --- regroupe les subFaces en shells connectes
theFaces = list(subFaces) # copy
if len(decoupes) > 1: # plusieurs faces de defaut
subFaces = geompy.ExtractShapes(facesDefaut, geompy.ShapeType["FACE"], True)
# --- regroupe les subFaces en shells connectes
theFaces = list(subFaces) # copy
logging.debug("------- len(theFaces) %s" , len(theFaces))
theFace = theFaces[0]
logging.debug(" start with face %s",theFaces[0])
logging.debug("------- len(theFaces) %s" , len(theFaces))
theFace = theFaces[0]
logging.debug(" start with face %s",theFaces[0])
- while len(toAdd) > 0:
- toAdd = []
- toRemove = []
- for i in range(len(theFaces)):
- logging.debug(" try %s", theFaces[i])
+ while toAdd:
+ toAdd = list()
+ toRemove = list()
+ for indice, la_face in enumerate(theFaces):
+ logging.debug(" try %s", la_face)
- if theFaces[i] not in toAdd:
- toAdd.append(theFaces[i])
- toRemove.append(i)
- logging.debug(" --- add %s", theFaces[i])
+ if la_face not in toAdd:
+ toAdd.append(la_face)
+ toRemove.append(indice)
+ logging.debug(" --- add %s", la_face)
theShell = geompy.MakeShell(aShell)
name = "theShell%d"%len(shells)
geomPublish(initLog.debug, theShell,name)
shells.append(theShell)
#
theShell = geompy.MakeShell(aShell)
name = "theShell%d"%len(shells)
geomPublish(initLog.debug, theShell,name)
shells.append(theShell)
#
for aShell in shells: # --- trouver le shell en contact avec la fissure
distances.append(geompy.MinDistance(aShell, shapeDefaut))
minDist = min(distances)
for aShell in shells: # --- trouver le shell en contact avec la fissure
distances.append(geompy.MinDistance(aShell, shapeDefaut))
minDist = min(distances)
- for index in range(len(distances)):
- if distances[index] == minDist:
+ for indice, dist in enumerate(distances):
+ if dist == minDist:
+ theShellDefaut = shells[indice]
geomPublish(initLog.debug, theShellDefaut,"theShellDefaut")
theFaces = geompy.ExtractShapes(theShellDefaut, geompy.ShapeType["FACE"], True)
geomPublish(initLog.debug, theShellDefaut,"theShellDefaut")
theFaces = geompy.ExtractShapes(theShellDefaut, geompy.ShapeType["FACE"], True)
if trace:
geomPublish(initLog.debug, normalDefaut, "normalDefaut")
extrusionDefaut = geompy.MakePrismVecH(theShellDefaut, normalDefaut, -lgExtrusion)
if trace:
geomPublish(initLog.debug, normalDefaut, "normalDefaut")
extrusionDefaut = geompy.MakePrismVecH(theShellDefaut, normalDefaut, -lgExtrusion)