]> SALOME platform Git repositories - modules/paravis.git/blobdiff - examples/command_line/medviewer.py
Salome HOME
[Demo] command_line
[modules/paravis.git] / examples / command_line / medviewer.py
diff --git a/examples/command_line/medviewer.py b/examples/command_line/medviewer.py
new file mode 100644 (file)
index 0000000..d6c1ae9
--- /dev/null
@@ -0,0 +1,111 @@
+class MEDViewer():
+
+  def __init__(self, createRenderView=True, interactive=False):
+    self.interactive = interactive
+    import pvsimple
+
+    if createRenderView:
+      self.renderView = pvsimple.CreateRenderView()
+    else:
+      self.renderView = pvsimple.GetRenderView()
+  #
+
+  def __displayInteractive(self, element):
+    from PyQt4 import QtCore, QtGui
+    from vtk.qt4 import QVTKRenderWindowInteractor
+
+    class __InteractiveViewer(QtCore.QObject):
+      def __init__(self, viewer):
+        self.renderView = viewer.renderView
+        self.widget = QVTKRenderWindowInteractor.QVTKRenderWindowInteractor(\
+          rw=self.renderView.GetRenderWindow(),
+          iren=self.renderView.GetInteractor())
+        self.widget.Initialize()
+        self.widget.Start()
+        self.widget.show()
+        import pvsimple
+        pvsimple.ResetCamera()
+        pvsimple.Render(view=self.renderView)
+      #
+      def render(self):
+        pvsimple.Render(self.renderView)
+      #
+    #
+    app = QtGui.QApplication(['ParaView Python App'])
+    iv = __InteractiveViewer(self)
+    app.exec_()
+  #
+
+  def __display(self, element, pause=False):
+    import pvsimple
+    pvsimple.SetActiveSource(element)
+    pvsimple.Show(view=self.renderView)
+
+    if self.interactive:
+      self.__displayInteractive(element)
+    else:
+      pvsimple.Render(view=self.renderView)
+      pvsimple.ResetCamera()
+      pvsimple.SetActiveSource(element)
+      pvsimple.Render(view=self.renderView)
+      if pause:
+        raw_input("Press Enter key to continue")
+  #
+
+  def display_mesh(self, element, pause=False):
+    self.__display(element, pause)
+  #
+
+  def display_field(self, element, pause=False):
+    import pvsimple
+    pvsimple.SetActiveSource(element)
+    representation = pvsimple.Show(view=self.renderView)
+
+    from medio import get_element_type, get_element_name
+    etype = get_element_type(element)
+    ename = get_element_name(element)
+
+    if etype == 'P0':
+      representation.ColorArrayName = ("CELLS", ename)
+      data = element.CellData
+    elif etype == 'P1':
+      representation.ColorArrayName = ("POINTS", ename)
+      data = element.PointData
+
+    # :TODO: Determine nb components
+    nb_cmp = 1
+    mode = "Magnitude" # "Component" if nb_cmp > 1
+    scalarbar = self.__build_scalar_bar(data, ename, nb_cmp, mode)
+
+    pvsimple.SetActiveSource(element)
+    self.renderView.Representations.append(scalarbar)
+    self.__display(element, pause)
+  #
+
+  def __build_scalar_bar(self, data, fieldname, nb_components, vector_mode):
+    import pvsimple
+    # Get data range (mini/maxi)
+    for n in range(data.GetNumberOfArrays()):
+        if data.GetArray(n).GetName() == fieldname:
+            mini,maxi = data.GetArray(n).GetRange()
+
+    stepvalue = (maxi-mini)/100. # 100 steps
+
+    # Build Lookup table
+    RGBPoints = [mini, 0.0, 0.0, 1.0, maxi, 1.0, 0.0, 0.0]
+    nb = int((maxi-mini)/stepvalue)-1
+    Table = pvsimple.GetLookupTableForArray("", nb_components, VectorMode=vector_mode, ColorSpace='HSV')
+    Table.Discretize = 1
+    Table.NumberOfTableValues = nb
+    Table.RGBPoints = RGBPoints
+
+    representation = pvsimple.Show(view=self.renderView)
+    representation.Representation = 'Surface'
+    representation.LookupTable = Table
+
+    # Build scalar bar
+    scalarbar = pvsimple.CreateScalarBar(LabelFormat = '%.1f',Title= "",LabelFontSize=12,Enabled=1,LookupTable=Table,TitleFontSize=12,LabelColor=[0.0, 0.0, 0.0],TitleColor=[0.0, 0.0, 0.0],)
+    return scalarbar
+  #
+
+#