Salome HOME
decoupage insereFissureGenerale, renommée construitFissureGenerale, premiere phase...
[modules/smesh.git] / src / Tools / blocFissure / gmu / identifieElementsGeometriquesPeau.py
1 # -*- coding: utf-8 -*-
2
3 import logging
4 import math
5
6 from geomsmesh import geompy
7
8 from extractionOrientee import extractionOrientee
9 from extractionOrienteeMulti import extractionOrienteeMulti
10 from orderEdgesFromWire import orderEdgesFromWire
11 from produitMixte import produitMixte
12 from whichSide import whichSide
13 from sortFaces import sortFaces
14 from substractSubShapes import substractSubShapes
15 from identifieElementsFissure import identifieElementsFissure
16 from identifieElementsDebouchants import identifieElementsDebouchants
17 from trouveEdgesFissPeau import trouveEdgesFissPeau
18 from identifieFacesPeau import identifieFacesPeau
19 from identifieEdgesPeau import identifieEdgesPeau
20
21 def identifieElementsGeometriquesPeau(ifil, partitionPeauFissFond, edgesPipeFiss,
22                                       edgesFondFiss, wireFondFiss, aretesVivesC,
23                                       facesDefaut, centreFondFiss, rayonPipe,
24                                       aretesVivesCoupees):
25   """
26   """
27   logging.info('start')
28   fillingFaceExterne = facesDefaut[ifil]
29
30   logging.debug("traitement partitionPeauFissFond %s", ifil)
31   
32   # --- identification edges fond de fissure, edges pipe sur la face de fissure, edges prolongées
33   #     edges internes communes pipe et fissure, points communs edges fissure peau et edges circulaires
34   
35   (edgesPipeIn, verticesPipePeau, edgesFondIn, facesInside, facesOnside) = identifieElementsFissure(ifil, facesDefaut, partitionPeauFissFond,
36                                                                                                     edgesPipeFiss, edgesFondFiss, aretesVivesC,
37                                                                                                     fillingFaceExterne, centreFondFiss)
38   
39   # --- elements débouchants (intersection pipe et peau), indexés selon les edges du fond de fissure (edgesFondIn)
40   
41   (verticesEdgesFondIn, pipexts, cercles,
42    facesFissExt, edgesFissExtPeau, edgesFissExtPipe) = identifieElementsDebouchants(ifil, facesDefaut, partitionPeauFissFond,
43                                                                                     edgesFondIn, edgesFondFiss, wireFondFiss,
44                                                                                     aretesVivesC, fillingFaceExterne,
45                                                                                     edgesPipeIn, verticesPipePeau, rayonPipe,
46                                                                                     facesInside, facesOnside)
47
48   # --- pour les faces de peau sans extremité débouchante de fissure, il faut recenser les edges de fissure sur la face de peau
49
50   if len(verticesPipePeau) == 0: # aucune extrémité du pipe sur cette face de peau
51     edgesFissExtPeau = trouveEdgesFissPeau(facesInside, facesOnside, edgesPipeIn, edgesFondIn, partitionPeauFissFond, edgesFissExtPeau)
52     
53   # --- inventaire des faces de peau : face de peau percée du pipe, extrémités du pipe
54   
55   (facePeau, facesPeauSorted, edgesPeauFondIn) = identifieFacesPeau(ifil, verticesPipePeau, facesOnside, wireFondFiss,
56                                                                     verticesEdgesFondIn, pipexts, cercles,
57                                                                     fillingFaceExterne, centreFondFiss)
58   
59   # --- identification précise des edges et disques des faces de peau selon index extremité fissure
60   
61   (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau,
62    edgesCircPeau, verticesCircPeau, groupEdgesBordPeau,
63    bordsVifs, edgesFissurePeau) = identifieEdgesPeau(edgesFissExtPipe, verticesPipePeau, facePeau, facesPeauSorted,
64                                                      edgesPeauFondIn, fillingFaceExterne, aretesVivesC, aretesVivesCoupees)
65   
66   dataPPFF = dict(endsEdgeFond        = endsEdgeFond,        # pour chaque face [points edge fond de fissure aux débouchés du pipe]
67                   facesPipePeau       = facesPipePeau,       # pour chaque face [face
68                   edgeRadFacePipePeau = edgeRadFacePipePeau, # pour chaque face [edge radiale des faces du pipe débouchantes ]
69                   facesFissExt        = facesFissExt,        # pour chaque face [faces de fissure externes au pipe]
70                   edgesFissExtPeau    = edgesFissExtPeau,    # pour chaque face [edge en peau des faces de fissure externes (pas subshape facePeau)]
71                   edgesFissExtPipe    = edgesFissExtPipe,    # pour chaque face [edge commun au pipe des faces de fissure externes]
72                   facePeau            = facePeau,            # pour chaque face : la face de peau finale a mailler (percee des faces débouchantes)
73                   edgesCircPeau       = edgesCircPeau,       # pour chaque face de peau : [groupe subshapes edges circulaires aux débouchés du pipe]
74                   verticesCircPeau    = verticesCircPeau,    # pour chaque face de peau : [groupe subshapes points sur edges circulaires aux débouchés du pipe]
75                   groupEdgesBordPeau  = groupEdgesBordPeau,  # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
76                   bordsVifs           = bordsVifs,           # pour chaque face de peau : groupe subshape des edges aux bords correspondant à des arêtes vives
77                   edgesFissurePeau    = edgesFissurePeau,    # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
78                   verticesPipePeau    = verticesPipePeau     # pour chaque face de peau : [point commun edFissPeau edCircPeau]
79                   )  
80
81   return dataPPFF, aretesVivesCoupees
82