]> SALOME platform Git repositories - modules/smesh.git/blob - src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx
Salome HOME
PAL9164. set max hypo value using COORD_MAX defined in SMESHGUI_SpinBox.h
[modules/smesh.git] / src / StdMeshersGUI / StdMeshersGUI_Parameters.cxx
1 //  SMESH StdMeshersGUI : GUI for standard meshers
2 //
3 //  Copyright (C) 2003  CEA
4 // 
5 //  This library is free software; you can redistribute it and/or 
6 //  modify it under the terms of the GNU Lesser General Public 
7 //  License as published by the Free Software Foundation; either 
8 //  version 2.1 of the License. 
9 // 
10 //  This library is distributed in the hope that it will be useful, 
11 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
12 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
13 //  Lesser General Public License for more details. 
14 // 
15 //  You should have received a copy of the GNU Lesser General Public 
16 //  License along with this library; if not, write to the Free Software 
17 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
18 // 
19 //  See http://www.salome-platform.org or email : webmaster.salome@opencascade.org
20 //
21 //
22 //
23 //  File   : StdMeshersGUI_Parameters.cxx
24 //  Module : SMESH
25 //  $Header$
26
27 #include "StdMeshersGUI_Parameters.h"
28
29 #include "SMESHGUI_SpinBox.h" // for the sake of COORD_MAX, COORD_MIN definition
30
31 #include <qobject.h>
32
33 using namespace std;
34
35 #define COORD_MAX_2 (COORD_MAX*COORD_MAX)
36 #define COORD_MAX_3 (COORD_MAX*COORD_MAX*COORD_MAX)
37
38 //=======================================================================
39 //function : HasParameters
40 //purpose  : 
41 //=======================================================================
42
43 bool StdMeshersGUI_Parameters::HasParameters (const QString& hypType)
44 {
45   return ((hypType.compare("LocalLength") == 0) ||
46           (hypType.compare("NumberOfSegments") == 0) ||
47           (hypType.compare("MaxElementArea") == 0) ||
48           (hypType.compare("MaxElementVolume") == 0) ||
49           (hypType.compare("StartEndLength") == 0) ||
50           (hypType.compare("Deflection1D") == 0) ||
51           (hypType.compare("Arithmetic1D") == 0));
52 }
53
54 //=======================================================================
55 //function : SetInitValue
56 //purpose  : 
57 //=======================================================================
58
59 void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param,
60                                             int                    initValue)
61 {
62   SMESHGUI_intParameter* p = dynamic_cast<SMESHGUI_intParameter*>(param.get());
63   if ( p ) p->InitValue() = initValue;
64 }
65
66 //=======================================================================
67 //function : SetInitValue
68 //purpose  : 
69 //=======================================================================
70
71 void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param,
72                                             double                 initValue)
73 {
74   SMESHGUI_doubleParameter* p = dynamic_cast<SMESHGUI_doubleParameter*>(param.get());
75   if ( p ) p->InitValue() = initValue;
76 }
77
78 //=======================================================================
79 //function : SetInitValue
80 //purpose  : 
81 //=======================================================================
82
83 void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param,
84                                             const char*            initValue)
85 {
86   SMESHGUI_strParameter* p = dynamic_cast<SMESHGUI_strParameter*>(param.get());
87   if ( p ) p->InitValue() = initValue;
88 }
89
90 //=======================================================================
91 //function : GetParameters
92 //purpose  : 
93 //=======================================================================
94
95 // SMESHGUI_doubleParameter( initValue, label, bottom, top, step, decimals )
96 #define DOUBLE_PARAM(v,l,b,t,s,d) SMESHGUI_aParameterPtr(new SMESHGUI_doubleParameter(v,l,b,t,s,d))
97 #define INT_PARAM(v,l,b,t) SMESHGUI_aParameterPtr(new SMESHGUI_intParameter(v,l,b,t))
98
99 void StdMeshersGUI_Parameters::GetParameters (const QString&                 hypType,
100                                               list<SMESHGUI_aParameterPtr> & paramList )
101 {
102   paramList.clear();
103
104   if (hypType.compare("LocalLength") == 0)
105   {
106     paramList.push_back( DOUBLE_PARAM (1.0,
107                                        QObject::tr("SMESH_LOCAL_LENGTH_PARAM"),
108                                        1E-3, COORD_MAX, 1.0, 6));
109   }
110   else if (hypType.compare("NumberOfSegments") == 0)
111   {
112     paramList.push_back ( INT_PARAM (3,
113                                      QObject::tr("SMESH_NB_SEGMENTS_PARAM"),
114                                      1, 9999 ));
115   }
116   else if (hypType.compare("Arithmetic1D") == 0)
117   {
118     paramList.push_back( DOUBLE_PARAM ( 1.0,
119                                       QObject::tr("SMESH_START_LENGTH_PARAM"), 
120                                       1E-3, COORD_MAX, 1, 6));
121     paramList.push_back( DOUBLE_PARAM ( 10.0,
122                                        QObject::tr("SMESH_END_LENGTH_PARAM"),
123                                        1E-3, COORD_MAX, 1, 6));
124   }
125   else if (hypType.compare("MaxElementArea") == 0)
126   {
127     paramList.push_back( DOUBLE_PARAM (1.0,
128                                        QObject::tr("SMESH_MAX_ELEMENT_AREA_PARAM"), 
129                                        1.E-6, COORD_MAX_2, 1.0, 6));
130   }
131   else if (hypType.compare("MaxElementVolume") == 0)
132   {
133     paramList.push_back( DOUBLE_PARAM ( 1.0,
134                                        QObject::tr("SMESH_MAX_ELEMENT_VOLUME_PARAM"), 
135                                        1.E-9, COORD_MAX_3, 1.0, 6));
136   }
137   else if (hypType.compare("StartEndLength") == 0)
138   {
139     paramList.push_back( DOUBLE_PARAM ( 1.0,
140                                       QObject::tr("SMESH_START_LENGTH_PARAM"), 
141                                       1.0E-3, COORD_MAX, 1, 6));
142     paramList.push_back( DOUBLE_PARAM ( 10.0,
143                                        QObject::tr("SMESH_END_LENGTH_PARAM"),
144                                        1.0E-3, COORD_MAX, 1, 6));
145   }
146   else if (hypType.compare("Deflection1D") == 0)
147   {
148     paramList.push_back( DOUBLE_PARAM ( 1.0,
149                                        QObject::tr("SMESH_DEFLECTION1D_PARAM"), 
150                                        1.0E-3, COORD_MAX, 1, 6));
151   }
152 }
153   
154 //=======================================================================
155 //function : GetParameters
156 //purpose  : 
157 //=======================================================================
158
159 void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr    theHyp,
160                                               list<SMESHGUI_aParameterPtr> & paramList )
161 {
162   paramList.clear();
163
164   if (theHyp->_is_nil()) return;
165
166   QString hypType = theHyp->GetName();
167   GetParameters( hypType, paramList ); // get default parameters
168   if ( paramList.empty() )
169     return;
170
171   // set current values
172   if (hypType.compare("LocalLength") == 0)
173   {
174     StdMeshers::StdMeshers_LocalLength_var LL =
175       StdMeshers::StdMeshers_LocalLength::_narrow(theHyp);
176     SetInitValue( paramList.front(), LL->GetLength() );
177   }
178   else if (hypType.compare("NumberOfSegments") == 0)
179   {
180     StdMeshers::StdMeshers_NumberOfSegments_var NOS =
181       StdMeshers::StdMeshers_NumberOfSegments::_narrow(theHyp);
182     SetInitValue( paramList.front(), (int) NOS->GetNumberOfSegments());
183   }
184   else if (hypType.compare("Arithmetic1D") == 0)
185   {
186     StdMeshers::StdMeshers_Arithmetic1D_var hyp =
187       StdMeshers::StdMeshers_Arithmetic1D::_narrow(theHyp);
188     SetInitValue( paramList.front(), hyp->GetLength( true )) ;
189     SetInitValue( paramList.back(), hyp->GetLength( false )) ;
190   }
191   else if (hypType.compare("MaxElementArea") == 0)
192   {
193     StdMeshers::StdMeshers_MaxElementArea_var MEA =
194       StdMeshers::StdMeshers_MaxElementArea::_narrow(theHyp);
195     SetInitValue( paramList.front(), MEA->GetMaxElementArea() );
196   }
197   else if (hypType.compare("MaxElementVolume") == 0)
198   {
199     StdMeshers::StdMeshers_MaxElementVolume_var MEV =
200       StdMeshers::StdMeshers_MaxElementVolume::_narrow(theHyp);
201     SetInitValue( paramList.front(), MEV->GetMaxElementVolume() );
202   }
203   else if (hypType.compare("StartEndLength") == 0)
204   {
205     StdMeshers::StdMeshers_StartEndLength_var hyp =
206       StdMeshers::StdMeshers_StartEndLength::_narrow(theHyp);
207     SetInitValue( paramList.front(), hyp->GetLength( true ));
208     SetInitValue( paramList.back(),  hyp->GetLength( false ));
209   }
210   else if (hypType.compare("Deflection1D") == 0)
211   {
212     StdMeshers::StdMeshers_Deflection1D_var hyp =
213       StdMeshers::StdMeshers_Deflection1D::_narrow(theHyp);
214     SetInitValue( paramList.back(),  hyp->GetDeflection()) ;
215   }
216 }
217
218 //=======================================================================
219 //function : GetParameters
220 //purpose  : 
221 //=======================================================================  
222 void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr         hyp,
223                                               list<SMESHGUI_aParameterPtr> &      paramList,
224                                               QString&                            params)
225 {
226   params = "";
227   list<SMESHGUI_aParameterPtr>::iterator paramIt = paramList.begin();
228   for ( ; paramIt != paramList.end(); paramIt++) {
229     if (params.compare("")) params += " ; ";
230
231     if ((*paramIt)->GetType() == SMESHGUI_aParameter::DOUBLE ) {
232       double aDoubleValue = 0.;
233       (*paramIt)->GetNewDouble(aDoubleValue);
234       params += QString::number(aDoubleValue);
235     }
236     else if ((*paramIt)->GetType() == SMESHGUI_aParameter::TEXT ) {
237       QString aStrValue( "" );
238       (*paramIt)->GetNewText(aStrValue);
239       params += aStrValue.simplifyWhiteSpace();
240     }
241     else {
242       int aIntValue = 0;
243       (*paramIt)->GetNewInt(aIntValue);
244       params += QString::number(aIntValue);;
245     }
246   }
247 }
248
249 //=======================================================================
250 //function : SetParameters
251 //purpose  : 
252 //=======================================================================
253
254 bool StdMeshersGUI_Parameters::SetParameters(SMESH::SMESH_Hypothesis_ptr          theHyp,
255                                              const list<SMESHGUI_aParameterPtr> & paramList )
256 {
257   if (theHyp->_is_nil() || paramList.empty()) return false;
258
259   bool modified = false;
260
261   QString hypType = theHyp->GetName();
262
263   if (hypType.compare("LocalLength") == 0)
264   {
265     StdMeshers::StdMeshers_LocalLength_var LL =
266       StdMeshers::StdMeshers_LocalLength::_narrow(theHyp);
267     double length = LL->GetLength();
268     modified = paramList.front()->GetNewDouble( length );
269     LL->SetLength(length);
270   }
271   else if (hypType.compare("NumberOfSegments") == 0)
272   {
273     StdMeshers::StdMeshers_NumberOfSegments_var NOS =
274       StdMeshers::StdMeshers_NumberOfSegments::_narrow(theHyp);
275     int NbSeg = NOS->GetNumberOfSegments();
276     modified = paramList.front()->GetNewInt( NbSeg );
277     NOS->SetNumberOfSegments(NbSeg);
278   }
279   else if (hypType.compare("Arithmetic1D") == 0)
280   {
281     if ( paramList.size() != 2 )
282       return false;
283     StdMeshers::StdMeshers_Arithmetic1D_var hyp =
284       StdMeshers::StdMeshers_Arithmetic1D::_narrow(theHyp);
285     double begLength = hyp->GetLength( true ) ;
286     double endLength = hyp->GetLength( false ) ;
287     modified = paramList.front()->GetNewDouble( begLength );
288     modified = paramList.back()->GetNewDouble( endLength ) || modified;
289     hyp->SetLength( begLength, true );
290     hyp->SetLength( endLength, false );
291   }
292   else if (hypType.compare("MaxElementArea") == 0)
293   {
294     StdMeshers::StdMeshers_MaxElementArea_var MEA =
295       StdMeshers::StdMeshers_MaxElementArea::_narrow(theHyp);
296     double MaxArea = MEA->GetMaxElementArea();
297     modified = paramList.front()->GetNewDouble( MaxArea );
298     MEA->SetMaxElementArea(MaxArea);
299   }
300   else if (hypType.compare("MaxElementVolume") == 0)
301   {
302     StdMeshers::StdMeshers_MaxElementVolume_var MEV =
303       StdMeshers::StdMeshers_MaxElementVolume::_narrow(theHyp);
304     double MaxVolume = MEV->GetMaxElementVolume() ;
305     modified = paramList.front()->GetNewDouble( MaxVolume );
306     MEV->SetMaxElementVolume(MaxVolume);
307   }
308   else if (hypType.compare("StartEndLength") == 0)
309   {
310     if ( paramList.size() != 2 )
311       return false;
312     StdMeshers::StdMeshers_StartEndLength_var hyp =
313       StdMeshers::StdMeshers_StartEndLength::_narrow(theHyp);
314     double begLength = hyp->GetLength( true ) ;
315     double endLength = hyp->GetLength( false ) ;
316     modified = paramList.front()->GetNewDouble( begLength );
317     modified = paramList.back()->GetNewDouble( endLength ) || modified;
318     hyp->SetLength( begLength, true );
319     hyp->SetLength( endLength, false );
320   }
321   else if (hypType.compare("Deflection1D") == 0)
322   {
323     StdMeshers::StdMeshers_Deflection1D_var hyp =
324       StdMeshers::StdMeshers_Deflection1D::_narrow(theHyp);
325     double value = hyp->GetDeflection() ;
326     modified = paramList.front()->GetNewDouble( value );
327     hyp->SetDeflection( value );
328   }
329   return modified ;
330 }
331