Salome HOME
Delete theStudy parameter from smeshBuilder.New() method
[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     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", "MEDFactory", "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(True);
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();
182 else:
183     smesh = smeshBuilder.New()
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(True);
307
308 print
309
310 print "======================================================================"
311 print "           %d. Test Med " % step; step+=1
312 print "======================================================================"
313
314 import medcalc
315 #from medcalc import properties
316 from medcalc.fieldproxy import FieldProxy
317
318 medcalc.medconsole.setConsoleGlobals(globals())
319 try:
320     med_root=os.environ["MED_ROOT_DIR"]
321 except KeyError, e:
322     raise RuntimeError("MED_ROOT_DIR should be defined to load the test data")
323
324 filepath = os.path.join(med_root,"share","salome","resources","med","medcalc_testfiles","smallmesh_varfield.med")
325 medcalc.medio.LoadDataSource(filepath)
326 fieldHandlerList = medcalc.medevents.dataManager.getFieldHandlerList()
327
328 fieldHandler0 = fieldHandlerList[0]
329 print "---Field Handler 0:\n%s" % fieldHandler0
330 fieldHandler1 = fieldHandlerList[1]
331 print "---Field Handler 1:\n%s" % fieldHandler1
332
333 print "--- The addition of two fields can be done using field handler directly."
334 addFieldHandler = medcalc.fieldproxy.calculator.add(fieldHandler0,fieldHandler1)
335 print "--- Result handler:\n%s" % addFieldHandler
336
337 print "--- Or with a field proxy that easy the writing of operations."
338 fieldProxy0 = FieldProxy(fieldHandler0)
339 fieldProxy1 = FieldProxy(fieldHandler1)
340
341 resHandler = fieldProxy0 + fieldProxy1
342 if resHandler is None:
343     print "Error: result handler is None!"
344 else:
345     print "--- Result handler:\n%s" % resHandler
346     print "OK"
347
348 print
349
350
351 print "======================================================================"
352 print "           %d. Test Paravis " % step; step+=1
353 print "======================================================================"
354
355 if salome.hasDesktop(): # in gui mode
356
357     print "**** Importing pvserver... It can take some time."
358     from presentations import *
359     import pvserver
360     import pvsimple
361     
362     my_paravis = pvserver.myPVServerService
363     
364     #====================Stage1: Importing MED file====================
365     
366     print "**** Stage1: Importing MED file"
367     
368     print 'Import "ResOK_0000.med"...............',
369     medFileName = "ResOK_0000.med"
370     medFile = os.path.join(os.getenv('DATA_DIR'), 'MedFiles', medFileName)
371     pvsimple.MEDReader( FileName=medFile )
372     med_reader = pvsimple.GetActiveSource()
373     
374     if med_reader is None:
375         print "FAILED"
376     else:
377         print "OK"
378     
379     cell_entity = EntityType.CELL
380     node_entity = EntityType.NODE
381     
382     #====================Stage2: Displaying vector field===============
383     
384     print "**** Stage3: Displaying vector field"
385     
386     print 'Get view...................',
387     view = pvsimple.GetRenderView()
388     if view is None:
389         print "FAILED"
390     else:
391         reset_view(view)
392         print "OK"
393     
394     print "Creating Scalar Map.......",
395     scalarmap = ScalarMapOnField(med_reader, node_entity, 'vitesse', 2)
396     if scalarmap is None:
397         print "FAILED"
398     else:
399         bar = get_bar()
400         bar.Orientation = 'Horizontal'
401         bar.Position = [0.1, 0.1]
402         bar.Position2 = [0.1, 0.25]
403         bar.AspectRatio = 3
404         
405         display_only(scalarmap, view)
406         print "OK"
407     
408     view.ResetCamera()
409     
410     print "Creating Vectors..........",
411     vectors = VectorsOnField(med_reader, node_entity, 'vitesse', 2)
412     if vectors is None:
413         print "FAILED"
414     else:
415         display_only(vectors, view)
416         print "OK"
417     
418     print "Creating Iso Surfaces.....",
419     isosurfaces = IsoSurfacesOnField(med_reader, node_entity, 'vitesse', 2)
420     if isosurfaces is None:
421         print "FAILED"
422     else:
423         display_only(isosurfaces, view)
424         print "OK"
425     
426     print "Creating Cut Planes.......",
427     cutplanes = CutPlanesOnField(med_reader, node_entity, 'vitesse', 2,
428                                  nb_planes=30, orientation=Orientation.YZ)
429     if cutplanes is None:
430         print "FAILED"
431     else:
432         display_only(cutplanes, view)
433         print "OK"
434     
435     print "Creating Scalar Map On Deformed Shape.......",
436     scalarmapondefshape = DeformedShapeAndScalarMapOnField(med_reader,
437                                                            node_entity,
438                                                            'vitesse', 2,
439                                                            None,
440                                                            cell_entity,
441                                                            'pression')
442     if scalarmapondefshape is None:
443         print "FAILED"
444     else:
445         display_only(scalarmapondefshape, view)
446         print "OK"
447
448 else: # not in gui mode, Paravis can not be tested
449     
450     print
451     print "PARAVIS module requires SALOME to be running in GUI mode."
452     print
453     print "Skipping test for PARAVIS..."
454     pass
455
456 # ---- update object browser
457 if salome.hasDesktop():
458     salome.sg.updateObjBrowser(True);