Salome HOME
edd6855dbb0528a1b8c70fb561653cce933c42d5
[modules/smesh.git] / src / Tools / blocFissure / gmu / creeZoneDefautDansObjetSain.py
1 # -*- coding: utf-8 -*-
2
3 import logging
4 from geomsmesh import smesh
5 import SMESH
6 import SALOMEDS
7
8 from creeZoneDefautMaillage import creeZoneDefautMaillage
9 from peauInterne import peauInterne
10 from quadranglesToShape import quadranglesToShape
11 from creeZoneDefautFilling import creeZoneDefautFilling
12 from creeZoneDefautGeom import creeZoneDefautGeom
13 from getCentreFondFiss import getCentreFondFiss
14
15 # -----------------------------------------------------------------------------
16 # ---
17
18 def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
19                                 shapeFissureParams, maillageFissureParams):
20   """
21   TODO: a compléter
22   """
23   logging.info('start')
24   
25   #smesh.SetCurrentStudy(salome.myStudy)
26
27   geometrieSaine      = geometriesSaines[0]
28   maillageSain        = maillagesSains[0]
29   isHexa              = maillagesSains[1]
30   shapeDefaut         = shapesFissure[0]
31   tailleDefaut        = shapesFissure[2]
32   coordsNoeudsFissure = shapesFissure[3]
33
34   isElliptique = False
35   if shapeFissureParams.has_key('elliptique'):
36     isElliptique      = shapeFissureParams['elliptique']
37   if isElliptique:
38     if shapeFissureParams.has_key('demiGrandAxe'):
39       demiGrandAxe    = shapeFissureParams['demiGrandAxe']
40     else:
41       demiGrandAxe    = shapeFissureParams['longueur']
42     lgExtrusion = 2.0*demiGrandAxe
43   else:
44     lgExtrusion = 50.
45
46   nomRep              = maillageFissureParams['nomRep']
47   nomFicSain          = maillageFissureParams['nomFicSain']
48
49   fichierMaillageSain    = nomRep + '/' + nomFicSain + '.med'
50   
51   # --- centre de fond de fissure et tangente
52   
53   edgeFondExt, centreFondFiss, tgtCentre = getCentreFondFiss(shapesFissure)
54   
55
56   # --- zone de défaut
57   nomZones = "zoneDefaut"
58
59   [origShapes, verticesShapes, dmoyen] = \
60     creeZoneDefautMaillage(maillagesSains, shapeDefaut, tailleDefaut, nomZones, coordsNoeudsFissure)
61
62   maillageSain.ExportMED( fichierMaillageSain, 0, SMESH.MED_V2_2, 1 )
63   logging.debug("fichier maillage sain %s", fichierMaillageSain)
64   [maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges] = \
65     peauInterne(fichierMaillageSain, nomZones)
66
67   facesDefaut = []
68   centresDefaut = []
69   normalsDefaut =[]
70   extrusionsDefaut = []
71   isPlane = False
72   if isHexa and not isPlane:
73     meshQuad =  smesh.CopyMesh( zoneDefaut_skin, 'meshQuad', 0, 0)
74     fillings, noeuds_bords, bordsPartages, fillconts, idFilToCont  = quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss)
75     for filling in fillings:
76       [faceDefaut, centreDefaut, normalDefaut, extrusionDefaut] = \
77         creeZoneDefautFilling(filling, shapeDefaut, lgExtrusion)
78       facesDefaut.append(faceDefaut)
79       centresDefaut.append(centreDefaut)
80       normalsDefaut.append(normalDefaut)
81       extrusionsDefaut.append(extrusionDefaut)
82   else:
83     [facesDefaut, centreDefaut, normalDefaut, extrusionDefaut] = \
84       creeZoneDefautGeom( geometrieSaine, shapeDefaut, origShapes, verticesShapes, dmoyen, lgExtrusion)
85     bordsPartages =[]
86     for face in facesDefaut:
87       bordsPartages.append([None,None]) # TODO : traitement des arêtes vives ?
88     fillconts = facesDefaut
89     idFilToCont = range(len(facesDefaut))
90
91   return [facesDefaut, centresDefaut, normalsDefaut, extrusionsDefaut, dmoyen, bordsPartages, fillconts, idFilToCont,
92           maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges,
93           edgeFondExt, centreFondFiss, tgtCentre]
94