ParaViS can be used to directly visualize a mesh or a field stored in memory in a Python process. For information, this technique will become the preferred choice for the MED Calculator in a future Salome release. The following use cases can also be mentioned:
Import the whole Python module MEDCouplingCorba.
from MEDCouplingCorba import *
Create a trivial unstructured mesh “m” which will be sent through CORBA to ParaViS.
arr=DataArrayDouble(11)
arr.iota(0)
m=MEDCouplingCMesh()
m.setCoords(arr,arr)
m=m.buildUnstructured()
Note
“m” is unstructured but a Cartesian mesh would also work perfectly fine.
Invoke MEDCouplingUMeshServant._this() on “m” to turn it into a CORBA reference (“ref_m”).
ref_m=MEDCouplingUMeshServant._this(m)
Note
This command doesn’t only create a CORBA servant but also makes the current Python process a full CORBA server.
What follows holds for any omniORBpy code. Display the IOR “ior” of “ref_m”. This character string is given to the ParaViS plugin (ParaMEDCorbaPlugin) to create a new ParaViS source.
import CORBA
orb=CORBA.ORB_init()
ior=orb.object_to_string(ref_m)
print ior
A simple copy/paste in the ParaViS GUI allows to create the source and to have our mesh rendered on screen.
This section simply highlights what can be done in principle. It should be regarded as a starting point towards the creation of more advanced scripts. With ParaViS still up, retrieve a remote handle on ParaViS:
import PARAVIS_Gen_idl
import salome
salome.salome_init()
paravis=salome.lcc.FindOrLoadComponent("FactoryServer","PARAVIS")
Then send a script to ParaViS so that it displays “m”:
script="""
src1 = ParaMEDCorbaPluginSource()
src1.IORCorba = '%s'
asc=GetAnimationScene()
rw=GetRenderView()
dr=Show()\ndr.Visibility = 1
Render()
"""
content=script%(ior)
paravis.ExecuteScript(content)