1 # Copyright (C) 2014-2020 CEA/DEN, EDF R&D
3 # This library is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU Lesser General Public
5 # License as published by the Free Software Foundation; either
6 # version 2.1 of the License, or (at your option) any later version.
8 # This library is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 # Lesser General Public License for more details.
13 # You should have received a copy of the GNU Lesser General Public
14 # License along with this library; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 def __init__(self, createRenderView=True, interactive=False):
22 self.interactive = interactive
26 self.renderView = pvsimple.CreateRenderView()
28 self.renderView = pvsimple.GetRenderView()
31 def __displayInteractive(self, element):
32 from PyQt4 import QtCore, QtGui
33 from vtk.qt4 import QVTKRenderWindowInteractor
35 class __InteractiveViewer(QtCore.QObject):
36 def __init__(self, viewer):
37 self.renderView = viewer.renderView
38 self.widget = QVTKRenderWindowInteractor.QVTKRenderWindowInteractor(\
39 rw=self.renderView.GetRenderWindow(),
40 iren=self.renderView.GetInteractor())
41 self.widget.Initialize()
45 pvsimple.ResetCamera()
46 pvsimple.Render(view=self.renderView)
49 pvsimple.Render(self.renderView)
52 app = QtGui.QApplication(['ParaView Python App'])
53 iv = __InteractiveViewer(self)
57 def __display(self, element, pause=False):
59 pvsimple.SetActiveSource(element)
60 pvsimple.Show(view=self.renderView)
63 self.__displayInteractive(element)
65 pvsimple.Render(view=self.renderView)
66 pvsimple.ResetCamera()
67 pvsimple.SetActiveSource(element)
68 pvsimple.Render(view=self.renderView)
70 input("Press Enter key to continue")
73 def display_mesh(self, element, pause=False):
74 self.__display(element, pause)
77 def display_field(self, element, pause=False):
79 pvsimple.SetActiveSource(element)
80 representation = pvsimple.Show(view=self.renderView)
82 from medio import get_element_type, get_element_name
83 etype = get_element_type(element)
84 ename = get_element_name(element)
87 representation.ColorArrayName = ("CELLS", ename)
88 data = element.CellData
90 representation.ColorArrayName = ("POINTS", ename)
91 data = element.PointData
93 # :TODO: Determine nb components
95 mode = "Magnitude" # "Component" if nb_cmp > 1
96 scalarbar = self.__build_scalar_bar(data, ename, nb_cmp, mode)
98 pvsimple.SetActiveSource(element)
99 self.renderView.Representations.append(scalarbar)
100 self.__display(element, pause)
103 def __build_scalar_bar(self, data, fieldname, nb_components, vector_mode):
105 # Get data range (mini/maxi)
106 for n in range(data.GetNumberOfArrays()):
107 if data.GetArray(n).GetName() == fieldname:
108 mini,maxi = data.GetArray(n).GetRange()
110 stepvalue = (maxi-mini)/100. # 100 steps
113 RGBPoints = [mini, 0.0, 0.0, 1.0, maxi, 1.0, 0.0, 0.0]
114 nb = int((maxi-mini)/stepvalue)-1
115 Table = pvsimple.GetLookupTableForArray("", nb_components, VectorMode=vector_mode, ColorSpace='HSV')
117 Table.NumberOfTableValues = nb
118 Table.RGBPoints = RGBPoints
120 representation = pvsimple.Show(view=self.renderView)
121 representation.Representation = 'Surface'
122 representation.LookupTable = Table
125 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],)