127 lines
5.2 KiB
Python
127 lines
5.2 KiB
Python
import sys
|
|
import salome
|
|
|
|
salome.salome_init()
|
|
|
|
import GEOM
|
|
from salome.geom import geomBuilder
|
|
import math
|
|
import SALOMEDS
|
|
|
|
geompy = geomBuilder.New()
|
|
|
|
def bodyCenteredCubic(alpha):
|
|
O = geompy.MakeVertex(0, 0, 0)
|
|
OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
|
|
OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
|
|
OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
|
|
V_1 = geompy.MakeVectorDXDYDZ(1, 1, 0)
|
|
V_2 = geompy.MakeVectorDXDYDZ(1, -1, 0)
|
|
|
|
L = 1.0
|
|
L2 = L/2
|
|
r0 = L*math.sqrt(3)/4
|
|
a = L*math.sqrt(2)
|
|
a2 = a/2
|
|
h4 = L/4
|
|
Pi_4 = 45*math.pi/180.0
|
|
|
|
sk = geompy.Sketcher3D()
|
|
sk.addPointsAbsolute(0, 0, 2*L) #Vertex_1 of Rombus
|
|
sk.addPointsAbsolute(L, 0, L) #Vertex_2 of Rombus
|
|
sk.addPointsAbsolute(L, L, 0) #Vertex_3 of Rombus
|
|
sk.addPointsAbsolute(0, L, L) #Vertex_4 of Rombus
|
|
sk.addPointsAbsolute(0, 0, 2*L) #Vertex_1 of Rombus
|
|
a3D_Sketcher_1 = sk.wire()
|
|
Face_1 = geompy.MakeFaceWires([a3D_Sketcher_1], 1)
|
|
Extrusion_1 = geompy.MakePrismDXDYDZ(Face_1, L2, L2, L2)
|
|
|
|
sk2 = geompy.Sketcher3D()
|
|
sk2.addPointsAbsolute(L/3, L/3, 4*L/3) #Vertex_1 of Rombus
|
|
sk2.addPointsAbsolute(L, 0, L) #Vertex_2 of Rombus
|
|
sk2.addPointsAbsolute(2*L/3, 2*L/3, 2*L/3) #Vertex_3 of Rombus
|
|
#sk2.addPointsAbsolute(0, L, L) #Vertex_4 of Rombus
|
|
sk2.addPointsAbsolute(L/3, L/3, 4*L/3) #Vertex_1 of Rombus
|
|
a3D_Sketcher_2 = sk2.wire()
|
|
Face_2 = geompy.MakeFaceWires([a3D_Sketcher_2], 1)
|
|
Extrusion_2 = geompy.MakePrismDXDYDZ(Face_2, L2, L2, L2)
|
|
|
|
Box_1 = geompy.MakeBoxDXDYDZ(a, a, L)
|
|
Rotation_1 = geompy.MakeRotation(Box_1, OZ, Pi_4)
|
|
Translation_1 = geompy.MakeTranslation(Rotation_1, L, 0, 0)
|
|
Translation_2 = geompy.MakeTranslation(Translation_1, 0, 0, h4)
|
|
|
|
Box_2 = geompy.MakeBoxDXDYDZ(a2, a2, L)
|
|
Rotation_2 = geompy.MakeRotation(Box_2, OZ, Pi_4)
|
|
Translation_3 = geompy.MakeTranslation(Rotation_2, L, 0, h4)
|
|
|
|
Box_3 = geompy.MakeBoxDXDYDZ(a2, a2, L2)
|
|
Rotation_3 = geompy.MakeRotation(Box_3, OZ, Pi_4)
|
|
Translation_4 = geompy.MakeTranslation(Rotation_3, L, 0, h4)
|
|
|
|
geompy.addToStudy( O, 'O' )
|
|
geompy.addToStudy( OX, 'OX' )
|
|
geompy.addToStudy( OY, 'OY' )
|
|
geompy.addToStudy( OZ, 'OZ' )
|
|
geompy.addToStudy( V_1, 'V_1' )
|
|
geompy.addToStudy( V_2, 'V_2' )
|
|
geompy.addToStudy( Box_1, 'Box_1' )
|
|
geompy.addToStudy( Rotation_1, 'Rotation_1' )
|
|
geompy.addToStudy( Translation_1, 'Translation_1' )
|
|
geompy.addToStudy( Translation_2, 'Translation_2' )
|
|
geompy.addToStudy( Box_2, 'Box_2' )
|
|
geompy.addToStudy( Rotation_2, 'Rotation_2' )
|
|
geompy.addToStudy( Translation_3, 'Translation_3' )
|
|
geompy.addToStudy( Rotation_3, 'Rotation_3' )
|
|
geompy.addToStudy( Translation_4, 'Translation_4' )
|
|
|
|
#geompy.addToStudy( a3D_Sketcher_1, 'a3D_Sketcher_1' )
|
|
#geompy.addToStudy( Face_1, 'Face_1' )
|
|
geompy.addToStudy( Extrusion_1, 'Extrusion_1' )
|
|
#geompy.addToStudy( a3D_Sketcher_2, 'a3D_Sketcher_1' )
|
|
#geompy.addToStudy( Face_2, 'Face_2' )
|
|
geompy.addToStudy( Extrusion_2, 'Extrusion_2' )
|
|
|
|
Radius = r0/(1-alpha)
|
|
Sphere_1 = geompy.MakeSphereR(Radius)
|
|
Down = geompy.MakeMultiTranslation2D(Sphere_1, OX, L, 3, OY, L, 3)
|
|
Up = geompy.MakeTranslation(Down, 0, 0, 2*L)
|
|
Up_Down = geompy.MakeMultiTranslation1D(Down, OZ, L, 3)
|
|
Cut_1a = geompy.MakeCutList(Translation_1, [Up_Down])
|
|
Cut_1b = geompy.MakeCutList(Translation_2, [Up_Down])
|
|
Cut_2a = geompy.MakeCutList(Translation_3, [Up_Down])
|
|
Cut_2b = geompy.MakeCutList(Translation_4, [Up_Down])
|
|
Cut_3a = geompy.MakeCutList(Extrusion_1, [Up_Down])
|
|
Cut_3b = geompy.MakeCutList(Extrusion_2, [Up_Down])
|
|
Middle = geompy.MakeTranslation(Up_Down, L2, L2, L2)
|
|
Pore_1a = geompy.MakeCutList(Cut_1a, [Middle])
|
|
Pore_1b = geompy.MakeCutList(Cut_1b, [Middle])
|
|
Pore_2a = geompy.MakeCutList(Cut_2a, [Middle])
|
|
Pore_2b = geompy.MakeCutList(Cut_2b, [Middle])
|
|
Pore_3a = geompy.MakeCutList(Cut_3a, [Middle])
|
|
Pore_3b = geompy.MakeCutList(Cut_3b, [Middle])
|
|
|
|
geompy.addToStudy( Sphere_1, 'Sphere_' )
|
|
geompy.addToStudy( Down, 'Down_' )
|
|
geompy.addToStudy( Up, 'Up_' )
|
|
geompy.addToStudy( Up_Down, 'Up_Down_' )
|
|
geompy.addToStudy( Cut_1a, 'Cut_1a_' )
|
|
geompy.addToStudy( Cut_1b, 'Cut_1b_' )
|
|
geompy.addToStudy( Middle, 'Middle_' )
|
|
geompy.addToStudy( Pore_1a, 'Pore_1a_' )
|
|
geompy.addToStudy( Pore_1b, 'Pore_1b_' )
|
|
geompy.addToStudy( Pore_2a, 'Pore_2a_' )
|
|
geompy.addToStudy( Pore_2b, 'Pore_2b_' )
|
|
geompy.addToStudy( Pore_3a, 'Pore_3a_' )
|
|
geompy.addToStudy( Pore_3b, 'Pore_3b_' )
|
|
|
|
if salome.sg.hasDesktop():
|
|
salome.sg.updateObjBrowser()
|
|
|
|
grains = geompy.ExtractShapes(Up_Down, geompy.ShapeType["SOLID"], True)
|
|
grains += geompy.ExtractShapes(Middle, geompy.ShapeType["SOLID"], True)
|
|
|
|
grains = geompy.MakeFuseList(grains, False, False)
|
|
|
|
return grains, Pore_1a, Pore_3a
|