1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2008 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.
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
23 # SALOME SALOME_SWIG : binding of C++ implementation and Python
24 # File : salome_test.py
27 print "Test the application loading GEOM, SMESH, VISU, MED, components and doing some"
28 print "operation within the components."
36 import SALOME_ModuleCatalog
38 print "======================================================================"
39 print " Check, that there is no data of MED component in the Study "
40 print "======================================================================"
42 MedComp = salome.myStudy.FindComponent("MED")
43 if MedComp is not None:
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."
49 raise RuntimeError, "Please, run this script only in a new empty study."
51 print "======================================================================"
53 print "======================================================================"
54 obj = salome.naming_service.Resolve('Kernel/ModulCatalog')
55 catalog = obj._narrow(SALOME_ModuleCatalog.ModuleCatalog)
57 print "======================================================================"
58 print " Create Study "
59 print "======================================================================"
61 comp = catalog.GetComponent("GEOM")
63 raise RuntimeError,"Component GEOM not found in Module Catalog."
67 print "================================="
68 print " create AttributeReal "
69 print "================================="
70 A = geompy.myBuilder.FindOrCreateAttribute(geompy.father, "AttributeReal")
72 raise RuntimeError, "Can't create AttributeReal attribute"
73 A = A._narrow(SALOMEDS.AttributeReal)
75 if A.Value() != 0.0001:
76 raise RuntimeError, "Error : wrong value of AttributeReal"
79 print " =========== Test Geometry =========================="
82 print "==================================="
84 print "==================================="
86 box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
87 idbox = geompy.addToStudy(box,"box")
90 print "============= Test SMESH ============================="
95 comp = catalog.GetComponent("SMESH")
97 raise RuntimeError,"Component SMESH not found in Module Catalog."
99 comp = catalog.GetComponent("MED")
101 raise RuntimeError,"Component MED not found in Module Catalog."
105 geom = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM")
106 myBuilder = salome.myStudy.NewBuilder()
108 smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
109 smeshgui = salome.ImportComponentGUI("SMESH")
110 smeshgui.Init(salome.myStudyId);
112 ShapeTypeCompSolid = 1
122 box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
123 idbox = geompy.addToStudy(box,"box")
125 # ---- add first face of box in study
127 subShapeList=geompy.SubShapeAll(box,ShapeTypeFace)
129 name = geompy.SubShapeName(face, box)
131 idface=geompy.addToStudyInFather(box,face,name)
133 # ---- add shell from box in study
135 subShellList=geompy.SubShapeAll(box,ShapeTypeShell)
136 shell = subShellList[0]
137 name = geompy.SubShapeName(shell, box)
139 idshell=geompy.addToStudyInFather(box,shell,name)
141 # ---- add first edge of face in study
143 edgeList = geompy.SubShapeAll(face,ShapeTypeEdge)
145 name = geompy.SubShapeName(edge, face)
147 idedge=geompy.addToStudyInFather(face,edge,name)
152 # ---- create Hypothesis
154 if sys.platform == "win32":
155 stdMeshersEngine = "StdMeshersEngine"
157 stdMeshersEngine = "libStdMeshersEngine.so"
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()
167 smeshgui.SetName(salome.ObjectToID(hypLen1), "Local_Length_100")
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()
176 smeshgui.SetName(salome.ObjectToID(hypNbSeg1), "NumberOfSegments_7")
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()
185 smeshgui.SetName(salome.ObjectToID(hypArea1), "MaxElementArea_2500")
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()
194 smeshgui.SetName(salome.ObjectToID(hypArea2), "MaxElementArea_500")
196 print "-------------------------- Regular_1D"
197 algoReg = smesh.CreateHypothesis( "Regular_1D", stdMeshersEngine )
198 listHyp=algoReg.GetCompatibleHypothesis()
201 print algoReg.GetName()
202 print algoReg.GetId()
204 smeshgui.SetName(salome.ObjectToID(algoReg), "Regular_1D" )
206 print "-------------------------- MEFISTO_2D"
207 algoMef = smesh.CreateHypothesis( "MEFISTO_2D", stdMeshersEngine )
208 listHyp=algoMef.GetCompatibleHypothesis()
211 print algoMef.GetName()
212 print algoMef.GetId()
214 smeshgui.SetName(salome.ObjectToID(algoMef), "MEFISTO_2D" )
216 # ---- add hypothesis to box
218 print "-------------------------- add hypothesis to box"
219 box=salome.IDToObject(idbox)
220 mesh = smesh.CreateMesh(box)
222 smeshgui.SetName( salome.ObjectToID(mesh), "MeshBox" );
224 ret=mesh.AddHypothesis(box,algoReg)
226 ret=mesh.AddHypothesis(box,algoMef)
230 ret=mesh.AddHypothesis(box,hypNbSeg1)
232 ret=mesh.AddHypothesis(box,hypArea1)
236 # ---- add hypothesis to edge
238 print "-------------------------- add hypothesis to edge"
239 edge=salome.IDToObject(idedge)
240 submesh=mesh.GetSubMesh(edge, "SubMeshEdge")
242 ret=mesh.AddHypothesis(edge,algoReg)
244 ret=mesh.AddHypothesis(edge,hypLen1)
247 print "-------------------------- add hypothesis to face"
248 face=salome.IDToObject(idface)
249 submesh = mesh.GetSubMesh(face, "SubMeshFace")
251 ret=mesh.AddHypothesis(face,hypArea2)
254 smesh.Compute(mesh, box)
255 sg.updateObjBrowser(1);
257 #####################################################################
258 # SUPERVISOR module is not available since SALOME 5.0 version
259 #####################################################################
261 print "============= Test Supervisor ============================="
263 import salome_version
264 versions = salome_version.getVersions()
266 # SUPERV module is avaiable
267 comp = catalog.GetComponent("SUPERV")
269 raise RuntimeError,"Component SUPERV not found in Module Catalog."
273 myStudy = salome.myStudy
274 myBuilder = myStudy.NewBuilder()
276 SuperVision = lcc.FindOrLoadComponent("SuperVisionContainer","SUPERV")
277 father = myStudy.FindComponent("SUPERV")
279 father = myBuilder.NewComponent("SUPERV")
280 A1 = myBuilder.FindOrCreateAttribute(father, "AttributeName");
281 FName = A1._narrow(SALOMEDS.AttributeName)
282 FName.SetValue( salome.sg.getComponentUserName("SUPERV") )
283 A2 = myBuilder.FindOrCreateAttribute(father, "AttributePixMap");
284 aPixmap = A2._narrow(SALOMEDS.AttributePixMap);
285 aPixmap.SetPixMap( "ICON_OBJBROWSER_Supervision" );
286 myBuilder.DefineComponentInstance(father,SuperVision)
289 dataflow = SuperVision.getStreamGraph(ior)
291 itr = myStudy.NewChildIterator(father)
294 res,A=item.FindAttribute("AttributeName")
296 aName = A._narrow(SALOMEDS.AttributeName)
297 if aName.Value() == name :
298 print myBuilder.FindOrCreateAttribute(item, "AttributeIOR")
299 A = myBuilder.FindOrCreateAttribute(item, "AttributeIOR")
302 #res,A = myBuilder.FindOrCreateAttribute(item, "AttributeIOR")
303 anIOR = A._narrow(SALOMEDS.AttributeIOR);
304 print "anIOR.SetValue(dataflow.getIOR())"
305 anIOR.SetValue(dataflow.getIOR())
308 obj = myBuilder.NewObject(father)
309 A=myBuilder.FindOrCreateAttribute(obj, "AttributeName")
310 aName=A._narrow(SALOMEDS.AttributeName)
312 A=myBuilder.FindOrCreateAttribute(obj, "AttributeIOR")
313 anIOR = A._narrow(SALOMEDS.AttributeIOR)
314 anIOR.SetValue(dataflow.getIOR())
317 dir= os.getenv("DATA_DIR")
319 raise RuntimeError, "DATA_DIR is not defined"
320 xmlfile = dir + "/Superv/Graphs/GraphGeomEssaiGates.xml"
321 print "Load dataflow from the file : "
325 myGraph = StreamGraph ( xmlfile )
327 # This DataFlow is "valid" : no loop, correct links between Nodes etc...
328 print "myGraph.IsValid() = ", myGraph.IsValid()
333 # This DataFlow is "executable" : all pending Ports are defined with Datas
334 print myGraph.IsExecutable()
336 # Starts only execution of that DataFlow and gets control immediatly
339 # That DataFlow is running ==> 0 (false)
340 print myGraph.IsDone()
342 # Events of execution :
343 aStatus,aNode,anEvent,aState = myGraph.Event()
345 print aNode.Thread(),aNode.SubGraph(),aNode.Name(),anEvent,aState
346 aStatus,aNode,anEvent,aState = myGraph.Event()
347 print "myGraph.IsDone() = ",myGraph.IsDone()
349 # Wait for Completion (but it is already done after event loop ...)
350 print "Done : ",myGraph.DoneW()
353 #print "Type : print myGraph.IsDone()"
354 #print " If execution is finished ==> 1 (true)"
357 raise RuntimeError, "myGraph.Run() is not done"
360 print "Type : myGraph.PrintPorts()"
361 print " to see input and output values of the graph"
364 # Export will create newsupervisionexample.xml and the corresponding .py file
365 tmpdir=os.getenv("TmpDir")
368 file = tmpdir + "/newsupervisionexample"
369 print "--------------\n"+file+"\n--------------\n"
372 ior = salome.orb.object_to_string(myGraph.G)
375 GraphName = myGraph.Name()
377 #nodes = myGraph.Nodes()
378 nodes = myGraph.G.Nodes().FNodes
379 length_bs = len(nodes)
380 print "ListOfNodes length = ", length_bs
383 names.append(node.Name())
387 GraphInLines = StreamGraph( 'GraphInLines' )
388 GraphInLines.SetName( 'GraphInLines' )
389 GraphInLines.SetAuthor( '' )
390 GraphInLines.SetComment( '' )
391 GraphInLines.Coords( 0 , 0 )
393 # Creation of InLine Nodes
395 PyAdd.append( 'def Add(a,b) : ' )
396 PyAdd.append( ' return a+b ' )
398 Add = GraphInLines.INode( 'Add' , PyAdd )
399 Add.InPort( 'a' , 'long' )
400 Add.InPort( 'b' , 'long' )
401 Add.OutPort( 'f' , 'long' )
404 Add.SetComment( 'Python function' )
405 Add.Coords( 351 , 77 )
407 PySub.append( 'def Sub(a,b) : ' )
408 PySub.append( ' return a-b ' )
410 Sub = GraphInLines.INode( 'Sub' , PySub )
411 Sub.InPort( 'a' , 'long' )
412 Sub.InPort( 'b' , 'long' )
413 Sub.OutPort( 'f' , 'long' )
416 Sub.SetComment( 'Python function' )
417 Sub.Coords( 86 , 333 )
419 PyMul.append( 'def Mul(a,b) : ' )
420 PyMul.append( ' return a*b ' )
421 Mul = GraphInLines.INode( 'Mul' , PyMul )
422 Mul.InPort( 'a' , 'long' )
423 Mul.InPort( 'b' , 'long' )
424 Mul.OutPort( 'Result' , 'long' )
427 Mul.SetComment( 'Python function' )
428 Mul.Coords( 616 , 247 )
430 # Creation of intermediate Output variables and of Control Links
431 Addf = Add.Port( 'f' )
432 Mula = GraphInLines.Link( Addf , Mul.Port( 'a' ) )
433 Mula.AddCoord( 1 , 570 , 356 )
434 Mula.AddCoord( 2 , 570 , 186 )
435 Subf = Sub.Port( 'f' )
436 Mulb = GraphInLines.Link( Subf , Mul.Port( 'b' ) )
437 Mulb.AddCoord( 1 , 282 , 376 )
438 Mulb.AddCoord( 2 , 282 , 442 )
439 Addb = GraphInLines.Link( Subf , Add.Port( 'b' ) )
440 Addb.AddCoord( 1 , 283 , 209 )
441 Addb.AddCoord( 2 , 283 , 374 )
442 Addb.AddCoord( 3 , 283 , 442 )
444 # Creation of Input datas
445 Adda = Add.Input( 'a' , 1)
446 Suba = Sub.Input( 'a' , 3)
447 Subb = Sub.Input( 'b' , 4)
449 # Creation of Output variables
450 MulResult = Mul.Port( 'Result' )
456 GraphInLines.PrintPorts()
458 sg.updateObjBrowser(1);
462 # SUPERV module is NOT avaiable
463 print "WARNING! Supervisor is not avaiable in this version of SALOME!"
467 print "============= Test VISU and MED ============================="
470 comp = catalog.GetComponent("VISU")
472 raise RuntimeError,"Component VISU not found in Module Catalog."
482 medFileName = "pointe.med"
483 if sys.platform != "win32":
484 medFile = os.getenv('DATA_DIR') + '/MedFiles/' + medFileName
486 medFile = os.getenv('DATA_DIR') + '\\MedFiles\\' + medFileName
488 print "Load ", medFile
490 studyCurrent = salome.myStudyName
492 med_comp = salome.lcc.FindOrLoadComponent("FactoryServer", "MED")
493 myVisu = salome.lcc.FindOrLoadComponent("FactoryServer", "VISU")
496 if os.access(medFile, os.R_OK) :
497 if not os.access(medFile, os.W_OK) :
499 if sys.platform != "win32":
502 tmpDir = os.getenv('TEMP') + '\\'
503 medFileNew = tmpDir + str(random.randint(0,1000000)) + "_" + medFileName
504 print " -- Copy " + medFile + " to " + medFileNew
506 if sys.platform != "win32":
509 copyCommand = "copy /Y"
510 os.system(copyCommand + " " + medFile + " " + medFileNew)
513 if sys.platform != "win32":
514 os.system("chmod 755 " + medFile)
517 if os.access(medFile, os.W_OK) :
518 med_comp.readStructFileWithFieldType(medFile,studyCurrent)
519 med_obj = visu_gui.visu.getMedObjectFromStudy()
520 print "med_obj - ", med_obj
522 myField1 = visu_gui.visu.getFieldObjectFromStudy(2,1)
527 myResult1 = myVisu.ImportMedField(myField1)
528 aMesh1 = myVisu.MeshOnEntity(myResult1, aMeshName, anEntity);
530 aScalarMap1= myVisu.ScalarMapOnField(myResult1, aMeshName, anEntity, myField1.getName(), aTimeStampId)
532 myResult2 = myVisu.ImportFile(medFile);
533 aMesh2 = myVisu.MeshOnEntity(myResult2, aMeshName, anEntity);
536 aScalarMap2= myVisu.ScalarMapOnField(myResult2, aMeshName, anEntity, myField1.getName(), aTimeStampId)
538 sg.updateObjBrowser(0)
539 else : print "We have no permission to rewrite medFile, so readStructFileWithFieldType can't open this file";
540 else : print "We have no permission to read medFile, it will not be opened";
543 if sys.exc_type == SALOME.SALOME_Exception :
544 print "There is no permission to read " + medFile
548 print sys.exc_traceback
550 sg.updateObjBrowser(1);