Salome HOME
debug
[modules/smesh.git] / src / Tools / blocFissure / gmu / facesCirculaires.py
1 # -*- coding: utf-8 -*-
2
3 import logging
4 from geomsmesh import geompy
5
6 # -----------------------------------------------------------------------------
7 # --- TORE
8 ## --- faces 1/2 circulaires et leur centre, edges de ces faces dans le plan de fissure
9
10 def facesCirculaires(bloc, tore):
11   """
12   Extraction des faces demi circulaires à l'intersection du tore partitionné et de la paroi,
13   de leur centre, les edges de ces faces situees dans le plan de fissure et un booleen par edge,
14   indiquant son sens (normal / reversed).
15   @param bloc : bloc defaut
16   @param tore : le tore partitionné et coupé
17   @return (faces, centres, edges, reverses)
18   """
19   logging.info("start")
20
21   faces = geompy.GetShapesOnShape(bloc, tore, geompy.ShapeType["FACE"], GEOM.ST_ON)
22
23   geompy.addToStudyInFather( tore, faces[0], 'face0' )
24   geompy.addToStudyInFather( tore, faces[1], 'face1' )
25   geompy.addToStudyInFather( tore, faces[2], 'face2' )
26   geompy.addToStudyInFather( tore, faces[3], 'face3' )
27
28   centres = [None, None, None, None]
29   [v1,centres[0],v3] = geompy.ExtractShapes(faces[0], geompy.ShapeType["VERTEX"], True)
30   [v1,centres[1],v3] = geompy.ExtractShapes(faces[1], geompy.ShapeType["VERTEX"], True)
31   [v1,centres[2],v3] = geompy.ExtractShapes(faces[2], geompy.ShapeType["VERTEX"], True)
32   [v1,centres[3],v3] = geompy.ExtractShapes(faces[3], geompy.ShapeType["VERTEX"], True)
33
34   geompy.addToStudyInFather( faces[0], centres[0], 'centre0' )
35   geompy.addToStudyInFather( faces[1], centres[1], 'centre1' )
36   geompy.addToStudyInFather( faces[2], centres[2], 'centre2' )
37   geompy.addToStudyInFather( faces[3], centres[3], 'centre3' )
38
39   alledges = [None, None, None, None]
40   alledges[0] = geompy.ExtractShapes(faces[0], geompy.ShapeType["EDGE"], True)
41   alledges[1] = geompy.ExtractShapes(faces[1], geompy.ShapeType["EDGE"], True)
42   alledges[2] = geompy.ExtractShapes(faces[2], geompy.ShapeType["EDGE"], True)
43   alledges[3] = geompy.ExtractShapes(faces[3], geompy.ShapeType["EDGE"], True)
44
45   dicoedge = {}
46   edges = []
47   reverses = []
48   for i in range(len(alledges)):
49     edgesface = alledges[i]
50     lenef = []
51     for j in range(len(edgesface)):
52       props = geompy.BasicProperties(edgesface[j])
53       lenef.append(props[0])
54       pass
55     maxlen = max(lenef)
56     for j in range(len(edgesface)):
57       if lenef[j] < maxlen:
58         edgid = geompy.GetSubShapeID(tore, edgesface[j])
59         if not (edgid in dicoedge):
60           dicoedge[edgid] = edgesface[j]
61           edges.append(edgesface[j])
62           named = 'edge_' + str(i) + '_' +str(j)
63           geompy.addToStudyInFather( faces[i], edgesface[j], named)
64           vertices = geompy.ExtractShapes(edgesface[j], geompy.ShapeType["VERTEX"], False)
65           #firstVertex = geompy.GetFirstVertex(edgesface[j])
66           if geompy.GetSubShapeID(tore, vertices[0]) != geompy.GetSubShapeID(tore, centres[i]):
67             reverses.append(1)
68             #print 'reversed ' + str(edgid)
69           else:
70             reverses.append(0)
71             #print 'normal' + str(edgid)
72           pass
73         pass
74       pass
75     pass
76
77   return faces, centres, edges, reverses
78