]> SALOME platform Git repositories - plugins/blsurfplugin.git/blob - tests/test_periodicity_reflexion_precad.py
Salome HOME
Merge from BR_V7_periodicity 22/08/2013
[plugins/blsurfplugin.git] / tests / test_periodicity_reflexion_precad.py
1 # -*- coding: utf-8 -*-
2
3 import salome
4 import math
5
6 import GEOM
7 from salome.geom import geomBuilder
8 geompy = geomBuilder.New(salome.myStudy)
9
10 simple = False
11
12 r = 10
13 dist = 10
14
15 p1 = geompy.MakeVertex(0., 0., 0.)
16 p2 = geompy.MakeVertex(100., 100., 100.)
17 box = geompy.MakeBoxTwoPnt(p1, p2)
18 geompy.addToStudy(box, "box")
19
20 p3 = geompy.MakeVertex(50., 5., 25.)
21 sphere1 = geompy.MakeSpherePntR(p3, 15.)
22 geompy.addToStudy(sphere1, "sphere1")
23
24 Vx = geompy.MakeVectorDXDYDZ(1, 0, 0)
25 Vy = geompy.MakeVectorDXDYDZ(0, 1, 0)
26 Vz = geompy.MakeVectorDXDYDZ(0, 0, 1)
27
28 p4 = geompy.MakeVertex(100., 0., 0.)
29 axe = geompy.MakePrismVecH(p4, Vz, 1)
30 geompy.addToStudy(axe, "axe")
31
32 sphere1_rota = geompy.MakeRotation(sphere1, axe, -math.pi/2.)
33 geompy.addToStudy(sphere1_rota, "sphere1_rota")
34
35 part = geompy.MakePartition([box], [sphere1, sphere1_rota])
36 geompy.addToStudy(part, "part")
37
38 left_faces = geompy.GetShapesOnPlane(part, geompy.ShapeType["FACE"], Vy, GEOM.ST_ON)
39 left = geompy.CreateGroup(part, geompy.ShapeType["FACE"])
40 geompy.UnionList(left, left_faces)
41 geompy.addToStudyInFather(part, left, "left")
42
43 right_faces = geompy.GetShapesOnPlaneWithLocation(part, geompy.ShapeType["FACE"], Vy, p2, GEOM.ST_ON)
44 right = geompy.CreateGroup(part, geompy.ShapeType["FACE"])
45 geompy.UnionList(right, right_faces)
46 geompy.addToStudyInFather(part, right, "right")
47
48 back_faces = geompy.GetShapesOnPlane(part, geompy.ShapeType["FACE"], Vx, GEOM.ST_ON)
49 back = geompy.CreateGroup(part, geompy.ShapeType["FACE"])
50 geompy.UnionList(back, back_faces)
51 geompy.addToStudyInFather(part, back, "back")
52
53 front_faces = geompy.GetShapesOnPlaneWithLocation(part, geompy.ShapeType["FACE"], Vx, p2, GEOM.ST_ON)
54 front = geompy.CreateGroup(part, geompy.ShapeType["FACE"])
55 geompy.UnionList(front, front_faces)
56 geompy.addToStudyInFather(part, front, "front")
57
58 bottom_faces = geompy.GetShapesOnPlane(part, geompy.ShapeType["FACE"], Vz, GEOM.ST_ON)
59 bottom = geompy.CreateGroup(part, geompy.ShapeType["FACE"])
60 geompy.UnionList(bottom, bottom_faces)
61 geompy.addToStudyInFather(part, bottom, "bottom")
62
63 top_faces = geompy.GetShapesOnPlaneWithLocation(part, geompy.ShapeType["FACE"], Vz, p2, GEOM.ST_ON)
64 top = geompy.CreateGroup(part, geompy.ShapeType["FACE"])
65 geompy.UnionList(top, top_faces)
66 geompy.addToStudyInFather(part, top, "top")
67
68 p1_rota = geompy.MakeRotation(p1, axe, -math.pi/2.)
69 geompy.addToStudy(sphere1_rota, "sphere1_rota")
70
71 p5 = geompy.MakeVertex(100, 0, 100)
72 geompy.addToStudy(p5, "p5")
73
74 # Mesh
75 # ====
76
77 import SMESH
78 from salome.smesh import smeshBuilder
79 smesh = smeshBuilder.New(salome.myStudy)
80
81 Mesh = smesh.Mesh(part, "Mesh")
82
83 algo2d = Mesh.Triangle(algo=smeshBuilder.BLSURF)
84 algo2d.SetGeometricMesh( 1 )
85 algo2d.SetAngleMesh( 4 )
86 algo2d.SetPhySize( 8 )
87
88 # Periodicity
89 #algo2d.SetVerbosity(10)
90 #algo2d.SetPreCADOptionValue("periodic_tolerance", "1e-2")
91 algo2d.AddPreCadFacesPeriodicity(left, front, [p1, p4, p5], [p1_rota, p4, p5])
92
93
94 gr_left = Mesh.Group(left)
95 gr_right = Mesh.Group(right)
96 gr_front = Mesh.Group(front)
97 gr_back = Mesh.Group(back)
98 gr_bottom = Mesh.Group(bottom)
99 gr_top = Mesh.Group(top)
100
101 Mesh.Compute()
102
103 left_rotated = Mesh.RotateObjectMakeMesh( gr_left, axe, -math.pi/2, NewMeshName='left_rotated' )
104
105 def checkProjection(gr, mesh_translated, tol=1e-7):
106     name = gr.GetName() + "_" + mesh_translated.GetName().split("_")[0]
107     mesh_source = smesh.CopyMesh(gr, gr.GetName())
108     mesh_check = smesh.Concatenate([mesh_source.GetMesh(), mesh_translated.GetMesh()], 0, name=name)
109     ll_coincident_nodes = mesh_check.FindCoincidentNodes(tol)
110     coincident_nodes = [item for sublist in ll_coincident_nodes for item in sublist]
111     mesh_check.MakeGroupByIds("coincident_nodes", SMESH.NODE, coincident_nodes)
112     mesh_nodes = mesh_check.GetNodesId()
113     if len(ll_coincident_nodes) != mesh_translated.NbNodes():
114         non_coincident_nodes = list(set(mesh_nodes) - set(coincident_nodes))
115         mesh_check.MakeGroupByIds("non_coincident_nodes", SMESH.NODE, non_coincident_nodes)
116         raise Exception("Projection failed for %s"%name)
117         
118 checkProjection(gr_front, left_rotated)
119
120 salome.sg.updateObjBrowser(0)
121