Salome HOME
Merge master branch into V9_dev
[modules/paravis.git] / examples / command_line / medviewer.py
1 class MEDViewer():
2
3   def __init__(self, createRenderView=True, interactive=False):
4     self.interactive = interactive
5     import pvsimple
6
7     if createRenderView:
8       self.renderView = pvsimple.CreateRenderView()
9     else:
10       self.renderView = pvsimple.GetRenderView()
11   #
12
13   def __displayInteractive(self, element):
14     from PyQt4 import QtCore, QtGui
15     from vtk.qt4 import QVTKRenderWindowInteractor
16
17     class __InteractiveViewer(QtCore.QObject):
18       def __init__(self, viewer):
19         self.renderView = viewer.renderView
20         self.widget = QVTKRenderWindowInteractor.QVTKRenderWindowInteractor(\
21           rw=self.renderView.GetRenderWindow(),
22           iren=self.renderView.GetInteractor())
23         self.widget.Initialize()
24         self.widget.Start()
25         self.widget.show()
26         import pvsimple
27         pvsimple.ResetCamera()
28         pvsimple.Render(view=self.renderView)
29       #
30       def render(self):
31         pvsimple.Render(self.renderView)
32       #
33     #
34     app = QtGui.QApplication(['ParaView Python App'])
35     iv = __InteractiveViewer(self)
36     app.exec_()
37   #
38
39   def __display(self, element, pause=False):
40     import pvsimple
41     pvsimple.SetActiveSource(element)
42     pvsimple.Show(view=self.renderView)
43
44     if self.interactive:
45       self.__displayInteractive(element)
46     else:
47       pvsimple.Render(view=self.renderView)
48       pvsimple.ResetCamera()
49       pvsimple.SetActiveSource(element)
50       pvsimple.Render(view=self.renderView)
51       if pause:
52         input("Press Enter key to continue")
53   #
54
55   def display_mesh(self, element, pause=False):
56     self.__display(element, pause)
57   #
58
59   def display_field(self, element, pause=False):
60     import pvsimple
61     pvsimple.SetActiveSource(element)
62     representation = pvsimple.Show(view=self.renderView)
63
64     from medio import get_element_type, get_element_name
65     etype = get_element_type(element)
66     ename = get_element_name(element)
67
68     if etype == 'P0':
69       representation.ColorArrayName = ("CELLS", ename)
70       data = element.CellData
71     elif etype == 'P1':
72       representation.ColorArrayName = ("POINTS", ename)
73       data = element.PointData
74
75     # :TODO: Determine nb components
76     nb_cmp = 1
77     mode = "Magnitude" # "Component" if nb_cmp > 1
78     scalarbar = self.__build_scalar_bar(data, ename, nb_cmp, mode)
79
80     pvsimple.SetActiveSource(element)
81     self.renderView.Representations.append(scalarbar)
82     self.__display(element, pause)
83   #
84
85   def __build_scalar_bar(self, data, fieldname, nb_components, vector_mode):
86     import pvsimple
87     # Get data range (mini/maxi)
88     for n in range(data.GetNumberOfArrays()):
89         if data.GetArray(n).GetName() == fieldname:
90             mini,maxi = data.GetArray(n).GetRange()
91
92     stepvalue = (maxi-mini)/100. # 100 steps
93
94     # Build Lookup table
95     RGBPoints = [mini, 0.0, 0.0, 1.0, maxi, 1.0, 0.0, 0.0]
96     nb = int((maxi-mini)/stepvalue)-1
97     Table = pvsimple.GetLookupTableForArray("", nb_components, VectorMode=vector_mode, ColorSpace='HSV')
98     Table.Discretize = 1
99     Table.NumberOfTableValues = nb
100     Table.RGBPoints = RGBPoints
101
102     representation = pvsimple.Show(view=self.renderView)
103     representation.Representation = 'Surface'
104     representation.LookupTable = Table
105
106     # Build scalar bar
107     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],)
108     return scalarbar
109   #
110
111 #