1 #==============================================================================
2 # File : SMESH_fix_volute.py
3 # Created : mer sep 4 09:58:49 CEST 2002
4 # Author : Paul RASCLE, EDF
8 #==============================================================================
11 # les numeros d'edge dans les explode sont parfois decales de 1 entre
13 # piece1 --> piece : memes numeros
14 # ellipse : il faut decrementer de 1 dans le script
24 ##import SMESH_BasicHypothesis_idl
28 # -----------------------------------------------------------------------------
30 def MakeFace(lstEdges) :
32 Creates a face from 4 edges
35 for edge in lstEdges :
36 lstWire.append(edge._get_Name())
37 wire = geompy.MakeWire(lstWire)
38 face = geompy.MakeFace(wire, 1)
41 def MakeShell(lstFaces) :
43 Creates a shell from 6 faces
46 for face in lstFaces :
47 lstShell.append(face._get_Name())
48 shell = geompy.MakeSewing(lstShell, 0.00001)
51 def MakeCompound(lstShells) :
53 Creates a compound from several shells
56 for shell in lstShells :
57 lstCompound.append(shell._get_Name())
58 compound = geompy.MakeCompound(lstCompound)
61 # -----------------------------------------------------------------------------
63 geom = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM")
64 myBuilder = salome.myStudy.NewBuilder()
66 ShapeTypeCompSolid = 1
78 ##epaisseurPlq = 0.150
80 ##hauteurFlanc = 0.380
81 ##epaisseurFlanc = 0.112
82 ##rayonConge = 0.150 - epaisseurFlanc
84 ##epaisseurFond = 0.162
86 ##posAxeTrou = hauteurFlanc -(0.180 + rayonTrou)
96 rayonConge = 150 - epaisseurFlanc
100 posAxeTrou = hauteurFlanc -(180 + rayonTrou)
104 # ---- points, directions de base
106 p0 = geom.MakePointStruct(0., 0., 0.)
107 px = geom.MakePointStruct(100., 0., 0.)
108 vx = geom.MakeDirection(px)
109 py = geom.MakePointStruct(0., 100., 0.)
110 vy = geom.MakeDirection(py)
111 pz = geom.MakePointStruct(0., 0., 100.)
112 vz = geom.MakeDirection(pz)
114 # ---- volumes de controle
116 volglob = geom.MakeBox( 0., 0., 0.,
119 hauteurFlanc + epaisseurPlq +marge)
120 idvolglob = geompy.addToStudy(volglob, "volglob")
121 volhaut = geom.MakeBox(-marge,
122 0.5*(largeurPlq - epaisseurFond),
123 hauteurFlanc + epaisseurPlq,
126 hauteurFlanc + epaisseurPlq +2*marge)
127 idvolhaut = geompy.addToStudy(volhaut, "volhaut")
131 #plaque = geom.MakeBox( 0., 0., 0., longueurPlq, largeurPlq, epaisseurPlq )
132 plaque = geom.MakeBox( -marge, -marge/2, 0.,
133 longueurPlq +2*marge, largeurPlq, epaisseurPlq )
136 fond = geom.MakeBox( rayonConge,
137 largeurPlq - epaisseurFond,
139 longueurPlq - rayonConge,
141 epaisseurPlq + hauteurFlanc +marge/2)
145 pAxe1 = geom.MakePointStruct( 0.5*longueurPlq,
147 epaisseurPlq + posAxeTrou)
148 cylFond = geom.MakeCylinder(pAxe1, vy, rayonTrou, 1.1*largeurPlq)
149 fondTroue = geom.MakeBoolean(fond, cylFond, 2)
151 piece = geom.MakeBoolean(plaque, fondTroue, 3)
152 idPiece = geompy.addToStudy(piece, "piece")
156 cote1 = geom.MakeBox(rayonConge,
159 epaisseurFlanc + rayonConge,
160 largeurPlq - epaisseurFond,
161 hauteurFlanc + epaisseurPlq +marge/2)
162 piece = geom.MakeBoolean(piece, cote1, 3)
164 cote2 = geom.MakeBox(longueurPlq -epaisseurFlanc -rayonConge,
167 longueurPlq -rayonConge,
168 largeurPlq - epaisseurFond,
169 hauteurFlanc + epaisseurPlq +marge/2)
170 piece = geom.MakeBoolean(piece, cote2, 3)
171 idPiece = geompy.addToStudy(piece, "piece1")
173 # ---- ellipse du flanc
175 he = hauteurFlanc -2*rayonConge
176 re = 0.5*(largeurPlq - epaisseurFond) - rayonConge
178 cose = math.sqrt(1.-sine*sine)
179 pe = geom.MakePointStruct(sine, 0., cose)
180 ve = geom.MakeDirection(pe)
181 cyl0 = geom.MakeCylinder(p0, ve, re, 2*he)
182 axecy = geom.MakeAxisStruct(0., 0., 0.,sine, 0., cose)
183 cyl1 = geom.MakeRotation(cyl0, axecy, 0.5)
184 cyle = geom.MakeTranslation(cyl1,
185 -marge*sine, 0., -marge*cose)
186 boxe = geom.MakeBox(0., 0., 0., 3*he, -2*re, 3*he)
187 #idcyle = geompy.addToStudy(cyle, "cyle")
188 #idboxe = geompy.addToStudy(boxe, "boxe")
189 cylcoup = geom.MakeBoolean(cyle, boxe, 2)
190 idcylcoup = geompy.addToStudy(cylcoup, "cylcoup")
192 aretes = geompy.SubShapeAll(cylcoup, ShapeTypeEdge)
193 # OCC3.1 : aretes[3], OCC4.0 aretes[5]
194 shape = geom.MakeCopy(aretes[5])
195 aShape = geom.MakeTranslation(shape,
196 0., rayonConge +re, epaisseurPlq +2*rayonConge)
198 # ---- segments face objet decoupe des flancs
200 pf1 = geom.MakePointStruct(0.,
202 hauteurFlanc + epaisseurPlq +marge)
203 pf2 = geom.MakePointStruct(0.,
204 0.5*(largeurPlq - epaisseurFond),
205 hauteurFlanc + epaisseurPlq +marge)
206 pf3 = geom.MakePointStruct(0.,
207 0.5*(largeurPlq - epaisseurFond),
208 hauteurFlanc + epaisseurPlq)
209 pf4 = geom.MakePointStruct(0.,
211 epaisseurPlq +2*rayonConge)
212 pf5 = geom.MakePointStruct(0.,
215 pf6 = geom.MakePointStruct(0.,
219 vf1 = geom.MakeEdge(pf1,pf2)
220 vf2 = geom.MakeEdge(pf2,pf3)
221 vf4 = geom.MakeEdge(pf4,pf5)
222 vf5 = geom.MakeEdge(pf5,pf6)
223 vf6 = geom.MakeEdge(pf6,pf1)
225 id1 = geompy.addToStudy(vf1,"vf1")
226 id2 = geompy.addToStudy(vf2,"vf2")
227 ids = geompy.addToStudy(aShape,"aShape")
228 id4 = geompy.addToStudy(vf4,"vf4")
229 id5 = geompy.addToStudy(vf5,"vf5")
230 id6 = geompy.addToStudy(vf6,"vf6")
232 faceDec = MakeFace([vf1,vf2,aShape,vf4,vf5,vf6])
233 idf = geompy.addToStudy(faceDec,"faceDec")
235 # forme de decoupe par extrusion
237 pfe = geom.MakePointStruct(longueurPlq+4*marge, 0., 0.)
238 decoupe = geom.MakePrism(faceDec, p0, pfe)
239 decoupe = geom.MakeTranslation(decoupe, -2*marge, 0., 0.)
240 idec = geompy.addToStudy(decoupe, "decoupe")
242 # decoupe piece1 par decoupe
244 piece2 = geom.MakeBoolean(piece, decoupe, 2)
245 idpiece = geompy.addToStudy(piece2, "piece2")
249 conges = geompy.SubShapeAllSorted(piece2, ShapeTypeEdge)
252 # boucle pour trouver les bons indices
255 # print ind, ff._get_Index()
256 # name = "edge%d"%(ind)
257 # geompy.addToStudy(ff, name)
261 index1 = conges[7]._get_Index()
262 index2 = conges[11]._get_Index()
263 index3 = conges[36]._get_Index()
264 index4 = conges[43]._get_Index()
266 #piece3 = geompy.MakeFillet (piece2, rayonConge, ShapeTypeEdge, [3,4,8,9])
267 piece3 = geompy.MakeFillet (piece2, rayonConge, ShapeTypeEdge, [index1[0],index2[0],index3[0],index4[0]])
269 idPiece = geompy.addToStudy(piece3, "piece3")
271 # partie incluse dans le volume de controle (devient non valide)
273 piece4 = geom.MakeBoolean(piece3, volglob, 1)
274 idPiece = geompy.addToStudy(piece4, "piece4")
276 # enlever volume haut
278 piece = geom.MakeBoolean(piece4, volhaut, 2)
279 idpiece = geompy.addToStudy(piece, "piece")
281 # -----------------------------------------------------------------------------
282 # ---- decoupage de la piece en volumes a 6 faces de 4 cotes
283 # -----------------------------------------------------------------------------
289 x1 = rayonConge + epaisseurFlanc
291 x2 = longueurPlq - rayonConge - epaisseurFlanc
292 x3h = longueurPlq - rayonConge
299 y1 = largeurPlq - epaisseurFond
302 y2p = largeurPlq + marge
307 z1m = epaisseurPlq -marge
309 z2 = epaisseurPlq + rayonConge
310 z3 = epaisseurPlq + 2*rayonConge
311 z4 = epaisseurPlq + hauteurFlanc
312 z4p = epaisseurPlq + hauteurFlanc + marge
314 zc = epaisseurPlq + posAxeTrou
315 zc2 = epaisseurPlq + (posAxeTrou -rayonTrou)/3
316 zc3 = epaisseurPlq + 2*(posAxeTrou -rayonTrou)/3
318 # ---- decoupe du fond
320 p11 = geom.MakePointStruct(x1, y1m, z1)
321 p12 = geom.MakePointStruct(x1, y1m, z2)
322 p13 = geom.MakePointStruct(x1, y1m, z3)
323 p14 = geom.MakePointStruct(x1, y1m, z4)
324 pc1 = geom.MakePointStruct(xc, y1m, z1)
325 pc2 = geom.MakePointStruct(xc, y1m, zc2)
326 pc3 = geom.MakePointStruct(xc, y1m, zc3)
327 pcc = geom.MakePointStruct(xc, y1m, zc)
328 pc4 = geom.MakePointStruct(xc, y1m, z4)
329 p21 = geom.MakePointStruct(x2, y1m, z1)
330 p22 = geom.MakePointStruct(x2, y1m, z2)
331 p23 = geom.MakePointStruct(x2, y1m, z3)
332 p24 = geom.MakePointStruct(x2, y1m, z4)
333 pcf = geom.MakePointStruct(xc, y2p, zc)
335 arc2 = geom.MakeArc(p12,pc2,p22)
336 arc3 = geom.MakeArc(p13,pc3,p23)
338 segz1 = geom.MakeVector(p11,p21)
339 #segz4 = geom.MakeVector(p14,p24)
340 segz41 = geom.MakeVector(p14,pc4)
341 segz42 = geom.MakeVector(pc4,p24)
342 segx11 = geom.MakeVector(p11,p12)
343 segx12 = geom.MakeVector(p12,p13)
344 segx13 = geom.MakeVector(p13,p14)
345 segxc2 = geom.MakeVector(pc1,pc2)
346 segxc3 = geom.MakeVector(pc2,pc3)
347 segxc4 = geom.MakeVector(pcc,pc4)
348 segx21 = geom.MakeVector(p21,p22)
349 segx22 = geom.MakeVector(p22,p23)
350 segx23 = geom.MakeVector(p23,p24)
351 segx1c1 = geom.MakeVector(p13,pcc)
352 segx1c2 = geom.MakeVector(p14,pcc)
353 segx2c1 = geom.MakeVector(p23,pcc)
354 segx2c2 = geom.MakeVector(p24,pcc)
357 facef.append(MakeFace([segx13,segx1c2,segx1c1]))
358 facef.append(MakeFace([segx23,segx2c2,segx2c1]))
359 facef.append(MakeFace([segx2c2,segxc4,segz42]))
360 facef.append(MakeFace([segx1c2,segz41,segxc4]))
361 facef.append(MakeFace([segx1c1,arc3,segx2c1]))
362 facef.append(MakeFace([segx12,arc2,segx22,arc3]))
363 facef.append(MakeFace([segx11,segz1,segx21,arc2]))
367 decf.append(geom.MakePrism(face,pcc,pcf))
369 axeCyl = geom.MakeAxisStruct( 0.5*longueurPlq,
371 epaisseurPlq + posAxeTrou,
375 cylFond2 = geom.MakeRotation(geom.MakeCopy(cylFond),axeCyl,math.pi)
376 idcylfond2 = geompy.addToStudy(cylFond2,"cylFond2")
380 fondec.append(geom.MakeBoolean(decf[id],cylFond2,2))
381 fondec.append(geom.MakeBoolean(decf[4],cylFond,2))
383 fondec.append(decf[id])
387 idfo = geompy.addToStudy(ff, "ff%d"%(iff))
390 # ----- autres blocs de decoupe
392 bcong1=geom.MakeBox(x0,y0,z1, x1,y1,z2)
393 bcong2=geom.MakeBox(x0,y1,z1, x1,y2,z2)
394 bcong3=geom.MakeBox(x2,y0,z1, x3,y1,z2)
395 bcong4=geom.MakeBox(x2,y1,z1, x3,y2,z2)
397 pcylx0 = geom.MakePointStruct(0., -marge, z2)
398 cylcongx0 = geom.MakeCylinder(pcylx0, vy, rayonConge, largeurPlq +2*marge)
399 idcylcongx0 = geompy.addToStudy(cylcongx0,"cylcongx0")
400 pcylx3 = geom.MakePointStruct(longueurPlq, -marge, z2)
401 cylcongx3 = geom.MakeCylinder(pcylx3, vy, rayonConge, largeurPlq +2*marge)
402 idcylcongx3 = geompy.addToStudy(cylcongx3,"cylcongx3")
403 pcyly0 = geom.MakePointStruct(-marge, 0., z2)
404 cylcongy0 = geom.MakeCylinder(pcyly0, vx, rayonConge, longueurPlq +2*marge)
405 idcylcongy0 = geompy.addToStudy(cylcongy0,"cylcongy0")
407 bcong1=geom.MakeBoolean(bcong1,cylcongx0,2)
408 bcong2=geom.MakeBoolean(bcong2,cylcongx0,2)
409 bcong1=geom.MakeBoolean(bcong1,cylcongy0,2)
410 bcong3=geom.MakeBoolean(bcong3,cylcongx3,2)
411 bcong4=geom.MakeBoolean(bcong4,cylcongx3,2)
412 bcong3=geom.MakeBoolean(bcong3,cylcongy0,2)
414 pf1 = geom.MakePointStruct(0., y0h, z3)
415 pf2 = geom.MakePointStruct(0., y1, z3)
416 pf3 = geom.MakePointStruct(0., y1, z4)
417 pf4 = geom.MakePointStruct(0.,0.5*(largeurPlq - epaisseurFond) , z4)
418 vf1 = geom.MakeEdge(pf1,pf2)
419 vf2 = geom.MakeEdge(pf2,pf3)
420 vf3 = geom.MakeEdge(pf3,pf4)
421 faceFlanc = MakeFace([vf1,vf2,vf3,aShape])
422 idfaceFlanc = geompy.addToStudy(faceFlanc,"faceFlanc")
423 pfe = geom.MakePointStruct(epaisseurFlanc, 0., 0.)
424 flanc1 = geom.MakePrism(faceFlanc, p0, pfe)
425 flanc2 = geom.MakeCopy(flanc1)
426 flanc1 = geom.MakeTranslation(flanc1,
428 flanc2 = geom.MakeTranslation(flanc2,
429 longueurPlq-rayonConge-epaisseurFlanc,0.,0.)
431 # ---- constitution et decoupe des blocs
432 boxfond2 = geom.MakeBox(x0, y1, z0, x3, y2, z4p)
433 idboxfond2 = geompy.addToStudy(boxfond2,"boxfond2")
437 blocs.append(geom.MakeBoolean(boxfond2, dec, 1))
438 blocs.append(geom.MakeBox(x0,y1,z0, x1,y2,z1))
439 blocs.append(geom.MakeBox(x1,y1,z0, x2,y2,z1))
440 blocs.append(geom.MakeBox(x2,y1,z0, x3,y2,z1))
441 blocs.append(geom.MakeBox(x0,y0,z0, x1,y1,z1))
442 blocs.append(geom.MakeBox(x1,y0,z0, x2,y1,z1))
443 blocs.append(geom.MakeBox(x2,y0,z0, x3,y1,z1))
448 blocs.append(geom.MakeBox(x0h,y1, z2, x1, y2, z3))
449 blocs.append(geom.MakeBox(x2, y1, z2, x3h,y2, z3))
450 blocs.append(geom.MakeBox(x0h,y0h,z2, x1, y1, z3))
451 blocs.append(geom.MakeBox(x2, y0h,z2, x3h,y1, z3))
452 blocs.append(geom.MakeBox(x0h,y1, z3, x1, y2, z4))
453 blocs.append(geom.MakeBox(x2, y1, z3, x3h,y2, z4))
457 compbloc = MakeCompound(blocs)
458 idcomp = geompy.addToStudy(compbloc,"compbloc")
460 # ---- eliminer les faces en double, solid-->shell
462 compshell = geom.MakeGlueFaces(compbloc,tol3d)
463 idcomp = geompy.addToStudy(compshell,"compshell")