X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FTools%2FblocFissure%2Fgmu%2FcreeZoneDefautGeom.py;h=8d01a40ff996daf337523c1ebf0026e14cd0a202;hp=4c622ebeab9de2b966dbdad91a74c76867c9098b;hb=71de383cb614e31ded6aa6343c052fbd8335b472;hpb=a8380feec5b500ecfb5d0254e9126103539f4a78 diff --git a/src/Tools/blocFissure/gmu/creeZoneDefautGeom.py b/src/Tools/blocFissure/gmu/creeZoneDefautGeom.py index 4c622ebea..8d01a40ff 100644 --- a/src/Tools/blocFissure/gmu/creeZoneDefautGeom.py +++ b/src/Tools/blocFissure/gmu/creeZoneDefautGeom.py @@ -1,14 +1,30 @@ # -*- coding: utf-8 -*- +# Copyright (C) 2014-2021 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +"""Zone de défaut, constructions géométrique avec CAO d'origine""" import logging -from geomsmesh import geompy -from geomsmesh import geomPublish -from geomsmesh import geomPublishInFather -import initLog -from prolongeVertices import prolongeVertices - -# ----------------------------------------------------------------------------- -# --- zone de defaut, constructions geometrique avec CAO d'origine +from .geomsmesh import geompy +from .geomsmesh import geomPublish +from .geomsmesh import geomPublishInFather +from . import initLog +from .prolongeVertices import prolongeVertices def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, dmoyen, lgExtrusion=50): """ @@ -28,14 +44,14 @@ def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, dmoye logging.info("start") trace = True - faces = [] - curves = [] - cdgs = [] - projs = [] - normals = [] - extrusions = [] - partitions = [] - decoupes = [] + faces = list() + curves = list() + cdgs = list() + projs = list() + normals = list() + extrusions = list() + partitions = list() + decoupes = list() for ishape, vertices in enumerate(verticesShapes): aShape = origShapes[ishape] @@ -88,7 +104,6 @@ def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, dmoye if trace: name="partition_%d"%aShape geomPublish(initLog.debug, partition, name) - pass # centreSphere = geompy.MakeCDG(shapeDefaut) @@ -96,12 +111,12 @@ def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, dmoye ccurves = geompy.MakeCompound(curves) gravCenter = geompy.MakeCDG(ccurves) geomPublish(initLog.debug, gravCenter, "cdg_curves") - for i in range(len(partitions)): + for indice, part in enumerate(partitions): if trace: - 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) @@ -109,70 +124,67 @@ def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, dmoye facesToSort.append(aFace) if trace: logging.debug("distance = %s", distance) - pass - pass if len(dists) > 0: minDist = min(dists) for j,d in enumerate(dists): if d == minDist: aFace = facesToSort[j] - name="decoupe_%d"%origShapes[i] + name="decoupe_%d"%origShapes[indice] geomPublish(initLog.debug, aFace, name) decoupes.append(aFace) break - pass - pass facesDefaut = decoupes[0] if len(decoupes) > 1: facesDefaut = geompy.MakePartition(decoupes, [], [], [], geompy.ShapeType["FACE"], 0, [], 0) geomPublish(initLog.debug, facesDefaut, "facesDefaut") - shells=[] + shells = list() 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 - while len(theFaces) > 0: + while theFaces: logging.debug("------- len(theFaces) %s" , len(theFaces)) theFace = theFaces[0] logging.debug(" start with face %s",theFaces[0]) - theFaces[0:1] = [] + theFaces[0:1] = list() aShell = [theFace] toAdd =[theFace] - 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) for aFace in aShell: logging.debug(" with %s", aFace) try: - edge = geompy.GetSharedShapesMulti([aFace, theFaces[i]], geompy.ShapeType["EDGE"]) + _ = geompy.GetSharedShapesMulti([aFace, la_face], geompy.ShapeType["EDGE"]) edgeShared = True except: edgeShared = False if edgeShared: - 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) aShell += toAdd for k in sorted(toRemove, reverse=True): - theFaces[k:k+1] = [] + theFaces[k:k+1] = list() theShell = geompy.MakeShell(aShell) name = "theShell%d"%len(shells) geomPublish(initLog.debug, theShell,name) shells.append(theShell) # - distances = [] + distances = list() 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: + indice0 = indice break - theShellDefaut = shells[index] + theShellDefaut = shells[indice0] # else: # --- une seule face de defaut subFaces = [facesDefaut] @@ -181,18 +193,19 @@ def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, dmoye geomPublish(initLog.debug, theShellDefaut,"theShellDefaut") theFaces = geompy.ExtractShapes(theShellDefaut, geompy.ShapeType["FACE"], True) - distances = [] + distances = list() for aFace in theFaces: distances.append(geompy.MinDistance(aFace, centreSphere)) minDist = min(distances) - for index in range(len(distances)): - if distances[index] == minDist: + for indice, dist in enumerate(distances): + if dist == minDist: + indice0 = indice break - centreDefaut = geompy.MakeProjection(centreSphere, theFaces[index]) + centreDefaut = geompy.MakeProjection(centreSphere, theFaces[indice0]) if trace: geomPublish(initLog.debug, centreDefaut, "centreDefaut") - normalDefaut = geompy.GetNormal(subFaces[index], centreDefaut) + normalDefaut = geompy.GetNormal(subFaces[indice0], centreDefaut) if trace: geomPublish(initLog.debug, normalDefaut, "normalDefaut") extrusionDefaut = geompy.MakePrismVecH(theShellDefaut, normalDefaut, -lgExtrusion)