Salome HOME
Merge branch 'omu/SalomeLauncher'
[modules/kernel.git] / src / KERNEL_PY / salome_test.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2015  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     raise RuntimeError, "Can't accesss module catalog"
58 print "OK"
59
60 print
61
62 print "======================================================================"
63 print "           %d. Check modules availability in the module catalog " % step; step+=1
64 print "======================================================================"
65
66 for module in [ "GEOM", "SMESH", "MEDOPFactory", "PVSERVER"]:
67     print
68     print "--- Check %s ..." % module
69     comp = catalog.GetComponent(module)
70     if not comp:
71         raise RuntimeError, "Component %s is not found in Module Catalog." % module
72     print "OK"
73     pass
74
75 print
76
77 print "======================================================================"
78 print "           %d. Test Data Server " % step; step+=1
79 print "======================================================================"
80
81 print
82 print "--- Create new component ..."
83 comp = builder.NewComponent("TEST")
84 if not comp:
85     raise RuntimeError, "Can't create new component"
86 print "OK"
87
88 print
89 print "--- Create AttributeName ..."
90 A = builder.FindOrCreateAttribute(comp, "AttributeName")
91 if not A:
92     raise RuntimeError, "Can't create AttributeName attribute"
93 A.SetValue("TEST")
94 if A.Value() != "TEST":
95     raise RuntimeError, "Error : wrong value of  AttributeName"
96 print "OK"
97
98 print
99 print "--- Create AttributeReal ..."
100 A = builder.FindOrCreateAttribute(comp, "AttributeReal")
101 if not A:
102     raise RuntimeError, "Can't create AttributeReal attribute"
103 A.SetValue(0.0001)
104 if A.Value() != 0.0001:
105     raise RuntimeError, "Error : wrong value of  AttributeReal"
106 print "OK"
107
108 print
109
110 print "======================================================================"
111 print "           %d. Test Geometry " % step; step+=1
112 print "======================================================================"
113
114 from salome.geom import geomBuilder
115 geompy = geomBuilder.New(salome.myStudy)
116
117 ShapeTypeCompSolid = 1
118 ShapeTypeSolid = 2
119 ShapeTypeShell = 3
120 ShapeTypeFace = 4
121 ShapeTypeWire = 5
122 ShapeTypeEdge = 6
123 ShapeTypeVertex = 7
124
125 print
126 print "--- Create a box ..."
127 box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
128 idbox = geompy.addToStudy(box, "box")
129 box_obj = salome.myStudy.FindObjectByPath("/Geometry/box")
130 if not box_obj:
131     raise RuntimeError, "Error : wrong value of  AttributeReal"
132 print "OK"
133
134 # ---- add shell from box in study
135 print 
136 print "--- Extract shell ..."
137 subShellList = geompy.SubShapeAll(box, ShapeTypeShell)
138 shell = subShellList[0]
139 name = geompy.SubShapeName(shell, box)
140 idshell = geompy.addToStudyInFather(box, shell, name)
141 print name
142 print "OK"
143
144 # ---- add first face of box in study
145 print 
146 print "--- Extract face ..."
147 subShapeList = geompy.SubShapeAll(box, ShapeTypeFace)
148 face = subShapeList[0]
149 name = geompy.SubShapeName(face, box)
150 idface = geompy.addToStudyInFather(box, face, name)
151 print name
152 print "OK"
153
154 # ---- add first edge of face in study
155 print 
156 print "--- Extract edge ..."
157 edgeList = geompy.SubShapeAll(face, ShapeTypeEdge)
158 edge = edgeList[0];
159 name = geompy.SubShapeName(edge, face)
160 idedge = geompy.addToStudyInFather(face, edge, name)
161 print name
162 print "OK"
163
164 # ---- update object browser
165 if salome.hasDesktop():
166     salome.sg.updateObjBrowser(1);
167
168 print
169
170 print "======================================================================"
171 print "           %d. Test Mesh " % step; step+=1
172 print "======================================================================"
173
174 from salome.StdMeshers import StdMeshersBuilder
175 import SMESH
176 from salome.smesh import smeshBuilder
177
178 smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
179 if salome.hasDesktop():
180     smeshgui = salome.ImportComponentGUI("SMESH")
181     smeshgui.Init(salome.myStudyId);
182 else:
183     smesh = smeshBuilder.New(salome.myStudy)
184
185 # ---- create hypotheses 
186
187 if sys.platform == "win32":
188   stdMeshersEngine = "StdMeshersEngine"
189 else:
190   stdMeshersEngine = "libStdMeshersEngine.so"
191
192 print
193 print "--- Create hypotheses ..."
194
195 print
196 print "------ LocalLength ..."
197 hypLen1 = smesh.CreateHypothesis( "LocalLength", stdMeshersEngine )
198 hypLen1.SetLength(100)
199 print hypLen1.GetName()
200 print hypLen1.GetId()
201 print hypLen1.GetLength()
202 if salome.hasDesktop():
203     smeshgui.SetName(salome.ObjectToID(hypLen1), "Local_Length_100")
204 print "OK"
205
206 print
207 print "------ NumberOfSegments ..."
208 hypNbSeg1= smesh.CreateHypothesis( "NumberOfSegments", stdMeshersEngine )
209 hypNbSeg1.SetNumberOfSegments(7)
210 print hypNbSeg1.GetName()
211 print hypNbSeg1.GetId()
212 print hypNbSeg1.GetNumberOfSegments()
213 if salome.hasDesktop():
214     smeshgui.SetName(salome.ObjectToID(hypNbSeg1), "NumberOfSegments_7")
215 print "OK"
216
217 print
218 print "------ MaxElementArea [1] ..."
219 hypArea1 = smesh.CreateHypothesis( "MaxElementArea", stdMeshersEngine )
220 hypArea1.SetMaxElementArea(2500)
221 print hypArea1.GetName()
222 print hypArea1.GetId()
223 print hypArea1.GetMaxElementArea()
224 if salome.hasDesktop():
225     smeshgui.SetName(salome.ObjectToID(hypArea1), "MaxElementArea_2500")
226 print "OK"
227
228 print
229 print "------ MaxElementArea [2] ..."
230 hypArea2 = smesh.CreateHypothesis( "MaxElementArea", stdMeshersEngine )
231 hypArea2.SetMaxElementArea(500)
232 print hypArea2.GetName()
233 print hypArea2.GetId()
234 print hypArea2.GetMaxElementArea()
235 if salome.hasDesktop():
236     smeshgui.SetName(salome.ObjectToID(hypArea2), "MaxElementArea_500")
237 print "OK"
238
239 # ---- create algorithms
240
241 print
242 print "--- Create algorithms ..."
243
244 print
245 print "------ Regular_1D ..."
246 algoReg = smesh.CreateHypothesis( "Regular_1D", stdMeshersEngine )
247 listHyp = algoReg.GetCompatibleHypothesis()
248 for hyp in listHyp:
249     print hyp
250 print algoReg.GetName()
251 print algoReg.GetId()
252 if salome.hasDesktop():
253     smeshgui.SetName(salome.ObjectToID(algoReg), "Regular_1D" )
254 print "OK"
255
256 print
257 print "------ MEFISTO_2D ..."
258 algoMef = smesh.CreateHypothesis( "MEFISTO_2D", stdMeshersEngine )
259 listHyp=algoMef.GetCompatibleHypothesis()
260 for hyp in listHyp:
261     print hyp
262 print algoMef.GetName()
263 print algoMef.GetId()
264 if salome.hasDesktop():
265     smeshgui.SetName(salome.ObjectToID(algoMef), "MEFISTO_2D" )
266 print "OK"
267
268 # ---- create mesh on the box, apply hypotheses / algorithms
269
270 print
271 print "--- Create mesh on the box ..."
272 mesh = smesh.CreateMesh(box)
273 if salome.hasDesktop():
274     smeshgui.SetName( salome.ObjectToID(mesh), "MeshBox" );
275 ret = mesh.AddHypothesis(box, algoReg)
276 ret = mesh.AddHypothesis(box, algoMef)
277 ret = mesh.AddHypothesis(box, hypNbSeg1)
278 ret = mesh.AddHypothesis(box, hypArea1)
279 print "OK"
280
281 # ---- create submesh on the edge, add hypothesis
282
283 print
284 print "--- Add 1D sub-mesh on the edge ..."
285 submesh = mesh.GetSubMesh(edge, "SubMeshEdge")
286 ret = mesh.AddHypothesis(edge, algoReg)
287 ret = mesh.AddHypothesis(edge, hypLen1)
288 print "OK"
289
290 # ---- create submesh on the edge, add hypothesis
291
292 print
293 print "--- Add 2D sub-mesh on the face ..."
294 submesh = mesh.GetSubMesh(face, "SubMeshFace")
295 ret = mesh.AddHypothesis(face, hypArea2)
296 print "OK"
297
298 # ---- compute mesh
299 print
300 print "--- Compute mesh ..."
301 smesh.Compute(mesh, box)
302 print "OK"
303
304 # ---- update object browser
305 if salome.hasDesktop():
306     salome.sg.updateObjBrowser(1);
307
308 print
309
310 print "======================================================================"
311 print "           %d. Test Med " % step; step+=1
312 print "======================================================================"
313
314 import xmed
315 from xmed import properties
316 from xmed.fieldproxy import FieldProxy
317
318 xmed.setConsoleGlobals(globals())
319
320 # Load some test data in the MedDataManager
321 filepath  = properties.testFilePath
322 xmed.dataManager.addDatasource(filepath)
323 fieldHandlerList = xmed.dataManager.getFieldHandlerList()
324
325 fieldHandler0 = fieldHandlerList[0]
326 print "---Field Handler 0:\n%s" % fieldHandler0
327 fieldHandler1 = fieldHandlerList[1]
328 print "---Field Handler 1:\n%s" % fieldHandler1
329
330 print "--- The addition of two fields can be done using field handler directly."
331 addFieldHandler = xmed.calculator.add(fieldHandler0, fieldHandler1)
332 print "--- Result handler:\n%s" % addFieldHandler
333
334 print "--- Or with a field proxy that easy the writing of operations."
335 fieldProxy0 = FieldProxy(fieldHandler0)
336 fieldProxy1 = FieldProxy(fieldHandler1)
337
338 resHandler = fieldProxy0 + fieldProxy1
339 if resHandler is None:
340     print "Error: result handler is None!"
341 else:
342     print "--- Result handler:\n%s" % resHandler
343     print "OK"
344
345 print
346
347
348 print "======================================================================"
349 print "           %d. Test Paravis " % step; step+=1
350 print "======================================================================"
351
352 if salome.hasDesktop(): # in gui mode
353
354     print "**** Importing pvserver... It can take some time."
355     from presentations import *
356     import pvserver
357     import pvsimple
358     
359     my_paravis = pvserver.myPVServerService
360     
361     #====================Stage1: Importing MED file====================
362     
363     print "**** Stage1: Importing MED file"
364     
365     print 'Import "ResOK_0000.med"...............',
366     medFileName = "ResOK_0000.med"
367     medFile = os.path.join(os.getenv('DATA_DIR'), 'MedFiles', medFileName)
368     pvsimple.MEDReader( FileName=medFile )
369     med_reader = pvsimple.GetActiveSource()
370     
371     if med_reader is None:
372         print "FAILED"
373     else:
374         print "OK"
375     
376     cell_entity = EntityType.CELL
377     node_entity = EntityType.NODE
378     
379     #====================Stage2: Displaying vector field===============
380     
381     print "**** Stage3: Displaying vector field"
382     
383     print 'Get view...................',
384     view = pvsimple.GetRenderView()
385     if view is None:
386         print "FAILED"
387     else:
388         reset_view(view)
389         print "OK"
390     
391     print "Creating Scalar Map.......",
392     scalarmap = ScalarMapOnField(med_reader, node_entity, 'vitesse', 2)
393     if scalarmap is None:
394         print "FAILED"
395     else:
396         bar = get_bar()
397         bar.Orientation = 'Horizontal'
398         bar.Position = [0.1, 0.1]
399         bar.Position2 = [0.1, 0.25]
400         bar.AspectRatio = 3
401         
402         display_only(scalarmap, view)
403         print "OK"
404     
405     view.ResetCamera()
406     
407     print "Creating Vectors..........",
408     vectors = VectorsOnField(med_reader, node_entity, 'vitesse', 2)
409     if vectors is None:
410         print "FAILED"
411     else:
412         display_only(vectors, view)
413         print "OK"
414     
415     print "Creating Iso Surfaces.....",
416     isosurfaces = IsoSurfacesOnField(med_reader, node_entity, 'vitesse', 2)
417     if isosurfaces is None:
418         print "FAILED"
419     else:
420         display_only(isosurfaces, view)
421         print "OK"
422     
423     print "Creating Cut Planes.......",
424     cutplanes = CutPlanesOnField(med_reader, node_entity, 'vitesse', 2,
425                                  nb_planes=30, orientation=Orientation.YZ)
426     if cutplanes is None:
427         print "FAILED"
428     else:
429         display_only(cutplanes, view)
430         print "OK"
431     
432     print "Creating Scalar Map On Deformed Shape.......",
433     scalarmapondefshape = DeformedShapeAndScalarMapOnField(med_reader,
434                                                            node_entity,
435                                                            'vitesse', 2,
436                                                            None,
437                                                            cell_entity,
438                                                            'pression')
439     if scalarmapondefshape is None:
440         print "FAILED"
441     else:
442         display_only(scalarmapondefshape, view)
443         print "OK"
444
445 else: # not in gui mode, Paravis can not be tested
446     
447     print
448     print "PARAVIS module requires SALOME to be running in GUI mode."
449     print
450     print "Skipping test for PARAVIS..."
451     pass
452
453 # ---- update object browser
454 if salome.hasDesktop():
455     salome.sg.updateObjBrowser(1);