Salome HOME
Merge 'master' branch into 'V9_dev' branch
[modules/kernel.git] / src / KERNEL_PY / salome_test.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
3 #
4 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
5 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 #
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation; either
10 # version 2.1 of the License, or (at your option) any later version.
11 #
12 # This library is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 # Lesser General Public License for more details.
16 #
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this library; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
20 #
21 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 #
23
24 print()
25 print("Perform quick test of the application by loading of the GEOM, SMESH, MED, PARAVIS")
26 print("components and doing some operation within the components.")
27 print()
28
29 import salome
30 import SALOME
31 import SALOMEDS
32 import os
33 import sys
34 import SALOME_ModuleCatalog
35
36 step = 1
37
38 print("======================================================================")
39 print("           %d. Initialize study " % step); step+=1
40 print("======================================================================")
41
42 # initialize study
43 salome.salome_init()
44 # get study builder
45 builder = salome.myStudy.NewBuilder()
46 print("OK")
47
48 print() 
49
50 print("======================================================================")
51 print("           %d. Retrieve module catalog " % step); step+=1
52 print("======================================================================")
53
54 obj = salome.naming_service.Resolve('Kernel/ModulCatalog')
55 catalog = obj._narrow(SALOME_ModuleCatalog.ModuleCatalog)
56 if not catalog:
57
58     raise RuntimeError("Can't access module catalog")
59 print("OK")
60
61 print()
62
63 print("======================================================================")
64 print("           %d. Check modules availability in the module catalog " % step); step+=1
65 print("======================================================================")
66
67 for module in [ "GEOM", "SMESH", "MEDFactory", "PVSERVER"]:
68     print()
69     print("--- Check %s ..." % module)
70     comp = catalog.GetComponent(module)
71     if not comp:
72         raise RuntimeError("Component %s is not found in Module Catalog." % module)
73     print("OK")
74     pass
75
76 print()
77
78 print("======================================================================")
79 print("           %d. Test Data Server " % step); step+=1
80 print("======================================================================")
81
82 print()
83 print("--- Create new component ...")
84 comp = builder.NewComponent("TEST")
85 if not comp:
86     raise RuntimeError("Can't create new component")
87 print("OK")
88
89 print()
90 print("--- Create AttributeName ...")
91 A = builder.FindOrCreateAttribute(comp, "AttributeName")
92 if not A:
93     raise RuntimeError("Can't create AttributeName attribute")
94 A.SetValue("TEST")
95 if A.Value() != "TEST":
96     raise RuntimeError("Error : wrong value of  AttributeName")
97 print("OK")
98
99 print()
100 print("--- Create AttributeReal ...")
101 A = builder.FindOrCreateAttribute(comp, "AttributeReal")
102 if not A:
103     raise RuntimeError("Can't create AttributeReal attribute")
104 A.SetValue(0.0001)
105 if A.Value() != 0.0001:
106     raise RuntimeError("Error : wrong value of  AttributeReal")
107 print("OK")
108
109 print()
110
111 print("======================================================================")
112 print("           %d. Test Geometry " % step); step+=1
113 print("======================================================================")
114
115 from salome.geom import geomBuilder
116 geompy = geomBuilder.New()
117
118 ShapeTypeCompSolid = 1
119 ShapeTypeSolid = 2
120 ShapeTypeShell = 3
121 ShapeTypeFace = 4
122 ShapeTypeWire = 5
123 ShapeTypeEdge = 6
124 ShapeTypeVertex = 7
125
126 print()
127 print("--- Create a box ...")
128 box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
129 idbox = geompy.addToStudy(box, "box")
130 box_obj = salome.myStudy.FindObjectByPath("/Geometry/box")
131 if not box_obj:
132     raise RuntimeError("Error : wrong value of  AttributeReal")
133 print("OK")
134
135 # ---- add shell from box in study
136 print() 
137 print("--- Extract shell ...")
138 subShellList = geompy.SubShapeAll(box, ShapeTypeShell)
139 shell = subShellList[0]
140 name = geompy.SubShapeName(shell, box)
141 idshell = geompy.addToStudyInFather(box, shell, name)
142 print(name)
143 print("OK")
144
145 # ---- add first face of box in study
146 print() 
147 print("--- Extract face ...")
148 subShapeList = geompy.SubShapeAll(box, ShapeTypeFace)
149 face = subShapeList[0]
150 name = geompy.SubShapeName(face, box)
151 idface = geompy.addToStudyInFather(box, face, name)
152 print(name)
153 print("OK")
154
155 # ---- add first edge of face in study
156 print() 
157 print("--- Extract edge ...")
158 edgeList = geompy.SubShapeAll(face, ShapeTypeEdge)
159 edge = edgeList[0];
160 name = geompy.SubShapeName(edge, face)
161 idedge = geompy.addToStudyInFather(face, edge, name)
162 print(name)
163 print("OK")
164
165 # ---- update object browser
166 if salome.hasDesktop():
167     salome.sg.updateObjBrowser();
168
169 print()
170
171 print("======================================================================")
172 print("           %d. Test Mesh " % step); step+=1
173 print("======================================================================")
174
175 from salome.StdMeshers import StdMeshersBuilder
176 import SMESH
177 from salome.smesh import smeshBuilder
178
179 smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
180 if salome.hasDesktop():
181     smeshgui = salome.ImportComponentGUI("SMESH")
182     smeshgui.Init();
183 else:
184     smesh = smeshBuilder.New()
185
186 # ---- create hypotheses 
187
188 stdMeshersEngine = "StdMeshersEngine"
189
190 print()
191 print("--- Create hypotheses ...")
192
193 print()
194 print("------ LocalLength ...")
195 hypLen1 = smesh.CreateHypothesis( "LocalLength", stdMeshersEngine )
196 hypLen1.SetLength(100)
197 print(hypLen1.GetName())
198 print(hypLen1.GetId())
199 print(hypLen1.GetLength())
200 if salome.hasDesktop():
201     smeshgui.SetName(salome.ObjectToID(hypLen1), "Local_Length_100")
202 print("OK")
203
204 print()
205 print("------ NumberOfSegments ...")
206 hypNbSeg1= smesh.CreateHypothesis( "NumberOfSegments", stdMeshersEngine )
207 hypNbSeg1.SetNumberOfSegments(7)
208 print(hypNbSeg1.GetName())
209 print(hypNbSeg1.GetId())
210 print(hypNbSeg1.GetNumberOfSegments())
211 if salome.hasDesktop():
212     smeshgui.SetName(salome.ObjectToID(hypNbSeg1), "NumberOfSegments_7")
213 print("OK")
214
215 print()
216 print("------ MaxElementArea [1] ...")
217 hypArea1 = smesh.CreateHypothesis( "MaxElementArea", stdMeshersEngine )
218 hypArea1.SetMaxElementArea(2500)
219 print(hypArea1.GetName())
220 print(hypArea1.GetId())
221 print(hypArea1.GetMaxElementArea())
222 if salome.hasDesktop():
223     smeshgui.SetName(salome.ObjectToID(hypArea1), "MaxElementArea_2500")
224 print("OK")
225
226 print()
227 print("------ MaxElementArea [2] ...")
228 hypArea2 = smesh.CreateHypothesis( "MaxElementArea", stdMeshersEngine )
229 hypArea2.SetMaxElementArea(500)
230 print(hypArea2.GetName())
231 print(hypArea2.GetId())
232 print(hypArea2.GetMaxElementArea())
233 if salome.hasDesktop():
234     smeshgui.SetName(salome.ObjectToID(hypArea2), "MaxElementArea_500")
235 print("OK")
236
237 # ---- create algorithms
238
239 print()
240 print("--- Create algorithms ...")
241
242 print()
243 print("------ Regular_1D ...")
244 algoReg = smesh.CreateHypothesis( "Regular_1D", stdMeshersEngine )
245 listHyp = algoReg.GetCompatibleHypothesis()
246 for hyp in listHyp:
247     print(hyp)
248 print(algoReg.GetName())
249 print(algoReg.GetId())
250 if salome.hasDesktop():
251     smeshgui.SetName(salome.ObjectToID(algoReg), "Regular_1D" )
252 print("OK")
253
254 print()
255 print("------ MEFISTO_2D ...")
256 algoMef = smesh.CreateHypothesis( "MEFISTO_2D", stdMeshersEngine )
257 listHyp=algoMef.GetCompatibleHypothesis()
258 for hyp in listHyp:
259     print(hyp)
260 print(algoMef.GetName())
261 print(algoMef.GetId())
262 if salome.hasDesktop():
263     smeshgui.SetName(salome.ObjectToID(algoMef), "MEFISTO_2D" )
264 print("OK")
265
266 # ---- create mesh on the box, apply hypotheses / algorithms
267
268 print()
269 print("--- Create mesh on the box ...")
270 mesh = smesh.CreateMesh(box)
271 if salome.hasDesktop():
272     smeshgui.SetName( salome.ObjectToID(mesh), "MeshBox" );
273 ret = mesh.AddHypothesis(box, algoReg)
274 ret = mesh.AddHypothesis(box, algoMef)
275 ret = mesh.AddHypothesis(box, hypNbSeg1)
276 ret = mesh.AddHypothesis(box, hypArea1)
277 print("OK")
278
279 # ---- create submesh on the edge, add hypothesis
280
281 print()
282 print("--- Add 1D sub-mesh on the edge ...")
283 submesh = mesh.GetSubMesh(edge, "SubMeshEdge")
284 ret = mesh.AddHypothesis(edge, algoReg)
285 ret = mesh.AddHypothesis(edge, hypLen1)
286 print("OK")
287
288 # ---- create submesh on the edge, add hypothesis
289
290 print()
291 print("--- Add 2D sub-mesh on the face ...")
292 submesh = mesh.GetSubMesh(face, "SubMeshFace")
293 ret = mesh.AddHypothesis(face, hypArea2)
294 print("OK")
295
296 # ---- compute mesh
297 print()
298 print("--- Compute mesh ...")
299 smesh.Compute(mesh, box)
300 print("OK")
301
302 # ---- update object browser
303 if salome.hasDesktop():
304     salome.sg.updateObjBrowser();
305
306 print()
307
308 print("======================================================================")
309 print("           %d. Test Med " % step); step+=1
310 print("======================================================================")
311
312 import medcalc
313 #from medcalc import properties
314 from medcalc.fieldproxy import FieldProxy
315
316 medcalc.medconsole.setConsoleGlobals(globals())
317 try:
318     med_root=os.environ["MED_ROOT_DIR"]
319 except KeyError as e:
320     raise RuntimeError("MED_ROOT_DIR should be defined to load the test data")
321
322 filepath = os.path.join(med_root,"share","salome","resources","med","medcalc_testfiles","smallmesh_varfield.med")
323 medcalc.medio.LoadDataSource(filepath)
324 fieldHandlerList = medcalc.medevents.dataManager.getFieldHandlerList()
325
326 fieldHandler0 = fieldHandlerList[0]
327 print("---Field Handler 0:\n%s" % fieldHandler0)
328 fieldHandler1 = fieldHandlerList[1]
329 print("---Field Handler 1:\n%s" % fieldHandler1)
330
331 print("--- The addition of two fields can be done using field handler directly.")
332 addFieldHandler = medcalc.fieldproxy.calculator.add(fieldHandler0,fieldHandler1)
333 print("--- Result handler:\n%s" % addFieldHandler)
334
335 print("--- Or with a field proxy that easy the writing of operations.")
336 fieldProxy0 = FieldProxy(fieldHandler0)
337 fieldProxy1 = FieldProxy(fieldHandler1)
338
339 resHandler = fieldProxy0 + fieldProxy1
340 if resHandler is None:
341     print("Error: result handler is None!")
342 else:
343     print("--- Result handler:\n%s" % resHandler)
344     print("OK")
345
346 print()
347
348
349 print("======================================================================")
350 print("           %d. Test Paravis " % step); step+=1
351 print("======================================================================")
352
353 if salome.hasDesktop(): # in gui mode
354
355     print("**** Importing pvserver... It can take some time.")
356     import pvserver
357     import pvsimple
358     
359     #====================Stage1: Importing MED file====================
360     
361     print("**** Stage1: Importing MED file")
362     
363     print('Import "ResOK_0000.med"...............', end=' ')
364     medFileName = "ResOK_0000.med"
365     medFile = os.path.join(os.getenv('DATA_DIR'), 'MedFiles', medFileName)
366     pvsimple.MEDReader( FileName=medFile )
367     med_reader = pvsimple.GetActiveSource()
368     
369     if med_reader is None:
370         print("FAILED")
371     else:
372         print("OK")
373     
374     #====================Stage2: Displaying presentation===============
375     
376     print("**** Stage2: Displaying presentation")
377     
378     print('Get view...................', end=' ')
379     view = pvsimple.GetRenderView()
380     if view is None:
381         print("FAILED")
382     else:
383         print ("OK")
384     
385     print("Creating presentation.......",end='')
386     prs = pvsimple.GetRepresentation(med_reader)
387     if prs is None:
388         print("FAILED")
389     else:
390         rep_list = view.Representations
391         for rep in rep_list:
392             if hasattr(rep, 'Visibility'):
393                 rep.Visibility = (rep == prs)
394         pvsimple.Render(view=view) 
395         
396         # ---- surface representation
397         prs.SetRepresentationType('Surface')
398         view.ResetCamera()
399
400         print ("OK")
401     
402 else: # not in gui mode, Paravis can not be tested
403     
404     print()
405     print("PARAVIS module requires SALOME to be running in GUI mode.")
406     print()
407     print("Skipping test for PARAVIS...")
408     pass
409
410 # ---- update object browser
411 if salome.hasDesktop():
412     salome.sg.updateObjBrowser();