1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
4 # Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
5 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
21 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
25 print("Perform quick test of the application by loading of the GEOM, SMESH, FIELDS, PARAVIS")
26 print("components and doing some operation within the components.")
35 import SALOME_ModuleCatalog
39 print("======================================================================")
40 print(" %d. Initialize study " % step); step+=1
41 print("======================================================================")
46 builder = salome.myStudy.NewBuilder()
51 print("======================================================================")
52 print(" %d. Retrieve module catalog " % step); step+=1
53 print("======================================================================")
55 obj = salome.naming_service.Resolve('Kernel/ModulCatalog')
56 catalog = obj._narrow(SALOME_ModuleCatalog.ModuleCatalog)
59 raise RuntimeError("Can't access module catalog")
64 print("======================================================================")
65 print(" %d. Check modules availability in the module catalog " % step); step+=1
66 print("======================================================================")
68 for module in [ "GEOM", "SMESH", "MEDFactory", "PVSERVER"]:
70 print("--- Check %s ..." % module)
71 comp = catalog.GetComponent(module)
73 raise RuntimeError("Component %s is not found in Module Catalog." % module)
79 print("======================================================================")
80 print(" %d. Test Data Server " % step); step+=1
81 print("======================================================================")
84 print("--- Create new component ...")
85 comp = builder.NewComponent("TEST")
87 raise RuntimeError("Can't create new component")
91 print("--- Create AttributeName ...")
92 A = builder.FindOrCreateAttribute(comp, "AttributeName")
94 raise RuntimeError("Can't create AttributeName attribute")
96 if A.Value() != "TEST":
97 raise RuntimeError("Error : wrong value of AttributeName")
101 print("--- Create AttributeReal ...")
102 A = builder.FindOrCreateAttribute(comp, "AttributeReal")
104 raise RuntimeError("Can't create AttributeReal attribute")
106 if A.Value() != 0.0001:
107 raise RuntimeError("Error : wrong value of AttributeReal")
112 print("======================================================================")
113 print(" %d. Test Geometry " % step); step+=1
114 print("======================================================================")
116 from salome.geom import geomBuilder
117 geompy = geomBuilder.New()
119 ShapeTypeCompSolid = 1
128 print("--- Create a box ...")
129 box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
130 idbox = geompy.addToStudy(box, "box")
131 box_obj = salome.myStudy.FindObjectByPath("/Geometry/box")
133 raise RuntimeError("Error : wrong value of AttributeReal")
136 # ---- add shell from box in study
138 print("--- Extract shell ...")
139 subShellList = geompy.SubShapeAll(box, ShapeTypeShell)
140 shell = subShellList[0]
141 name = geompy.SubShapeName(shell, box)
142 idshell = geompy.addToStudyInFather(box, shell, name)
146 # ---- add first face of box in study
148 print("--- Extract face ...")
149 subShapeList = geompy.SubShapeAll(box, ShapeTypeFace)
150 face = subShapeList[0]
151 name = geompy.SubShapeName(face, box)
152 idface = geompy.addToStudyInFather(box, face, name)
156 # ---- add first edge of face in study
158 print("--- Extract edge ...")
159 edgeList = geompy.SubShapeAll(face, ShapeTypeEdge)
161 name = geompy.SubShapeName(edge, face)
162 idedge = geompy.addToStudyInFather(face, edge, name)
166 # ---- update object browser
167 if salome.hasDesktop():
168 salome.sg.updateObjBrowser();
172 print("======================================================================")
173 print(" %d. Test Mesh " % step); step+=1
174 print("======================================================================")
176 from salome.StdMeshers import StdMeshersBuilder
178 from salome.smesh import smeshBuilder
180 smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
181 if salome.hasDesktop():
182 smeshgui = salome.ImportComponentGUI("SMESH")
185 smesh = smeshBuilder.New()
187 # ---- create hypotheses
189 stdMeshersEngine = "StdMeshersEngine"
192 print("--- Create hypotheses ...")
195 print("------ LocalLength ...")
196 hypLen1 = smesh.CreateHypothesis( "LocalLength", stdMeshersEngine )
197 hypLen1.SetLength(100)
198 print(hypLen1.GetName())
199 print(hypLen1.GetId())
200 print(hypLen1.GetLength())
201 if salome.hasDesktop():
202 smeshgui.SetName(salome.ObjectToID(hypLen1), "Local_Length_100")
206 print("------ NumberOfSegments ...")
207 hypNbSeg1= smesh.CreateHypothesis( "NumberOfSegments", stdMeshersEngine )
208 hypNbSeg1.SetNumberOfSegments(7)
209 print(hypNbSeg1.GetName())
210 print(hypNbSeg1.GetId())
211 print(hypNbSeg1.GetNumberOfSegments())
212 if salome.hasDesktop():
213 smeshgui.SetName(salome.ObjectToID(hypNbSeg1), "NumberOfSegments_7")
217 print("------ MaxElementArea [1] ...")
218 hypArea1 = smesh.CreateHypothesis( "MaxElementArea", stdMeshersEngine )
219 hypArea1.SetMaxElementArea(2500)
220 print(hypArea1.GetName())
221 print(hypArea1.GetId())
222 print(hypArea1.GetMaxElementArea())
223 if salome.hasDesktop():
224 smeshgui.SetName(salome.ObjectToID(hypArea1), "MaxElementArea_2500")
228 print("------ MaxElementArea [2] ...")
229 hypArea2 = smesh.CreateHypothesis( "MaxElementArea", stdMeshersEngine )
230 hypArea2.SetMaxElementArea(500)
231 print(hypArea2.GetName())
232 print(hypArea2.GetId())
233 print(hypArea2.GetMaxElementArea())
234 if salome.hasDesktop():
235 smeshgui.SetName(salome.ObjectToID(hypArea2), "MaxElementArea_500")
238 # ---- create algorithms
241 print("--- Create algorithms ...")
244 print("------ Regular_1D ...")
245 algoReg = smesh.CreateHypothesis( "Regular_1D", stdMeshersEngine )
246 listHyp = algoReg.GetCompatibleHypothesis()
249 print(algoReg.GetName())
250 print(algoReg.GetId())
251 if salome.hasDesktop():
252 smeshgui.SetName(salome.ObjectToID(algoReg), "Regular_1D" )
256 print("------ MEFISTO_2D ...")
257 algoMef = smesh.CreateHypothesis( "MEFISTO_2D", stdMeshersEngine )
258 listHyp=algoMef.GetCompatibleHypothesis()
261 print(algoMef.GetName())
262 print(algoMef.GetId())
263 if salome.hasDesktop():
264 smeshgui.SetName(salome.ObjectToID(algoMef), "MEFISTO_2D" )
267 # ---- create mesh on the box, apply hypotheses / algorithms
270 print("--- Create mesh on the box ...")
271 mesh = smesh.CreateMesh(box)
272 if salome.hasDesktop():
273 smeshgui.SetName( salome.ObjectToID(mesh), "MeshBox" );
274 ret = mesh.AddHypothesis(box, algoReg)
275 ret = mesh.AddHypothesis(box, algoMef)
276 ret = mesh.AddHypothesis(box, hypNbSeg1)
277 ret = mesh.AddHypothesis(box, hypArea1)
280 # ---- create submesh on the edge, add hypothesis
283 print("--- Add 1D sub-mesh on the edge ...")
284 submesh = mesh.GetSubMesh(edge, "SubMeshEdge")
285 ret = mesh.AddHypothesis(edge, algoReg)
286 ret = mesh.AddHypothesis(edge, hypLen1)
289 # ---- create submesh on the edge, add hypothesis
292 print("--- Add 2D sub-mesh on the face ...")
293 submesh = mesh.GetSubMesh(face, "SubMeshFace")
294 ret = mesh.AddHypothesis(face, hypArea2)
299 print("--- Compute mesh ...")
300 smesh.Compute(mesh, box)
303 # ---- update object browser
304 if salome.hasDesktop():
305 salome.sg.updateObjBrowser();
309 print("======================================================================")
310 print(" %d. Test Fields " % step); step+=1
311 print("======================================================================")
314 #from medcalc import properties
315 from medcalc.fieldproxy import FieldProxy
317 medcalc.medconsole.setConsoleGlobals(globals())
319 med_root=os.environ["FIELDS_ROOT_DIR"]
320 except KeyError as e:
321 raise RuntimeError("FIELDS_ROOT_DIR should be defined to load the test data")
323 filepath = os.path.join(med_root,"share","salome","resources","fields","medcalc_testfiles","smallmesh_varfield.med")
324 medcalc.medio.LoadDataSource(filepath)
325 fieldHandlerList = medcalc.medevents.dataManager.getFieldHandlerList()
327 fieldHandler0 = fieldHandlerList[0]
328 print("---Field Handler 0:\n%s" % fieldHandler0)
329 fieldHandler1 = fieldHandlerList[1]
330 print("---Field Handler 1:\n%s" % fieldHandler1)
332 print("--- The addition of two fields can be done using field handler directly.")
333 addFieldHandler = medcalc.fieldproxy.calculator.add(fieldHandler0,fieldHandler1)
334 print("--- Result handler:\n%s" % addFieldHandler)
336 print("--- Or with a field proxy that easy the writing of operations.")
337 fieldProxy0 = FieldProxy(fieldHandler0)
338 fieldProxy1 = FieldProxy(fieldHandler1)
340 resHandler = fieldProxy0 + fieldProxy1
341 if resHandler is None:
342 print("Error: result handler is None!")
344 print("--- Result handler:\n%s" % resHandler)
350 print("======================================================================")
351 print(" %d. Test Paravis " % step); step+=1
352 print("======================================================================")
354 if salome.hasDesktop(): # in gui mode
356 print("**** Importing pvserver... It can take some time.")
357 import pvsimple as pvs
359 #====================Stage1: Importing MED file====================
361 print("**** Stage1: Importing MED file")
363 med_file = "ResOK_0000.med"
364 print("Import '{}'...............".format(med_file), end=' ')
365 path = os.path.join(os.getenv('DATA_DIR'), 'MedFiles', med_file)
366 med_reader = pvs.MEDReader(FileName=path)
367 if med_reader is None:
371 times = med_reader.TimestepValues.GetData()
373 #====================Stage2: Displaying presentation===============
375 print("**** Stage2: Displaying presentation")
377 # -----------------------------------------------------------------
378 print('Get view...................', end=' ')
379 view = pvs.GetRenderView()
386 # -----------------------------------------------------------------
387 print("Show mesh..................", end=' ')
388 mesh = pvs.Show(med_reader, view)
394 mesh.Representation = 'Surface With Edges'
398 # -----------------------------------------------------------------
399 print("Show scalar map............", end=' ')
401 if scalar_map is None:
405 scalar_map.Representation = 'Surface'
406 pvs.ColorBy(scalar_map, ('POINTS', 'vitesse', 'Magnitude'))
407 #scalar_map.SetScalarBarVisibility(view, True)
408 view.ViewTime = times[-1]
411 scalar_map.Visibility = 0
414 # -----------------------------------------------------------------
415 print("Show vectors...............", end=' ')
416 calc = pvs.Calculator(Input=med_reader)
417 calc.ResultArrayName = 'vitesse_3c'
418 calc.Function = 'iHat * vitesse_X + jHat * vitesse_Y + kHat * 0'
419 glyph = pvs.Glyph(Input=calc, GlyphType='Arrow')
420 glyph.OrientationArray = ['POINTS', 'vitesse_3c']
421 glyph.ScaleArray = ['POINTS', 'No scale array']
422 glyph.MaximumGlyphSize = 0.01
423 vectors = pvs.Show(glyph, view)
428 vectors.Representation = 'Surface'
431 vectors.Visibility = 0
434 # -----------------------------------------------------------------
435 print("Show iso surfaces..........", end=' ')
436 merge_blocks = pvs.MergeBlocks(Input=med_reader)
437 calc = pvs.Calculator(Input=merge_blocks)
438 calc.ResultArrayName = 'vitesse_magnitude'
439 calc.Function = 'sqrt(vitesse_X^2+vitesse_Y^2)'
440 data_range = med_reader.GetPointDataInformation()['vitesse'].GetComponentRange(-1)
442 surfaces = [data_range[0] + i*(data_range[1]-data_range[0])/(nb_surfaces-1) for i in range(nb_surfaces)]
443 contour = pvs.Contour(Input=calc)
444 contour.ComputeScalars = 1
445 contour.ContourBy = ['POINTS', 'vitesse_magnitude']
446 contour.Isosurfaces = surfaces
447 iso_surfaces = pvs.Show(contour, view)
448 if iso_surfaces is None:
452 iso_surfaces.Representation = 'Surface'
453 pvs.ColorBy(iso_surfaces, ('POINTS', 'vitesse', 'Magnitude'))
456 iso_surfaces.Visibility = 0
459 # -----------------------------------------------------------------
460 print("Show cut planes............", end=' ')
461 slice = pvs.Slice(Input=med_reader)
462 slice.SliceType = "Plane"
463 slice.SliceType.Normal = [1.0, 0.0, 0.0]
464 bounds = med_reader.GetDataInformation().GetBounds()
467 b_left = bounds[0] + (bounds[1]-bounds[0])*displacement/100
468 b_right = bounds[1] - (bounds[1]-bounds[0])*displacement/100
469 b_range = b_right - b_left
470 positions = [b_left + i*b_range/(nb_planes-1) for i in range(nb_planes)]
471 slice.SliceOffsetValues = positions
472 pvs.Hide3DWidgets(proxy=slice.SliceType)
473 cut_planes = pvs.Show(slice, view)
474 if cut_planes is None:
478 cut_planes.Representation = 'Surface'
479 pvs.ColorBy(cut_planes, ('POINTS', 'vitesse', 'Magnitude'))
482 cut_planes.Visibility = 0
485 # -----------------------------------------------------------------
486 print("Show deformed shape........", end=' ')
487 merge_blocks = pvs.MergeBlocks(Input=med_reader)
488 calc = pvs.Calculator(Input=merge_blocks)
489 calc.ResultArrayName = 'vitesse_3c'
490 calc.Function = 'iHat * vitesse_X + jHat * vitesse_Y + kHat * 0'
491 warp = pvs.WarpByVector(Input=calc)
492 warp.Vectors = ['POINTS', 'vitesse_3c']
493 warp.ScaleFactor = 0.5
494 deformed_shape = pvs.Show(warp, view)
495 if deformed_shape is None:
499 deformed_shape.Representation = 'Surface'
500 pvs.ColorBy(deformed_shape, ('CELLS', 'pression'))
503 deformed_shape.Visibility = 0
506 else: # not in gui mode, Paravis can not be tested
509 print("PARAVIS module requires SALOME to be running in GUI mode.")
511 print("Skipping test for PARAVIS...")
514 # ---- update object browser
515 if salome.hasDesktop():
516 salome.sg.updateObjBrowser();