1 #==============================================================================
2 # File : SMESH_fixation2.py
3 # Created : mer sep 4 09:58:49 CEST 2002
4 # Author : Paul RASCLE, EDF
8 #==============================================================================
17 geom = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM")
18 myBuilder = salome.myStudy.NewBuilder()
20 ShapeTypeCompSolid = 1
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 = geom.MakeWire(lstWire)
38 face = geom.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 = geom.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 = geom.MakeCompound(lstCompound)
61 # -----------------------------------------------------------------------------
67 ##epaisseurPlq = 0.150
69 ##hauteurFlanc = 0.380
70 ##epaisseurFlanc = 0.112
71 ##rayonConge = 0.150 - epaisseurFlanc
73 ##epaisseurFond = 0.162
75 ##posAxeTrou = hauteurFlanc -(0.180 + rayonTrou)
85 rayonConge = 150 - epaisseurFlanc
89 posAxeTrou = hauteurFlanc -(180 + rayonTrou)
93 # ---- points, directions de base
95 p0 = geom.MakePointStruct(0., 0., 0.)
96 px = geom.MakePointStruct(100., 0., 0.)
97 vx = geom.MakeDirection(px)
98 py = geom.MakePointStruct(0., 100., 0.)
99 vy = geom.MakeDirection(py)
100 pz = geom.MakePointStruct(0., 0., 100.)
101 vz = geom.MakeDirection(pz)
103 # ---- ellipse du flanc
105 he = hauteurFlanc -2*rayonConge
106 re = 0.5*(largeurPlq - epaisseurFond) - rayonConge
108 cose = math.sqrt(1.-sine*sine)
109 pe = geom.MakePointStruct(sine, 0., cose)
110 ve = geom.MakeDirection(pe)
111 cyl0 = geom.MakeCylinder(p0, ve, re, 2*he)
112 axecy = geom.MakeAxisStruct(0., 0., 0.,sine, 0., cose)
113 cyl1 = geom.MakeRotation(cyl0, axecy, 0.5)
114 cyle = geom.MakeTranslation(cyl1,
115 -marge*sine, 0., -marge*cose)
116 boxe = geom.MakeBox(0., 0., 0., 3*he, -2*re, 3*he)
117 #idcyle = geompy.addToStudy(cyle, "cyle")
118 #idboxe = geompy.addToStudy(boxe, "boxe")
119 cylcoup = geom.MakeBoolean(cyle, boxe, 2)
120 #idcylcoup = geompy.addToStudy(cylcoup, "cylcoup")
122 aretes = geom.SubShapeAllSorted(cylcoup, ShapeTypeEdge)
125 ##for edge in aretes:
126 ## edname="arete%d"%eid
127 ## idedge=geompy.addToStudy(edge,edname)
130 shape = geom.MakeCopy(aretes[0])
131 #idarete = geompy.addToStudy(shape, "arete")
132 aShape = geom.MakeTranslation(shape,
133 0., rayonConge +re, epaisseurPlq +2*rayonConge)
136 # -----------------------------------------------------------------------------
137 # ---- decoupage de la piece en volumes a 6 faces de 4 cotes
138 # -----------------------------------------------------------------------------
144 x1 = rayonConge + epaisseurFlanc
146 x2 = longueurPlq - rayonConge - epaisseurFlanc
147 x3h = longueurPlq - rayonConge
154 y1 = largeurPlq - epaisseurFond
157 y2p = largeurPlq + marge
162 z1m = epaisseurPlq -marge
164 z2 = epaisseurPlq + rayonConge
165 z3 = epaisseurPlq + 2*rayonConge
166 z4 = epaisseurPlq + hauteurFlanc
167 z4p = epaisseurPlq + hauteurFlanc + marge
169 zc = epaisseurPlq + posAxeTrou
170 zc2 = epaisseurPlq + (posAxeTrou -rayonTrou)/3
171 zc3 = epaisseurPlq + 2*(posAxeTrou -rayonTrou)/3
173 # ---- decoupe du fond
175 p11 = geom.MakePointStruct(x1, y1m, z1)
176 p12 = geom.MakePointStruct(x1, y1m, z2)
177 p13 = geom.MakePointStruct(x1, y1m, z3)
178 p14 = geom.MakePointStruct(x1, y1m, z4)
179 pc1 = geom.MakePointStruct(xc, y1m, z1)
180 pc2 = geom.MakePointStruct(xc, y1m, zc2)
181 pc3 = geom.MakePointStruct(xc, y1m, zc3)
182 pcc = geom.MakePointStruct(xc, y1m, zc)
183 pc4 = geom.MakePointStruct(xc, y1m, z4)
184 p21 = geom.MakePointStruct(x2, y1m, z1)
185 p22 = geom.MakePointStruct(x2, y1m, z2)
186 p23 = geom.MakePointStruct(x2, y1m, z3)
187 p24 = geom.MakePointStruct(x2, y1m, z4)
188 pcf = geom.MakePointStruct(xc, y2p, zc)
190 arc2 = geom.MakeArc(p12,pc2,p22)
191 arc3 = geom.MakeArc(p13,pc3,p23)
193 segz1 = geom.MakeVector(p11,p21)
194 #segz4 = geom.MakeVector(p14,p24)
195 segz41 = geom.MakeVector(p14,pc4)
196 segz42 = geom.MakeVector(pc4,p24)
197 segx11 = geom.MakeVector(p11,p12)
198 segx12 = geom.MakeVector(p12,p13)
199 segx13 = geom.MakeVector(p13,p14)
200 segxc2 = geom.MakeVector(pc1,pc2)
201 segxc3 = geom.MakeVector(pc2,pc3)
202 segxc4 = geom.MakeVector(pcc,pc4)
203 segx21 = geom.MakeVector(p21,p22)
204 segx22 = geom.MakeVector(p22,p23)
205 segx23 = geom.MakeVector(p23,p24)
206 segx1c1 = geom.MakeVector(p13,pcc)
207 segx1c2 = geom.MakeVector(p14,pcc)
208 segx2c1 = geom.MakeVector(p23,pcc)
209 segx2c2 = geom.MakeVector(p24,pcc)
212 facef.append(MakeFace([segx13,segx1c2,segx1c1]))
213 facef.append(MakeFace([segx23,segx2c2,segx2c1]))
214 facef.append(MakeFace([segx2c2,segxc4,segz42]))
215 facef.append(MakeFace([segx1c2,segz41,segxc4]))
216 facef.append(MakeFace([segx1c1,arc3,segx2c1]))
217 facef.append(MakeFace([segx12,arc2,segx22,arc3]))
218 facef.append(MakeFace([segx11,segz1,segx21,arc2]))
222 decf.append(geom.MakePrism(face,pcc,pcf))
224 axeCyl = geom.MakeAxisStruct( 0.5*longueurPlq,
226 epaisseurPlq + posAxeTrou,
230 pAxe1 = geom.MakePointStruct(xc, 0., zc)
231 cylFond = geom.MakeCylinder(pAxe1, vy, rayonTrou, 1.1*largeurPlq)
232 cylFond2 = geom.MakeRotation(geom.MakeCopy(cylFond),axeCyl,math.pi)
233 #idcylfond2 = geompy.addToStudy(cylFond2,"cylFond2")
237 fondec.append(geom.MakeBoolean(decf[id],cylFond2,2))
238 fondec.append(geom.MakeBoolean(decf[4],cylFond,2))
240 fondec.append(decf[id])
242 bcut1=geom.MakeBox(x0,y0,z0, xc,y2p,z4p)
243 bcut2=geom.MakeBox(xc,y0,z0, x3,y2p,z4p)
246 fondec2.append(fondec[id])
248 fondec2.append(geom.MakeBoolean(fondec[id],bcut1,1))
249 fondec2.append(geom.MakeBoolean(fondec[id],bcut2,1))
253 ## idfo = geompy.addToStudy(ff, "ff%d"%(iff))
256 # ----- autres blocs de decoupe
258 bcong1=geom.MakeBox(x0,y0,z1, x1,y1,z2)
259 bcong2=geom.MakeBox(x0,y1,z1, x1,y2,z2)
260 bcong3=geom.MakeBox(x2,y0,z1, x3,y1,z2)
261 bcong4=geom.MakeBox(x2,y1,z1, x3,y2,z2)
263 pcylx0 = geom.MakePointStruct(0., -marge, z2)
264 cylcongx0 = geom.MakeCylinder(pcylx0, vy, rayonConge, largeurPlq +2*marge)
265 #idcylcongx0 = geompy.addToStudy(cylcongx0,"cylcongx0")
266 pcylx3 = geom.MakePointStruct(longueurPlq, -marge, z2)
267 cylcongx3 = geom.MakeCylinder(pcylx3, vy, rayonConge, largeurPlq +2*marge)
268 #idcylcongx3 = geompy.addToStudy(cylcongx3,"cylcongx3")
269 pcyly0 = geom.MakePointStruct(-marge, 0., z2)
270 cylcongy0 = geom.MakeCylinder(pcyly0, vx, rayonConge, longueurPlq +2*marge)
271 #idcylcongy0 = geompy.addToStudy(cylcongy0,"cylcongy0")
273 bcong1=geom.MakeBoolean(bcong1,cylcongx0,2)
274 bcong2=geom.MakeBoolean(bcong2,cylcongx0,2)
275 bcong1=geom.MakeBoolean(bcong1,cylcongy0,2)
276 bcong3=geom.MakeBoolean(bcong3,cylcongx3,2)
277 bcong4=geom.MakeBoolean(bcong4,cylcongx3,2)
278 bcong3=geom.MakeBoolean(bcong3,cylcongy0,2)
280 pf1 = geom.MakePointStruct(0., y0h, z3)
281 pf2 = geom.MakePointStruct(0., y1, z3)
282 pf3 = geom.MakePointStruct(0., y1, z4)
283 pf4 = geom.MakePointStruct(0.,0.5*(largeurPlq - epaisseurFond) , z4)
284 vf1 = geom.MakeEdge(pf1,pf2)
285 vf2 = geom.MakeEdge(pf2,pf3)
286 vf3 = geom.MakeEdge(pf3,pf4)
287 faceFlanc = MakeFace([vf1,vf2,vf3,aShape])
288 #idfaceFlanc = geompy.addToStudy(faceFlanc,"faceFlanc")
289 pfe = geom.MakePointStruct(epaisseurFlanc, 0., 0.)
290 flanc1 = geom.MakePrism(faceFlanc, p0, pfe)
291 flanc2 = geom.MakeCopy(flanc1)
292 flanc1 = geom.MakeTranslation(flanc1,
294 flanc2 = geom.MakeTranslation(flanc2,
295 longueurPlq-rayonConge-epaisseurFlanc,0.,0.)
297 # ---- constitution et decoupe des blocs
298 boxfond2 = geom.MakeBox(x0, y1, z0, x3, y2, z4p)
299 #idboxfond2 = geompy.addToStudy(boxfond2,"boxfond2")
303 blocs.append(geom.MakeBoolean(boxfond2, dec, 1))
304 blocs.append(geom.MakeBox(x0,y1,z0, x1,y2,z1))
305 blocs.append(geom.MakeBox(x1,y1,z0, xc,y2,z1))
306 blocs.append(geom.MakeBox(xc,y1,z0, x2,y2,z1))
307 blocs.append(geom.MakeBox(x2,y1,z0, x3,y2,z1))
308 blocs.append(geom.MakeBox(x0,y0,z0, x1,y1,z1))
309 blocs.append(geom.MakeBox(x1,y0,z0, xc,y1,z1))
310 blocs.append(geom.MakeBox(xc,y0,z0, x2,y1,z1))
311 blocs.append(geom.MakeBox(x2,y0,z0, x3,y1,z1))
316 blocs.append(geom.MakeBox(x0h,y1, z2, x1, y2, z3))
317 blocs.append(geom.MakeBox(x2, y1, z2, x3h,y2, z3))
318 blocs.append(geom.MakeBox(x0h,y0h,z2, x1, y1, z3))
319 blocs.append(geom.MakeBox(x2, y0h,z2, x3h,y1, z3))
320 blocs.append(geom.MakeBox(x0h,y1, z3, x1, y2, z4))
321 blocs.append(geom.MakeBox(x2, y1, z3, x3h,y2, z4))
325 compbloc = MakeCompound(blocs)
326 idcomp = geompy.addToStudy(compbloc,"compbloc")
328 # ---- eliminer les faces en double, solid-->shell
330 compshell = geom.MakeGlueFaces(compbloc,tol3d)
331 idcomp = geompy.addToStudy(compshell,"compshell")