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 version = salome_version.getVersions("GUI")[0]
265 if not version: version = salome_version.getVersions("KERNEL")[0]
267 # SUPERV module is avaiable
268 comp = catalog.GetComponent("SUPERV")
270 raise RuntimeError,"Component SUPERV not found in Module Catalog."
274 myStudy = salome.myStudy
275 myBuilder = myStudy.NewBuilder()
277 SuperVision = lcc.FindOrLoadComponent("SuperVisionContainer","SUPERV")
278 father = myStudy.FindComponent("SUPERV")
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)
290 dataflow = SuperVision.getStreamGraph(ior)
292 itr = myStudy.NewChildIterator(father)
295 res,A=item.FindAttribute("AttributeName")
297 aName = A._narrow(SALOMEDS.AttributeName)
298 if aName.Value() == name :
299 print myBuilder.FindOrCreateAttribute(item, "AttributeIOR")
300 A = myBuilder.FindOrCreateAttribute(item, "AttributeIOR")
303 #res,A = myBuilder.FindOrCreateAttribute(item, "AttributeIOR")
304 anIOR = A._narrow(SALOMEDS.AttributeIOR);
305 print "anIOR.SetValue(dataflow.getIOR())"
306 anIOR.SetValue(dataflow.getIOR())
309 obj = myBuilder.NewObject(father)
310 A=myBuilder.FindOrCreateAttribute(obj, "AttributeName")
311 aName=A._narrow(SALOMEDS.AttributeName)
313 A=myBuilder.FindOrCreateAttribute(obj, "AttributeIOR")
314 anIOR = A._narrow(SALOMEDS.AttributeIOR)
315 anIOR.SetValue(dataflow.getIOR())
318 dir= os.getenv("DATA_DIR")
320 raise RuntimeError, "DATA_DIR is not defined"
321 xmlfile = dir + "/Superv/Graphs/GraphGeomEssaiGates.xml"
322 print "Load dataflow from the file : "
326 myGraph = StreamGraph ( xmlfile )
328 # This DataFlow is "valid" : no loop, correct links between Nodes etc...
329 print "myGraph.IsValid() = ", myGraph.IsValid()
334 # This DataFlow is "executable" : all pending Ports are defined with Datas
335 print myGraph.IsExecutable()
337 # Starts only execution of that DataFlow and gets control immediatly
340 # That DataFlow is running ==> 0 (false)
341 print myGraph.IsDone()
343 # Events of execution :
344 aStatus,aNode,anEvent,aState = myGraph.Event()
346 print aNode.Thread(),aNode.SubGraph(),aNode.Name(),anEvent,aState
347 aStatus,aNode,anEvent,aState = myGraph.Event()
348 print "myGraph.IsDone() = ",myGraph.IsDone()
350 # Wait for Completion (but it is already done after event loop ...)
351 print "Done : ",myGraph.DoneW()
354 #print "Type : print myGraph.IsDone()"
355 #print " If execution is finished ==> 1 (true)"
358 raise RuntimeError, "myGraph.Run() is not done"
361 print "Type : myGraph.PrintPorts()"
362 print " to see input and output values of the graph"
365 # Export will create newsupervisionexample.xml and the corresponding .py file
366 tmpdir=os.getenv("TmpDir")
369 file = tmpdir + "/newsupervisionexample"
370 print "--------------\n"+file+"\n--------------\n"
373 ior = salome.orb.object_to_string(myGraph.G)
376 GraphName = myGraph.Name()
378 #nodes = myGraph.Nodes()
379 nodes = myGraph.G.Nodes().FNodes
380 length_bs = len(nodes)
381 print "ListOfNodes length = ", length_bs
384 names.append(node.Name())
388 GraphInLines = StreamGraph( 'GraphInLines' )
389 GraphInLines.SetName( 'GraphInLines' )
390 GraphInLines.SetAuthor( '' )
391 GraphInLines.SetComment( '' )
392 GraphInLines.Coords( 0 , 0 )
394 # Creation of InLine Nodes
396 PyAdd.append( 'def Add(a,b) : ' )
397 PyAdd.append( ' return a+b ' )
399 Add = GraphInLines.INode( 'Add' , PyAdd )
400 Add.InPort( 'a' , 'long' )
401 Add.InPort( 'b' , 'long' )
402 Add.OutPort( 'f' , 'long' )
405 Add.SetComment( 'Python function' )
406 Add.Coords( 351 , 77 )
408 PySub.append( 'def Sub(a,b) : ' )
409 PySub.append( ' return a-b ' )
411 Sub = GraphInLines.INode( 'Sub' , PySub )
412 Sub.InPort( 'a' , 'long' )
413 Sub.InPort( 'b' , 'long' )
414 Sub.OutPort( 'f' , 'long' )
417 Sub.SetComment( 'Python function' )
418 Sub.Coords( 86 , 333 )
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' )
428 Mul.SetComment( 'Python function' )
429 Mul.Coords( 616 , 247 )
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 )
445 # Creation of Input datas
446 Adda = Add.Input( 'a' , 1)
447 Suba = Sub.Input( 'a' , 3)
448 Subb = Sub.Input( 'b' , 4)
450 # Creation of Output variables
451 MulResult = Mul.Port( 'Result' )
457 GraphInLines.PrintPorts()
459 sg.updateObjBrowser(1);
463 # SUPERV module is NOT avaiable
464 print "WARNING! Supervisor is not avaiable in this version of SALOME!"
468 print "============= Test VISU and MED ============================="
471 comp = catalog.GetComponent("VISU")
473 raise RuntimeError,"Component VISU not found in Module Catalog."
483 medFileName = "pointe.med"
484 if sys.platform != "win32":
485 medFile = os.getenv('DATA_DIR') + '/MedFiles/' + medFileName
487 medFile = os.getenv('DATA_DIR') + '\\MedFiles\\' + medFileName
489 print "Load ", medFile
491 studyCurrent = salome.myStudyName
493 med_comp = salome.lcc.FindOrLoadComponent("FactoryServer", "MED")
494 myVisu = salome.lcc.FindOrLoadComponent("FactoryServer", "VISU")
497 if os.access(medFile, os.R_OK) :
498 if not os.access(medFile, os.W_OK) :
500 if sys.platform != "win32":
503 tmpDir = os.getenv('TEMP') + '\\'
504 medFileNew = tmpDir + str(random.randint(0,1000000)) + "_" + medFileName
505 print " -- Copy " + medFile + " to " + medFileNew
507 if sys.platform != "win32":
510 copyCommand = "copy /Y"
511 os.system(copyCommand + " " + medFile + " " + medFileNew)
514 if sys.platform != "win32":
515 os.system("chmod 755 " + medFile)
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
523 myField1 = visu_gui.visu.getFieldObjectFromStudy(2,1)
528 myResult1 = myVisu.ImportMedField(myField1)
529 aMesh1 = myVisu.MeshOnEntity(myResult1, aMeshName, anEntity);
531 aScalarMap1= myVisu.ScalarMapOnField(myResult1, aMeshName, anEntity, myField1.getName(), aTimeStampId)
533 myResult2 = myVisu.ImportFile(medFile);
534 aMesh2 = myVisu.MeshOnEntity(myResult2, aMeshName, anEntity);
537 aScalarMap2= myVisu.ScalarMapOnField(myResult2, aMeshName, anEntity, myField1.getName(), aTimeStampId)
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";
544 if sys.exc_type == SALOME.SALOME_Exception :
545 print "There is no permission to read " + medFile
549 print sys.exc_traceback
551 sg.updateObjBrowser(1);