Salome HOME
[MEDCalc] Fix scalar bar title when changing component.
[modules/med.git] / src / MEDCalc / cmp / MEDPresentation.txx
1 // Copyright (C) 2016  CEA/DEN, EDF R&D
2 //
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.
7 //
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.
12 //
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
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #ifndef _MED_PRESENTATION_TXX_
21 #define _MED_PRESENTATION_TXX_
22
23 #include "MEDPyLockWrapper.hxx"
24 #include <sstream>
25 #include <SALOME_KernelServices.hxx>
26
27 template<typename PresentationType, typename PresentationParameters>
28 void
29 MEDPresentation::updatePipeline(const PresentationParameters& params)
30 {
31   static_cast<PresentationType*>(this)->updatePipeline(params);
32 }
33
34 template<typename PresentationType, typename PresentationParameters>
35 void
36 MEDPresentation::getParameters(PresentationParameters& params) const
37 {
38   const PresentationType * p = static_cast<const PresentationType*>(this);
39   p->getParameters(params);
40 }
41
42 template<typename PresentationType, typename PresentationParameters>
43 void
44 MEDPresentation::setParameters(const PresentationParameters& params)
45 {
46   PresentationType * p = static_cast<PresentationType*>(this);
47   p->setParameters(params);
48 }
49
50 /**
51  * Update the ParaVis pipeline so that the given component appears on screen.
52  * Blank means "Euclidean norm"
53  * The property PROP_SELECTED_COMPONENT holding the corresponding index selected is also updated (help for the GUI).
54  */
55 template<typename PresentationType, typename PresentationParameters>
56 void
57 MEDPresentation::updateComponent(const std::string& newCompo)
58 {
59   PresentationType * p = static_cast<PresentationType*>(this);
60
61   PresentationParameters params;
62   p->getParameters(params);
63   params.displayedComponent = newCompo.c_str();
64   p->setParameters(params);
65
66   int nbCompo = getIntProperty(MEDPresentation::PROP_NB_COMPONENTS);
67   int idx = -1;
68   for (int i=0; i < nbCompo; i++)
69     {
70       std::ostringstream oss_p;
71       oss_p << MEDPresentation::PROP_COMPONENT << i;
72       std::string compo = getStringProperty(oss_p.str());
73       if (compo == newCompo)
74         {
75           idx = i;
76           break;
77         }
78     }
79   if (idx == -1 && newCompo != "")
80     {
81       std::string msg("updateComponent(): internal error - field component not found!");
82       throw KERNEL::createSalomeException(msg.c_str());
83     }
84   setIntProperty(MEDPresentation::PROP_SELECTED_COMPONENT, idx+1); // +1 because idx=0 means Euclidean norm
85   p->_selectedComponentIndex = idx;
86
87   // Update ParaView pipeline:
88   {
89     MEDPyLockWrapper lock;
90
91     std::ostringstream oss;
92     selectFieldComponent();
93     // The component has changed, we need to rescale the scalar bar to adapt:
94     rescaleTransferFunction();
95     fixScalarBarTitle();   // should be fixed in PV one day!
96     pushAndExecPyLine("pvs.Render();");
97   }
98 }
99
100 template<typename PresentationType, typename PresentationParameters>
101 void
102 MEDPresentation::updateColorMap(MEDCALC::ColorMapType colorMap)
103 {
104   PresentationType * p = static_cast<PresentationType*>(this);
105
106   PresentationParameters params;
107   p->getParameters(params);
108   params.colorMap = colorMap;
109   p->setParameters(params);
110
111   p->_colorMap = colorMap;
112
113   // GUI helper:
114   setIntProperty(MEDPresentation::PROP_COLOR_MAP, colorMap);
115
116   // Update the pipeline:
117   {
118     MEDPyLockWrapper lock;
119     selectColorMap();
120     pushAndExecPyLine("pvs.Render();");
121   }
122 }
123
124 template<typename PresentationType, typename PresentationParameters>
125 void
126 MEDPresentation::updateScalarBarRange(MEDCALC::ScalarBarRangeType sbRange)
127 {
128   PresentationType * p = static_cast<PresentationType*>(this);
129
130   PresentationParameters params;
131   p->getParameters(params);
132   params.scalarBarRange = sbRange;
133   p->setParameters(params);
134
135   p->_sbRange = sbRange;
136
137   // GUI helper:
138   setIntProperty(MEDPresentation::PROP_SCALAR_BAR_RANGE, sbRange);
139
140   // Update the pipeline:
141   {
142     MEDPyLockWrapper lock;
143     rescaleTransferFunction();
144     pushAndExecPyLine("pvs.Render();");
145   }
146 }
147
148
149 #endif // _MED_PRESENTATION_TXX_