1 // SMESH StdMeshersGUI : GUI for standard meshers
3 // Copyright (C) 2003 CEA
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.
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.
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
19 // See http://www.salome-platform.org or email : webmaster.salome@opencascade.org
23 // File : StdMeshersGUI_Parameters.cxx
27 #include "StdMeshersGUI_Parameters.h"
29 #include "SMESHGUI_SpinBox.h" // for the sake of COORD_MAX, COORD_MIN definition
35 #define VALUE_MAX COORD_MAX
36 #define VALUE_MAX_2 (VALUE_MAX*VALUE_MAX)
37 #define VALUE_MAX_3 (VALUE_MAX*VALUE_MAX*VALUE_MAX)
39 #define VALUE_SMALL 1.0e-15
40 #define VALUE_SMALL_2 (VALUE_SMALL*VALUE_SMALL)
41 #define VALUE_SMALL_3 (VALUE_SMALL*VALUE_SMALL*VALUE_SMALL)
43 //=======================================================================
44 //function : HasParameters
46 //=======================================================================
48 bool StdMeshersGUI_Parameters::HasParameters (const QString& hypType)
50 return ((hypType.compare("LocalLength") == 0) ||
51 (hypType.compare("NumberOfSegments") == 0) ||
52 (hypType.compare("MaxElementArea") == 0) ||
53 (hypType.compare("MaxElementVolume") == 0) ||
54 (hypType.compare("StartEndLength") == 0) ||
55 (hypType.compare("Deflection1D") == 0) ||
56 (hypType.compare("Arithmetic1D") == 0));
59 //=======================================================================
60 //function : SetInitValue
62 //=======================================================================
64 void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param,
67 SMESHGUI_intParameter* p = dynamic_cast<SMESHGUI_intParameter*>(param.get());
68 if ( p ) p->InitValue() = initValue;
71 //=======================================================================
72 //function : SetInitValue
74 //=======================================================================
76 void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param,
79 SMESHGUI_doubleParameter* p = dynamic_cast<SMESHGUI_doubleParameter*>(param.get());
80 if ( p ) p->InitValue() = initValue;
83 //=======================================================================
84 //function : SetInitValue
86 //=======================================================================
88 void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param,
89 const char* initValue)
91 SMESHGUI_strParameter* p = dynamic_cast<SMESHGUI_strParameter*>(param.get());
92 if ( p ) p->InitValue() = initValue;
95 //=======================================================================
96 //function : GetParameters
98 //=======================================================================
100 // SMESHGUI_doubleParameter( initValue, label, bottom, top, step, decimals )
101 #define DOUBLE_PARAM(v,l,b,t,s,d) SMESHGUI_aParameterPtr(new SMESHGUI_doubleParameter(v,l,b,t,s,d))
102 #define INT_PARAM(v,l,b,t) SMESHGUI_aParameterPtr(new SMESHGUI_intParameter(v,l,b,t))
104 void StdMeshersGUI_Parameters::GetParameters (const QString& hypType,
105 list<SMESHGUI_aParameterPtr> & paramList )
109 if (hypType.compare("LocalLength") == 0)
111 paramList.push_back( DOUBLE_PARAM (1.0,
112 QObject::tr("SMESH_LOCAL_LENGTH_PARAM"),
113 VALUE_SMALL, VALUE_MAX, 1.0, 6));
115 else if (hypType.compare("NumberOfSegments") == 0)
117 paramList.push_back ( INT_PARAM (3,
118 QObject::tr("SMESH_NB_SEGMENTS_PARAM"),
120 paramList.push_back ( DOUBLE_PARAM (1.0,
121 QObject::tr("SMESH_NB_SEGMENTS_SCALE_PARAM"),
122 VALUE_SMALL, VALUE_MAX, 0.1, 6 ));
124 else if (hypType.compare("Arithmetic1D") == 0)
126 paramList.push_back( DOUBLE_PARAM ( 1.0,
127 QObject::tr("SMESH_START_LENGTH_PARAM"),
128 VALUE_SMALL, VALUE_MAX, 1, 6));
129 paramList.push_back( DOUBLE_PARAM ( 10.0,
130 QObject::tr("SMESH_END_LENGTH_PARAM"),
131 VALUE_SMALL, VALUE_MAX, 1, 6));
133 else if (hypType.compare("MaxElementArea") == 0)
135 paramList.push_back( DOUBLE_PARAM (1.0,
136 QObject::tr("SMESH_MAX_ELEMENT_AREA_PARAM"),
137 VALUE_SMALL_2, VALUE_MAX_2, 1.0, 6));
139 else if (hypType.compare("MaxElementVolume") == 0)
141 paramList.push_back( DOUBLE_PARAM ( 1.0,
142 QObject::tr("SMESH_MAX_ELEMENT_VOLUME_PARAM"),
143 VALUE_SMALL_3, VALUE_MAX_3, 1.0, 6));
145 else if (hypType.compare("StartEndLength") == 0)
147 paramList.push_back( DOUBLE_PARAM ( 1.0,
148 QObject::tr("SMESH_START_LENGTH_PARAM"),
149 VALUE_SMALL, VALUE_MAX, 1, 6));
150 paramList.push_back( DOUBLE_PARAM ( 10.0,
151 QObject::tr("SMESH_END_LENGTH_PARAM"),
152 VALUE_SMALL, VALUE_MAX, 1, 6));
154 else if (hypType.compare("Deflection1D") == 0)
156 paramList.push_back( DOUBLE_PARAM ( 1.0,
157 QObject::tr("SMESH_DEFLECTION1D_PARAM"),
158 VALUE_SMALL, VALUE_MAX, 1, 6));
162 //=======================================================================
163 //function : GetParameters
165 //=======================================================================
167 void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr theHyp,
168 list<SMESHGUI_aParameterPtr> & paramList )
172 if (theHyp->_is_nil()) return;
174 QString hypType = theHyp->GetName();
175 GetParameters( hypType, paramList ); // get default parameters
176 if ( paramList.empty() )
179 // set current values
180 if (hypType.compare("LocalLength") == 0)
182 StdMeshers::StdMeshers_LocalLength_var LL =
183 StdMeshers::StdMeshers_LocalLength::_narrow(theHyp);
184 SetInitValue( paramList.front(), LL->GetLength() );
186 else if (hypType.compare("NumberOfSegments") == 0)
188 StdMeshers::StdMeshers_NumberOfSegments_var NOS =
189 StdMeshers::StdMeshers_NumberOfSegments::_narrow(theHyp);
190 SetInitValue( paramList.front(), (int) NOS->GetNumberOfSegments());
191 SetInitValue( paramList.back(), NOS->GetScaleFactor());
193 else if (hypType.compare("Arithmetic1D") == 0)
195 StdMeshers::StdMeshers_Arithmetic1D_var hyp =
196 StdMeshers::StdMeshers_Arithmetic1D::_narrow(theHyp);
197 SetInitValue( paramList.front(), hyp->GetLength( true )) ;
198 SetInitValue( paramList.back(), hyp->GetLength( false )) ;
200 else if (hypType.compare("MaxElementArea") == 0)
202 StdMeshers::StdMeshers_MaxElementArea_var MEA =
203 StdMeshers::StdMeshers_MaxElementArea::_narrow(theHyp);
204 SetInitValue( paramList.front(), MEA->GetMaxElementArea() );
206 else if (hypType.compare("MaxElementVolume") == 0)
208 StdMeshers::StdMeshers_MaxElementVolume_var MEV =
209 StdMeshers::StdMeshers_MaxElementVolume::_narrow(theHyp);
210 SetInitValue( paramList.front(), MEV->GetMaxElementVolume() );
212 else if (hypType.compare("StartEndLength") == 0)
214 StdMeshers::StdMeshers_StartEndLength_var hyp =
215 StdMeshers::StdMeshers_StartEndLength::_narrow(theHyp);
216 SetInitValue( paramList.front(), hyp->GetLength( true ));
217 SetInitValue( paramList.back(), hyp->GetLength( false ));
219 else if (hypType.compare("Deflection1D") == 0)
221 StdMeshers::StdMeshers_Deflection1D_var hyp =
222 StdMeshers::StdMeshers_Deflection1D::_narrow(theHyp);
223 SetInitValue( paramList.back(), hyp->GetDeflection()) ;
227 //=======================================================================
228 //function : GetParameters
230 //=======================================================================
231 void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr hyp,
232 list<SMESHGUI_aParameterPtr> & paramList,
236 list<SMESHGUI_aParameterPtr>::iterator paramIt = paramList.begin();
237 for ( ; paramIt != paramList.end(); paramIt++) {
238 if (params.compare("")) params += " ; ";
240 if ((*paramIt)->GetType() == SMESHGUI_aParameter::DOUBLE ) {
241 double aDoubleValue = 0.;
242 (*paramIt)->GetNewDouble(aDoubleValue);
243 params += QString::number(aDoubleValue);
245 else if ((*paramIt)->GetType() == SMESHGUI_aParameter::TEXT ) {
246 QString aStrValue( "" );
247 (*paramIt)->GetNewText(aStrValue);
248 params += aStrValue.simplifyWhiteSpace();
252 (*paramIt)->GetNewInt(aIntValue);
253 params += QString::number(aIntValue);
258 //=======================================================================
259 //function : SetParameters
261 //=======================================================================
263 bool StdMeshersGUI_Parameters::SetParameters(SMESH::SMESH_Hypothesis_ptr theHyp,
264 const list<SMESHGUI_aParameterPtr> & paramList )
266 if (theHyp->_is_nil() || paramList.empty()) return false;
268 bool modified = false;
270 QString hypType = theHyp->GetName();
272 if (hypType.compare("LocalLength") == 0)
274 StdMeshers::StdMeshers_LocalLength_var LL =
275 StdMeshers::StdMeshers_LocalLength::_narrow(theHyp);
276 double length = LL->GetLength();
277 modified = paramList.front()->GetNewDouble( length );
278 LL->SetLength(length);
280 else if (hypType.compare("NumberOfSegments") == 0)
282 StdMeshers::StdMeshers_NumberOfSegments_var NOS =
283 StdMeshers::StdMeshers_NumberOfSegments::_narrow(theHyp);
284 int NbSeg = NOS->GetNumberOfSegments();
285 double Scale = NOS->GetScaleFactor() ;
286 modified = paramList.front()->GetNewInt( NbSeg );
287 modified = paramList.back()->GetNewDouble( Scale ) || modified;
288 NOS->SetNumberOfSegments(NbSeg);
289 NOS->SetScaleFactor( Scale );
291 else if (hypType.compare("Arithmetic1D") == 0)
293 if ( paramList.size() != 2 )
295 StdMeshers::StdMeshers_Arithmetic1D_var hyp =
296 StdMeshers::StdMeshers_Arithmetic1D::_narrow(theHyp);
297 double begLength = hyp->GetLength( true ) ;
298 double endLength = hyp->GetLength( false ) ;
299 modified = paramList.front()->GetNewDouble( begLength );
300 modified = paramList.back()->GetNewDouble( endLength ) || modified;
301 hyp->SetLength( begLength, true );
302 hyp->SetLength( endLength, false );
304 else if (hypType.compare("MaxElementArea") == 0)
306 StdMeshers::StdMeshers_MaxElementArea_var MEA =
307 StdMeshers::StdMeshers_MaxElementArea::_narrow(theHyp);
308 double MaxArea = MEA->GetMaxElementArea();
309 modified = paramList.front()->GetNewDouble( MaxArea );
310 MEA->SetMaxElementArea(MaxArea);
312 else if (hypType.compare("MaxElementVolume") == 0)
314 StdMeshers::StdMeshers_MaxElementVolume_var MEV =
315 StdMeshers::StdMeshers_MaxElementVolume::_narrow(theHyp);
316 double MaxVolume = MEV->GetMaxElementVolume() ;
317 modified = paramList.front()->GetNewDouble( MaxVolume );
318 MEV->SetMaxElementVolume(MaxVolume);
320 else if (hypType.compare("StartEndLength") == 0)
322 if ( paramList.size() != 2 )
324 StdMeshers::StdMeshers_StartEndLength_var hyp =
325 StdMeshers::StdMeshers_StartEndLength::_narrow(theHyp);
326 double begLength = hyp->GetLength( true ) ;
327 double endLength = hyp->GetLength( false ) ;
328 modified = paramList.front()->GetNewDouble( begLength );
329 modified = paramList.back()->GetNewDouble( endLength ) || modified;
330 hyp->SetLength( begLength, true );
331 hyp->SetLength( endLength, false );
333 else if (hypType.compare("Deflection1D") == 0)
335 StdMeshers::StdMeshers_Deflection1D_var hyp =
336 StdMeshers::StdMeshers_Deflection1D::_narrow(theHyp);
337 double value = hyp->GetDeflection() ;
338 modified = paramList.front()->GetNewDouble( value );
339 hyp->SetDeflection( value );