Salome HOME
Fix problem in salome_test.py caused by recent replacement of pointe.med file
[modules/kernel.git] / src / KERNEL_PY / salome_test.py
1 #  -*- coding: iso-8859-1 -*-
2 #  Copyright (C) 2007-2008  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.
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 #  SALOME SALOME_SWIG : binding of C++ implementation and Python
24 #  File   : salome_test.py
25 #  Module : SALOME
26 #
27 print "Test the application loading  GEOM, SMESH, VISU, MED, components and doing some"
28 print "operation within the components."
29
30 import salome
31 from salome import sg
32 import SALOMEDS
33 import os
34 import sys
35
36 import SALOME_ModuleCatalog
37
38 print "======================================================================"
39 print "           Check, that there is no data of MED component in the Study "
40 print "======================================================================"
41
42 MedComp = salome.myStudy.FindComponent("MED")
43 if MedComp is not None:
44         print ""
45         print "This script cannot work properly, because there are"
46         print "some MED component data already exists in the study."
47         print "Execution aborted."
48         print ""
49         raise RuntimeError, "Please, run this script only in a new empty study."
50
51 print "======================================================================"
52 print "           Get Catalog "
53 print "======================================================================"
54 obj = salome.naming_service.Resolve('Kernel/ModulCatalog')
55 catalog = obj._narrow(SALOME_ModuleCatalog.ModuleCatalog)
56
57 print "======================================================================"
58 print "           Create Study "
59 print "======================================================================"
60
61 comp = catalog.GetComponent("GEOM")
62 if comp is None:
63         raise RuntimeError,"Component GEOM not found in Module Catalog."
64
65 import geompy
66
67 print "================================="
68 print "       create AttributeReal      "
69 print "================================="
70 A = geompy.myBuilder.FindOrCreateAttribute(geompy.father, "AttributeReal")
71 if A == None :
72         raise  RuntimeError, "Can't create AttributeReal attribute"
73 A = A._narrow(SALOMEDS.AttributeReal)
74 A.SetValue(0.0001)
75 if A.Value() != 0.0001:
76         raise  RuntimeError, "Error : wrong value of  AttributeReal"
77
78 print
79 print " ===========  Test Geometry  =========================="
80 print
81
82 print "==================================="
83 print "     define a box"
84 print "==================================="
85
86 box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
87 idbox = geompy.addToStudy(box,"box")
88
89 print
90 print "=============  Test SMESH  ============================="
91 print
92
93 import StdMeshers
94
95 comp = catalog.GetComponent("SMESH")
96 if comp is None:
97         raise RuntimeError,"Component SMESH not found in Module Catalog."
98
99 comp = catalog.GetComponent("MED")
100 if comp is None:
101         raise RuntimeError,"Component MED not found in Module Catalog."
102
103 import SMESH
104
105 geom = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM")
106 myBuilder = salome.myStudy.NewBuilder()
107
108 smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
109 smeshgui = salome.ImportComponentGUI("SMESH")
110 smeshgui.Init(salome.myStudyId);
111
112 ShapeTypeCompSolid = 1
113 ShapeTypeSolid = 2
114 ShapeTypeShell = 3
115 ShapeTypeFace = 4
116 ShapeTypeWire = 5
117 ShapeTypeEdge = 6
118 ShapeTypeVertex = 7
119
120 # ---- define a box
121
122 box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
123 idbox = geompy.addToStudy(box,"box")
124
125 # ---- add first face of box in study
126
127 subShapeList=geompy.SubShapeAll(box,ShapeTypeFace)
128 face=subShapeList[0]
129 name = geompy.SubShapeName(face, box)
130 print name
131 idface=geompy.addToStudyInFather(box,face,name)
132
133 # ---- add shell from box  in study
134
135 subShellList=geompy.SubShapeAll(box,ShapeTypeShell)
136 shell = subShellList[0]
137 name = geompy.SubShapeName(shell, box)
138 print name
139 idshell=geompy.addToStudyInFather(box,shell,name)
140
141 # ---- add first edge of face in study
142
143 edgeList = geompy.SubShapeAll(face,ShapeTypeEdge)
144 edge=edgeList[0];
145 name = geompy.SubShapeName(edge, face)
146 print name
147 idedge=geompy.addToStudyInFather(face,edge,name)
148
149
150 # ---- SMESH 
151
152 # ---- create Hypothesis
153
154 if sys.platform == "win32":
155   stdMeshersEngine = "StdMeshersEngine"
156 else:
157   stdMeshersEngine = "libStdMeshersEngine.so"
158
159 print "-------------------------- create Hypothesis"
160 print "-------------------------- LocalLength"
161 hypLen1 = smesh.CreateHypothesis( "LocalLength", stdMeshersEngine )
162 hypLen1.SetLength(100)
163 print hypLen1.GetName()
164 print hypLen1.GetId()
165 print hypLen1.GetLength()
166
167 smeshgui.SetName(salome.ObjectToID(hypLen1), "Local_Length_100")
168
169 print "-------------------------- NumberOfSegments"
170 hypNbSeg1= smesh.CreateHypothesis( "NumberOfSegments", stdMeshersEngine )
171 hypNbSeg1.SetNumberOfSegments(7)
172 print hypNbSeg1.GetName()
173 print hypNbSeg1.GetId()
174 print hypNbSeg1.GetNumberOfSegments()
175
176 smeshgui.SetName(salome.ObjectToID(hypNbSeg1), "NumberOfSegments_7")
177
178 print "-------------------------- MaxElementArea"
179 hypArea1 = smesh.CreateHypothesis( "MaxElementArea", stdMeshersEngine )
180 hypArea1.SetMaxElementArea(2500)
181 print hypArea1.GetName()
182 print hypArea1.GetId()
183 print hypArea1.GetMaxElementArea()
184
185 smeshgui.SetName(salome.ObjectToID(hypArea1), "MaxElementArea_2500")
186
187 print "-------------------------- MaxElementArea"
188 hypArea2 = smesh.CreateHypothesis( "MaxElementArea", stdMeshersEngine )
189 hypArea2.SetMaxElementArea(500)
190 print hypArea2.GetName()
191 print hypArea2.GetId()
192 print hypArea2.GetMaxElementArea()
193
194 smeshgui.SetName(salome.ObjectToID(hypArea2), "MaxElementArea_500")
195
196 print "-------------------------- Regular_1D"
197 algoReg = smesh.CreateHypothesis( "Regular_1D", stdMeshersEngine )
198 listHyp=algoReg.GetCompatibleHypothesis()
199 for hyp in listHyp:
200     print hyp
201 print algoReg.GetName()
202 print algoReg.GetId()
203
204 smeshgui.SetName(salome.ObjectToID(algoReg), "Regular_1D" )
205
206 print "-------------------------- MEFISTO_2D"
207 algoMef = smesh.CreateHypothesis( "MEFISTO_2D", stdMeshersEngine )
208 listHyp=algoMef.GetCompatibleHypothesis()
209 for hyp in listHyp:
210     print hyp
211 print algoMef.GetName()
212 print algoMef.GetId()
213
214 smeshgui.SetName(salome.ObjectToID(algoMef), "MEFISTO_2D" )
215
216 # ---- add hypothesis to box
217
218 print "-------------------------- add hypothesis to box"
219 box=salome.IDToObject(idbox)
220 mesh = smesh.CreateMesh(box)
221
222 smeshgui.SetName( salome.ObjectToID(mesh), "MeshBox" );
223
224 ret=mesh.AddHypothesis(box,algoReg)
225 print ret
226 ret=mesh.AddHypothesis(box,algoMef)
227 print ret
228
229
230 ret=mesh.AddHypothesis(box,hypNbSeg1)
231 print ret
232 ret=mesh.AddHypothesis(box,hypArea1)
233 print ret
234
235
236 # ---- add hypothesis to edge
237
238 print "-------------------------- add hypothesis to edge"
239 edge=salome.IDToObject(idedge)
240 submesh=mesh.GetSubMesh(edge, "SubMeshEdge")
241
242 ret=mesh.AddHypothesis(edge,algoReg)
243 print ret
244 ret=mesh.AddHypothesis(edge,hypLen1)
245 print ret
246
247 print "-------------------------- add hypothesis to face"
248 face=salome.IDToObject(idface)
249 submesh   = mesh.GetSubMesh(face, "SubMeshFace")
250
251 ret=mesh.AddHypothesis(face,hypArea2)
252 print ret
253
254 smesh.Compute(mesh, box)
255 sg.updateObjBrowser(1);
256
257 #####################################################################
258 # SUPERVISOR module is not available since SALOME 5.0 version
259 #####################################################################
260 print
261 print "=============  Test      Supervisor      ============================="
262 print
263 import salome_version
264 version = salome_version.getVersions("GUI")[0]
265 if not version: version = salome_version.getVersions("KERNEL")[0]
266 if version < 5:
267         # SUPERV module is avaiable
268         comp = catalog.GetComponent("SUPERV")
269         if comp is None:
270                 raise RuntimeError,"Component SUPERV not found in Module Catalog."
271
272         from SuperV import *
273         import SALOMEDS
274         myStudy = salome.myStudy
275         myBuilder = myStudy.NewBuilder()
276
277         SuperVision = lcc.FindOrLoadComponent("SuperVisionContainer","SUPERV")
278         father = myStudy.FindComponent("SUPERV")
279         if father is None:
280                 father = myBuilder.NewComponent("SUPERV")
281                 A1 = myBuilder.FindOrCreateAttribute(father, "AttributeName");
282                 FName = A1._narrow(SALOMEDS.AttributeName)
283                 FName.SetValue( salome.sg.getComponentUserName("SUPERV") )
284                 A2 = myBuilder.FindOrCreateAttribute(father, "AttributePixMap");
285                 aPixmap = A2._narrow(SALOMEDS.AttributePixMap);
286                 aPixmap.SetPixMap( "ICON_OBJBROWSER_Supervision" );
287                 myBuilder.DefineComponentInstance(father,SuperVision)
288
289         def addStudy(ior):
290                 dataflow = SuperVision.getStreamGraph(ior)
291                 name=dataflow.Name()
292                 itr = myStudy.NewChildIterator(father)
293                 while itr.More():
294                         item=itr.Value()
295                         res,A=item.FindAttribute("AttributeName")
296                         if res:
297                                 aName = A._narrow(SALOMEDS.AttributeName)
298                                 if aName.Value() == name :
299                                         print myBuilder.FindOrCreateAttribute(item, "AttributeIOR")
300                                         A  = myBuilder.FindOrCreateAttribute(item, "AttributeIOR")
301                                         print "A = ", A
302                                         if A is not None :
303                                                 #res,A = myBuilder.FindOrCreateAttribute(item, "AttributeIOR")
304                                                 anIOR  = A._narrow(SALOMEDS.AttributeIOR);
305                                                 print "anIOR.SetValue(dataflow.getIOR())"
306                                                 anIOR.SetValue(dataflow.getIOR()) 
307                                         return
308                         itr.Next()
309                 obj = myBuilder.NewObject(father)
310                 A=myBuilder.FindOrCreateAttribute(obj, "AttributeName")
311                 aName=A._narrow(SALOMEDS.AttributeName)
312                 aName.SetValue(name)
313                 A=myBuilder.FindOrCreateAttribute(obj, "AttributeIOR")
314                 anIOR  = A._narrow(SALOMEDS.AttributeIOR)
315                 anIOR.SetValue(dataflow.getIOR())
316
317         import os
318         dir= os.getenv("DATA_DIR")
319         if dir == None:
320                 raise RuntimeError, "DATA_DIR is not defined"
321         xmlfile = dir + "/Superv/Graphs/GraphGeomEssaiGates.xml"
322         print "Load dataflow from the file : "
323         print xmlfile
324         print
325
326         myGraph = StreamGraph ( xmlfile )
327
328         # This DataFlow is "valid" : no loop, correct links between Nodes etc...
329         print "myGraph.IsValid() = ", myGraph.IsValid()
330
331         # Get Nodes
332         myGraph.PrintNodes()
333
334         # This DataFlow is "executable" : all pending Ports are defined with Datas
335         print myGraph.IsExecutable()
336
337         # Starts only execution of that DataFlow and gets control immediatly
338         print myGraph.Run()
339
340         # That DataFlow is running ==> 0 (false)
341         print myGraph.IsDone()
342
343         # Events of execution :
344         aStatus,aNode,anEvent,aState = myGraph.Event()
345         while aStatus :
346                 print aNode.Thread(),aNode.SubGraph(),aNode.Name(),anEvent,aState
347                 aStatus,aNode,anEvent,aState = myGraph.Event()
348         print "myGraph.IsDone() = ",myGraph.IsDone()
349
350         # Wait for Completion (but it is already done after event loop ...)
351         print "Done : ",myGraph.DoneW()
352
353         print " "
354         #print "Type : print myGraph.IsDone()"
355         #print "       If execution is finished ==> 1 (true)"
356         res=myGraph.IsDone()
357         if res != 1:
358                 raise RuntimeError, "myGraph.Run() is not done"
359
360         print " "
361         print "Type : myGraph.PrintPorts()"
362         print "       to see input and output values of the graph"
363         myGraph.PrintPorts()
364
365         # Export will create newsupervisionexample.xml and the corresponding .py file
366         tmpdir=os.getenv("TmpDir")
367         if tmpdir is None:
368                 tmpdir="/tmp"
369         file = tmpdir + "/newsupervisionexample"
370         print "--------------\n"+file+"\n--------------\n"
371         myGraph.Export(file)
372
373         ior = salome.orb.object_to_string(myGraph.G)
374         addStudy(ior)
375
376         GraphName = myGraph.Name()
377         print "Befor save ",
378         #nodes = myGraph.Nodes()
379         nodes = myGraph.G.Nodes().FNodes
380         length_bs = len(nodes)
381         print "ListOfNodes length = ", length_bs
382         names=[]
383         for node in nodes:
384                 names.append(node.Name())
385         print names
386
387         # Graph creation 
388         GraphInLines = StreamGraph( 'GraphInLines' )
389         GraphInLines.SetName( 'GraphInLines' )
390         GraphInLines.SetAuthor( '' )
391         GraphInLines.SetComment( '' )
392         GraphInLines.Coords( 0 , 0 )
393
394         # Creation of InLine Nodes
395         PyAdd = []
396         PyAdd.append( 'def Add(a,b) :  ' )
397         PyAdd.append( '    return a+b  ' )
398         PyAdd.append( '' )
399         Add = GraphInLines.INode( 'Add' , PyAdd )
400         Add.InPort( 'a' , 'long' )
401         Add.InPort( 'b' , 'long' )
402         Add.OutPort( 'f' , 'long' )
403         Add.SetName( 'Add' )
404         Add.SetAuthor( '' )
405         Add.SetComment( 'Python function' )
406         Add.Coords( 351 , 77 )
407         PySub = []
408         PySub.append( 'def Sub(a,b) : ' )
409         PySub.append( '    return a-b ' )
410         PySub.append( '' )
411         Sub = GraphInLines.INode( 'Sub' , PySub )
412         Sub.InPort( 'a' , 'long' )
413         Sub.InPort( 'b' , 'long' )
414         Sub.OutPort( 'f' , 'long' )
415         Sub.SetName( 'Sub' )
416         Sub.SetAuthor( '' )
417         Sub.SetComment( 'Python function' )
418         Sub.Coords( 86 , 333 )
419         PyMul = []
420         PyMul.append( 'def Mul(a,b) : ' )
421         PyMul.append( '    return a*b ' )
422         Mul = GraphInLines.INode( 'Mul' , PyMul )
423         Mul.InPort( 'a' , 'long' )
424         Mul.InPort( 'b' , 'long' )
425         Mul.OutPort( 'Result' , 'long' )
426         Mul.SetName( 'Mul' )
427         Mul.SetAuthor( '' )
428         Mul.SetComment( 'Python function' )
429         Mul.Coords( 616 , 247 )
430
431         # Creation of intermediate Output variables and of Control Links
432         Addf = Add.Port( 'f' )
433         Mula = GraphInLines.Link( Addf , Mul.Port( 'a' ) )
434         Mula.AddCoord( 1 , 570 , 356 )
435         Mula.AddCoord( 2 , 570 , 186 )
436         Subf = Sub.Port( 'f' )
437         Mulb = GraphInLines.Link( Subf , Mul.Port( 'b' ) )
438         Mulb.AddCoord( 1 , 282 , 376 )
439         Mulb.AddCoord( 2 , 282 , 442 )
440         Addb = GraphInLines.Link( Subf , Add.Port( 'b' ) )
441         Addb.AddCoord( 1 , 283 , 209 )
442         Addb.AddCoord( 2 , 283 , 374 )
443         Addb.AddCoord( 3 , 283 , 442 )
444
445         # Creation of Input datas
446         Adda = Add.Input( 'a' , 1)
447         Suba = Sub.Input( 'a' , 3)
448         Subb = Sub.Input( 'b' , 4)
449
450         # Creation of Output variables
451         MulResult = Mul.Port( 'Result' )
452
453         GraphInLines.Run()
454
455         GraphInLines.DoneW()
456
457         GraphInLines.PrintPorts()
458
459         sg.updateObjBrowser(1);
460
461         pass
462 else:
463         # SUPERV module is NOT avaiable
464         print "WARNING! Supervisor is not avaiable in this version of SALOME!"
465         pass
466
467 print
468 print "=============  Test  VISU  and MED ============================="
469 print
470
471 comp = catalog.GetComponent("VISU")
472 if comp is None:
473         raise RuntimeError,"Component VISU not found in Module Catalog."
474
475 import sys
476 import SALOMEDS
477 import SALOME
478 import SALOME_MED
479 import VISU
480
481 import visu_gui
482
483 medFileName = "pointe.med"
484 if sys.platform != "win32":
485     medFile = os.getenv('DATA_DIR') + '/MedFiles/' + medFileName
486 else:
487     medFile = os.getenv('DATA_DIR') + '\\MedFiles\\' + medFileName
488     pass
489 print "Load ", medFile
490
491 studyCurrent = salome.myStudyName
492
493 med_comp = salome.lcc.FindOrLoadComponent("FactoryServer", "MED")
494 myVisu = salome.lcc.FindOrLoadComponent("FactoryServer", "VISU")
495
496 try:
497     if os.access(medFile, os.R_OK) :
498        if not os.access(medFile, os.W_OK) :
499                import random
500                if sys.platform != "win32":
501                  tmpDir = "/tmp/"
502                else:
503                  tmpDir = os.getenv('TEMP') + '\\'
504                medFileNew = tmpDir + str(random.randint(0,1000000)) + "_" + medFileName
505                print " -- Copy " + medFile + " to " + medFileNew
506
507                if sys.platform != "win32":
508                  copyCommand = "cp"
509                else:
510                  copyCommand = "copy /Y"
511                os.system(copyCommand + " " + medFile + " " + medFileNew)
512
513                medFile = medFileNew
514                if sys.platform != "win32":
515                    os.system("chmod 755 " + medFile)
516                    pass
517
518        if os.access(medFile, os.W_OK) :
519            med_comp.readStructFileWithFieldType(medFile,studyCurrent)
520            med_obj = visu_gui.visu.getMedObjectFromStudy()
521            print "med_obj - ", med_obj
522
523            myField1 = visu_gui.visu.getFieldObjectFromStudy(3,1)
524            aMeshName = "maa1"
525            anEntity = VISU.NODE
526            aTimeStampId = -1
527                    
528            myResult1 = myVisu.ImportMedField(myField1)
529            aMesh1 = myVisu.MeshOnEntity(myResult1, aMeshName, anEntity);
530            
531            aScalarMap1= myVisu.ScalarMapOnField(myResult1, aMeshName, anEntity, myField1.getName(), aTimeStampId)
532            
533            myResult2 = myVisu.ImportFile(medFile);
534            aMesh2 = myVisu.MeshOnEntity(myResult2, aMeshName, anEntity);
535            
536            aTimeStampId = 3
537            aScalarMap2= myVisu.ScalarMapOnField(myResult2, aMeshName, anEntity, myField1.getName(), aTimeStampId)
538                    
539            sg.updateObjBrowser(0)
540        else :  print "We have no permission to rewrite medFile, so readStructFileWithFieldType can't open this file";
541     else :  print  "We have no permission to read medFile, it will not be opened"; 
542
543 except:
544     if sys.exc_type == SALOME.SALOME_Exception :
545         print "There is no permission to read " + medFile
546     else :
547         print sys.exc_type 
548         print sys.exc_value
549         print sys.exc_traceback
550
551 sg.updateObjBrowser(1);