Salome HOME
Cherry-pick 254c2216: Python3 porting: fix the pb with creation of StdMeshersBuilder_...
[modules/smesh.git] / src / Tools / ZCracksPlug / ellipse.py
1 # -*- coding: utf-8 -*-
2
3 ###
4 ### This file is generated automatically by SALOME v7.7.1 with dump python functionality
5 ###
6
7
8 import sys, numpy
9 import salome
10
11 salome.salome_init()
12 theStudy = salome.myStudy
13
14 import salome_notebook
15 notebook = salome_notebook.NoteBook(theStudy)
16
17 ###
18 ### GEOM component
19 ###
20
21 import GEOM
22 from salome.geom import geomBuilder
23 import math
24 import SALOMEDS
25 from . import utilityFunctions as uF
26 from .output import message
27
28 #ellipse.generate(data_demi_grand_axe, data_centre, data_normale,data_direction, data_demi_petit_axe, data_angle, rayon_entaille,extension, outFile)
29 #if True:
30   #data_demi_grand_axe = 2.
31   #data_centre = [0., 0., 0.]
32   #data_normale = [1., 0., 0.]
33   #data_direction = [0., 1., 0.]
34   #data_demi_petit_axe = 1.
35   #data_angle=180.
36   #rayon_entaille=0.1
37   #extension=0.1
38   #outFile='/home/I60976/00_PROJETS/2015_INTEGRATION_ZCRACKS/zcracks_salome/test.med'
39
40
41 def generate(data_demi_grand_axe, data_centre, data_normale,
42              data_direction, data_demi_petit_axe, data_angle,
43              rayon_entaille, extension, outFile):
44
45   Vnormale, Vdirection, Vortho = uF.calcCoordVectors(data_normale, data_direction)
46   Vcentre = numpy.array(data_centre)
47
48   geompy = geomBuilder.New(theStudy)
49
50   O = geompy.MakeVertex(0, 0, 0)
51   OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
52   OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
53   OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
54   CENTRE = geompy.MakeVertex(Vcentre[0], Vcentre[1], Vcentre[2])
55   NORMALE = geompy.MakeVectorDXDYDZ(Vnormale[0], Vnormale[1], Vnormale[2])
56   DIRECTION = geompy.MakeVectorDXDYDZ(Vdirection[0], Vdirection[1], Vdirection[2])
57   DIRECTION_op = geompy.MakeVectorDXDYDZ(-Vdirection[0], -Vdirection[1], -Vdirection[2])
58   V3 = geompy.MakeVectorDXDYDZ(Vortho[0], Vortho[1], Vortho[2])
59   V3_op = geompy.MakeVectorDXDYDZ(-Vortho[0], -Vortho[1], -Vortho[2])
60   if data_demi_grand_axe >= data_demi_petit_axe:
61     ELLIPSE = geompy.MakeEllipse(CENTRE, NORMALE, data_demi_grand_axe, data_demi_petit_axe, DIRECTION)
62   else:
63     ELLIPSE = geompy.MakeEllipse(CENTRE, NORMALE, data_demi_petit_axe, data_demi_grand_axe, V3)
64
65   if rayon_entaille<1.e-12:
66     FELLIPSE = geompy.MakeFaceWires([ELLIPSE], 1)
67     dim=2
68   else:
69     dim=3
70     VP1=Vcentre+Vdirection*(data_demi_grand_axe-rayon_entaille)+Vnormale*rayon_entaille
71     VP2=Vcentre+Vdirection*(data_demi_grand_axe)
72     VP3=Vcentre+Vdirection*(data_demi_grand_axe-rayon_entaille)-Vnormale*rayon_entaille
73     PE1=geompy.MakeVertex(VP1[0], VP1[1], VP1[2])
74     PE2=geompy.MakeVertex(VP2[0], VP2[1], VP2[2])
75     PE3=geompy.MakeVertex(VP3[0], VP3[1], VP3[2])
76     ARC = geompy.MakeArc(PE1, PE2, PE3)
77     TUYAU = geompy.MakePipe(ARC, ELLIPSE)
78     subShapesList=geompy.GetFreeBoundary(TUYAU)[1]
79     entailleFace1 = geompy.MakeFaceWires([subShapesList[0]], 1)
80     entailleFace2 = geompy.MakeFaceWires([subShapesList[1]], 1)
81     FELLIPSE = geompy.MakeShell([TUYAU, entailleFace1, entailleFace2])
82
83   edgesIDs = geompy.SubShapeAllIDs(FELLIPSE, geompy.ShapeType["EDGE"])
84   edges = geompy.CreateGroup(FELLIPSE, geompy.ShapeType["EDGE"])
85   geompy.UnionIDs(edges, edgesIDs)
86   geompy.addToStudy( FELLIPSE, 'FELLIPSE' )
87   geompy.addToStudyInFather( FELLIPSE , edges, 'edges' )
88
89   hauteur=numpy.max([data_demi_grand_axe,data_demi_petit_axe])*1.1
90
91   eps=1.E-05
92   bool_boite=True
93   extrusion=numpy.max([1.,rayon_entaille])*1.1
94   if ( (data_angle>(eps)) and (data_angle<(180.-eps)) ):
95     rayon2=hauteur*numpy.tan(data_angle*numpy.pi/180./2.)
96
97     B1=geompy.MakeTranslationVectorDistance(CENTRE,DIRECTION,hauteur)
98     B2=geompy.MakeTranslationVectorDistance(B1,V3,rayon2)
99     geompy.TranslateVectorDistance(B1,V3_op,rayon2, False)
100     LB01 = geompy.MakeLineTwoPnt(CENTRE, B1)
101     LB02 = geompy.MakeLineTwoPnt(CENTRE, B2)
102     LB12 = geompy.MakeLineTwoPnt(B1, B2)
103     plan_BOITE = geompy.MakeFaceWires([LB01, LB02, LB12], True)
104
105     BOITE = geompy.MakePrismVecH2Ways(plan_BOITE, NORMALE, extrusion)
106
107     FACE_FISSURE = geompy.MakeCommonList([FELLIPSE, BOITE])
108
109   elif ( (data_angle>=(180.-eps)) and (data_angle<=(180.+eps)) ):
110     VP1=Vcentre+Vortho*hauteur
111     VP2=Vcentre-Vortho*hauteur
112     VP3=Vcentre-Vortho*hauteur+Vdirection*hauteur
113     VP4=Vcentre+Vortho*hauteur+Vdirection*hauteur
114
115     Sommet_1 = geompy.MakeVertex(VP1[0], VP1[1], VP1[2])
116     Sommet_2 = geompy.MakeVertex(VP2[0], VP2[1], VP2[2])
117     Sommet_3 = geompy.MakeVertex(VP3[0], VP3[1], VP3[2])
118     Sommet_4 = geompy.MakeVertex(VP4[0], VP4[1], VP4[2])
119
120     Ligne_1 = geompy.MakeLineTwoPnt(Sommet_1, Sommet_2)
121     Ligne_2 = geompy.MakeLineTwoPnt(Sommet_2, Sommet_3)
122     Ligne_3 = geompy.MakeLineTwoPnt(Sommet_3, Sommet_4)
123     Ligne_4 = geompy.MakeLineTwoPnt(Sommet_4, Sommet_1)
124
125     Contour_1 = geompy.MakeWire([Ligne_1, Ligne_2, Ligne_3, Ligne_4], 1e-07)
126     Face_1 = geompy.MakeFaceWires([Contour_1], 1)
127     BOITE = geompy.MakePrismVecH2Ways(Face_1, NORMALE, extrusion)
128     FACE_FISSURE = geompy.MakeCommonList([FELLIPSE, BOITE])
129
130   elif ( (data_angle>(180.+eps)) and (data_angle<(360.-eps)) ):
131     rayon2=hauteur*numpy.tan((360.-data_angle)*numpy.pi/180./2.)
132
133     B1=geompy.MakeTranslationVectorDistance(CENTRE,DIRECTION_op,hauteur)
134     B2=geompy.MakeTranslationVectorDistance(B1,V3,rayon2)
135     geompy.TranslateVectorDistance(B1,V3_op,rayon2, False)
136     LB01 = geompy.MakeLineTwoPnt(CENTRE, B1)
137     LB02 = geompy.MakeLineTwoPnt(CENTRE, B2)
138     LB12 = geompy.MakeLineTwoPnt(B1, B2)
139     plan_BOITE = geompy.MakeFaceWires([LB01, LB02, LB12], True)
140     extrusion=numpy.max([1.,rayon_entaille])*1.1
141     BOITE = geompy.MakePrismVecH2Ways(plan_BOITE, NORMALE, extrusion)
142
143     FACE_FISSURE = geompy.MakeCutList(FELLIPSE, [BOITE])
144
145   elif ( (data_angle<=(eps)) or (data_angle>=(360.-eps)) ):
146     bool_boite=False
147     FACE_FISSURE = FELLIPSE
148
149   else:
150     message('E','Angle non prevu')
151
152   if bool_boite:
153     #geompy.addToStudy( BOITE, 'BOITE' )
154     newEdgesIDs = geompy.SubShapeAllIDs(FACE_FISSURE, geompy.ShapeType["EDGE"])
155     newEdges = geompy.CreateGroup(FACE_FISSURE, geompy.ShapeType["EDGE"])
156     geompy.UnionIDs(newEdges, newEdgesIDs)
157
158     [oldEdges] = geompy.RestoreGivenSubShapes(FACE_FISSURE, [FELLIPSE, edges], GEOM.FSM_GetInPlace, True, False)
159
160     toExtrude = geompy.CutListOfGroups([newEdges], [oldEdges])
161
162     if extension>1.e-12:
163       extrusion = geompy.MakePrismVecH(toExtrude, DIRECTION_op, extension)
164       try:
165         FACE_FISSURE = geompy.MakeFuseList([FACE_FISSURE, extrusion], False, True)
166       except:
167         FACE_FISSURE = geompy.MakeFuseList([FACE_FISSURE, extrusion], False, False)
168
169   #geompy.addToStudy( FACE_FISSURE, 'FACE_FISSURE' )
170
171   #geompy.addToStudy( FACE_FISSURE, 'FACE_FISSURE' )
172
173   import  SMESH, SALOMEDS
174   from salome.smesh import smeshBuilder
175   smesh = smeshBuilder.New(theStudy)
176
177   A=numpy.pi/(30.)
178   minAxes=numpy.min([data_demi_grand_axe,data_demi_petit_axe])
179   maxAxes=numpy.max([data_demi_grand_axe,data_demi_petit_axe])
180   R=minAxes**2/maxAxes
181
182   if rayon_entaille>1.e-12:
183     R=numpy.min([R,rayon_entaille])
184     A=numpy.pi/(15.)
185
186   chordal, minSize = uF.calcElemSize(A, R)
187   maxSize=maxAxes/5.
188
189   Maillage=uF.meshCrack(FACE_FISSURE, minSize, maxSize, chordal, dim)
190
191   try:
192     Maillage.ExportMED(outFile)
193     smesh.SetName(Maillage.GetMesh(), 'MAILLAGE_FISSURE')
194   except:
195     print('ExportMED() failed. Invalid file name?')
196
197
198   ## Set names of Mesh objects
199
200
201   if salome.sg.hasDesktop():
202     salome.sg.updateObjBrowser(True)