2 from . import sphere, ellipse, rectangle
3 from . import utilityFunctions as uF
4 from .output import message
6 def main(data, outFile):
7 activeCrack=data['crack']['actif']
8 crack=data['crack'][activeCrack]
12 if activeCrack == 'Ellipse':
13 res=generateEllipse(crack, outFile)
15 elif activeCrack == 'Rectangle':
16 res=generateRectangle(crack, outFile)
18 elif activeCrack == 'Sphere':
19 res=generateSphere(crack, outFile)
21 elif activeCrack == 'Custom':
22 res=generateCustom(crack, outFile)
27 def generateEllipse(crack, outFile):
29 test=uF.testStrictRange(crack['Rayon'])
31 message('E','Bad Rayon',goOn=True)
33 demiGrandAxe=crack['Rayon'][0]
35 if 'Rayon 2' not in list(crack.keys()): crack['Rayon 2']=[]
36 if len(crack['Rayon 2'])==0:
37 demiPetitAxe=demiGrandAxe
39 test=uF.testStrictRange(crack['Rayon 2'])
41 message('E','Bad Rayon 2',goOn=True)
43 demiPetitAxe=crack['Rayon 2'][0]
45 test=uF.test3dVector(crack['Centre'])
47 message('E','Invalid Centre',goOn=True)
49 centre=crack['Centre']
51 test=uF.test3dVector(crack['Normale'])
53 message('E','Invalid Normale',goOn=True)
55 normale=crack['Normale']
57 if 'Direction' not in list(crack.keys()): crack['Direction']=[]
58 if len(crack['Direction'])==0:
59 if normale==[1.,0.,0.]:
64 test=uF.test3dVector(crack['Direction'])
66 message('E','Invalid Direction',goOn=True)
68 direction=crack['Direction']
69 test=(direction!=normale)
71 message('E','Normale and Direction are equals',goOn=True)
74 if 'Angle' not in list(crack.keys()): crack['Angle']=[]
75 if len(crack['Angle'])==0:
78 test=uF.testRange(crack['Angle'], inf=0.0, sup=360.)
80 message('E','Angle not valid or out of range 0 to 360',goOn=True)
82 angle=crack['Angle'][0]
84 if 'Rayon entaille' not in list(crack.keys()): crack['Rayon entaille']=[]
85 if len(crack['Rayon entaille'])==0:
88 test=uF.testStrictRange(crack['Rayon entaille'], inf=0.0)
90 message('E','rayon entaille not valid or negative',goOn=True)
92 rayon_entaille=crack['Rayon entaille'][0]
94 if 'Extension' not in list(crack.keys()): crack['Extension']=[]
95 if len(crack['Extension'])==0:
98 test=uF.testStrictRange(crack['Extension'], inf=0.0)
100 message('E','extension not valid or negative',goOn=True)
102 extension=crack['Extension'][0]
105 ellipse.generate(demiGrandAxe, centre, normale,
106 direction, demiPetitAxe, angle,
107 rayon_entaille, extension, outFile)
112 def generateRectangle(crack, outFile):
114 test=uF.testStrictRange(crack['Longueur'])
116 message('E','Bad Longueur',goOn=True)
118 longueur=crack['Longueur'][0]
120 if 'Largeur' not in list(crack.keys()): crack['Largeur']=[]
121 if len(crack['Largeur'])==0:
124 test=uF.testStrictRange(crack['Largeur'])
126 message('E','Bad Largeur',goOn=True)
128 largeur=crack['Largeur'][0]
130 test=uF.test3dVector(crack['Centre'])
132 message('E','Invalid Centre',goOn=True)
134 centre=crack['Centre']
136 test=uF.test3dVector(crack['Normale'])
138 message('E','Invalid Normale',goOn=True)
140 normale=crack['Normale']
142 test=uF.test3dVector(crack['Direction'])
144 message('E','Invalid Direction',goOn=True)
146 direction=crack['Direction']
148 if 'Angle' not in list(crack.keys()): crack['Angle']=[]
149 if len(crack['Angle'])==0:
152 test=uF.testRange(crack['Angle'], inf=0.0, sup=360.)
154 message('E','Angle not valid or out of range 0 to 360',goOn=True)
156 angle=crack['Angle'][0]
158 if 'Rayon' not in list(crack.keys()): crack['Rayon']=[]
159 if len(crack['Rayon'])==0:
162 test=uF.testRange(crack['Rayon'], inf=0.0)
164 message('E','Rayon not valid',goOn=True)
166 rayon=crack['Rayon'][0]
168 if 'Rayon entaille' not in list(crack.keys()): crack['Rayon entaille']=[]
169 if len(crack['Rayon entaille'])==0:
172 test=uF.testStrictRange(crack['Rayon entaille'], inf=0.0)
174 message('E','rayon entaille not valid or negative',goOn=True)
176 rayon_entaille=crack['Rayon entaille'][0]
179 rectangle.generate(longueur,largeur,centre,
180 normale,direction,angle,
181 rayon,rayon_entaille,outFile)
186 def generateSphere(crack, outFile):
188 test=uF.testStrictRange(crack['Rayon'])
190 message('E','Bad Rayon',goOn=True)
192 rayon=crack['Rayon'][0]
194 test=uF.test3dVector(crack['Centre'])
196 message('E','Invalid Centre',goOn=True)
198 centre=crack['Centre']
201 sphere.generate(rayon,centre,outFile)
206 def generateCustom(crack, outFile):
208 test=os.path.isfile(crack['med file'])
210 message('E','crack med file missing',goOn=True)
215 import salome_notebook
216 notebook = salome_notebook.NoteBook()
217 import SMESH, SALOMEDS
218 from salome.smesh import smeshBuilder
220 smesh = smeshBuilder.New()
221 ([Maillage_1], status) = smesh.CreateMeshesFromMED(crack['med file'])
223 for group in Maillage_1.GetGroups():
224 if [group.GetType(), group.GetName()]==[SMESH.NODE, 'crack']: isCrack=True
226 shutil.copy(crack['med file'],outFile)
228 Group_1 = Maillage_1.CreateEmptyGroup( SMESH.NODE, 'crack' )
229 nbAdd = Group_1.AddFrom( Maillage_1.GetMesh() )
230 Maillage_1.ExportMED(outFile)