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"
33 //=======================================================================
34 //function : HasParameters
36 //=======================================================================
38 bool StdMeshersGUI_Parameters::HasParameters (const QString& hypType)
40 return ((hypType.compare("LocalLength") == 0) ||
41 (hypType.compare("NumberOfSegments") == 0) ||
42 (hypType.compare("MaxElementArea") == 0) ||
43 (hypType.compare("MaxElementVolume") == 0) ||
44 (hypType.compare("StartEndLength") == 0) ||
45 (hypType.compare("Deflection1D") == 0) ||
46 (hypType.compare("Arithmetic1D") == 0));
49 //=======================================================================
50 //function : SetInitValue
52 //=======================================================================
54 void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param,
57 SMESHGUI_intParameter* p = dynamic_cast<SMESHGUI_intParameter*>(param.get());
58 if ( p ) p->InitValue() = initValue;
61 //=======================================================================
62 //function : SetInitValue
64 //=======================================================================
66 void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param,
69 SMESHGUI_doubleParameter* p = dynamic_cast<SMESHGUI_doubleParameter*>(param.get());
70 if ( p ) p->InitValue() = initValue;
73 //=======================================================================
74 //function : SetInitValue
76 //=======================================================================
78 void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param,
79 const char* initValue)
81 SMESHGUI_strParameter* p = dynamic_cast<SMESHGUI_strParameter*>(param.get());
82 if ( p ) p->InitValue() = initValue;
85 //=======================================================================
86 //function : GetParameters
88 //=======================================================================
90 // SMESHGUI_doubleParameter( initValue, label, bottom, top, step, decimals )
91 #define DOUBLE_PARAM(v,l,b,t,s,d) SMESHGUI_aParameterPtr(new SMESHGUI_doubleParameter(v,l,b,t,s,d))
92 #define INT_PARAM(v,l,b,t) SMESHGUI_aParameterPtr(new SMESHGUI_intParameter(v,l,b,t))
94 void StdMeshersGUI_Parameters::GetParameters (const QString& hypType,
95 list<SMESHGUI_aParameterPtr> & paramList )
99 if (hypType.compare("LocalLength") == 0)
101 paramList.push_back( DOUBLE_PARAM (1.0,
102 QObject::tr("SMESH_LOCAL_LENGTH_PARAM"),
103 1E-3, 999.999, 1.0, 6));
105 else if (hypType.compare("NumberOfSegments") == 0)
107 paramList.push_back ( INT_PARAM (3,
108 QObject::tr("SMESH_NB_SEGMENTS_PARAM"),
111 else if (hypType.compare("Arithmetic1D") == 0)
113 paramList.push_back( DOUBLE_PARAM ( 1.0,
114 QObject::tr("SMESH_START_LENGTH_PARAM"),
115 1E-3, 999.999, 1, 6));
116 paramList.push_back( DOUBLE_PARAM ( 10.0,
117 QObject::tr("SMESH_END_LENGTH_PARAM"),
118 1E-3, 999.999, 1, 6));
120 else if (hypType.compare("MaxElementArea") == 0)
122 paramList.push_back( DOUBLE_PARAM (1.0,
123 QObject::tr("SMESH_MAX_ELEMENT_AREA_PARAM"),
124 1.E-6, 999999.999, 1.0, 6));
126 else if (hypType.compare("MaxElementVolume") == 0)
128 paramList.push_back( DOUBLE_PARAM ( 1.0,
129 QObject::tr("SMESH_MAX_ELEMENT_VOLUME_PARAM"),
130 1.E-9, 1.E9, 1.0, 6));
132 else if (hypType.compare("StartEndLength") == 0)
134 paramList.push_back( DOUBLE_PARAM ( 1.0,
135 QObject::tr("SMESH_START_LENGTH_PARAM"),
136 1.0E-3, 999.999, 1, 6));
137 paramList.push_back( DOUBLE_PARAM ( 10.0,
138 QObject::tr("SMESH_END_LENGTH_PARAM"),
139 1.0E-3, 999.999, 1, 6));
141 else if (hypType.compare("Deflection1D") == 0)
143 paramList.push_back( DOUBLE_PARAM ( 1.0,
144 QObject::tr("SMESH_DEFLECTION1D_PARAM"),
145 1.0E-3, 999.999, 1, 6));
149 //=======================================================================
150 //function : GetParameters
152 //=======================================================================
154 void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr theHyp,
155 list<SMESHGUI_aParameterPtr> & paramList )
159 if (theHyp->_is_nil()) return;
161 QString hypType = theHyp->GetName();
162 GetParameters( hypType, paramList ); // get default parameters
163 if ( paramList.empty() )
166 // set current values
167 if (hypType.compare("LocalLength") == 0)
169 StdMeshers::StdMeshers_LocalLength_var LL =
170 StdMeshers::StdMeshers_LocalLength::_narrow(theHyp);
171 SetInitValue( paramList.front(), LL->GetLength() );
173 else if (hypType.compare("NumberOfSegments") == 0)
175 StdMeshers::StdMeshers_NumberOfSegments_var NOS =
176 StdMeshers::StdMeshers_NumberOfSegments::_narrow(theHyp);
177 SetInitValue( paramList.front(), (int) NOS->GetNumberOfSegments());
179 else if (hypType.compare("Arithmetic1D") == 0)
181 StdMeshers::StdMeshers_Arithmetic1D_var hyp =
182 StdMeshers::StdMeshers_Arithmetic1D::_narrow(theHyp);
183 SetInitValue( paramList.front(), hyp->GetLength( true )) ;
184 SetInitValue( paramList.back(), hyp->GetLength( false )) ;
186 else if (hypType.compare("MaxElementArea") == 0)
188 StdMeshers::StdMeshers_MaxElementArea_var MEA =
189 StdMeshers::StdMeshers_MaxElementArea::_narrow(theHyp);
190 SetInitValue( paramList.front(), MEA->GetMaxElementArea() );
192 else if (hypType.compare("MaxElementVolume") == 0)
194 StdMeshers::StdMeshers_MaxElementVolume_var MEV =
195 StdMeshers::StdMeshers_MaxElementVolume::_narrow(theHyp);
196 SetInitValue( paramList.front(), MEV->GetMaxElementVolume() );
198 else if (hypType.compare("StartEndLength") == 0)
200 StdMeshers::StdMeshers_StartEndLength_var hyp =
201 StdMeshers::StdMeshers_StartEndLength::_narrow(theHyp);
202 SetInitValue( paramList.front(), hyp->GetLength( true ));
203 SetInitValue( paramList.back(), hyp->GetLength( false ));
205 else if (hypType.compare("Deflection1D") == 0)
207 StdMeshers::StdMeshers_Deflection1D_var hyp =
208 StdMeshers::StdMeshers_Deflection1D::_narrow(theHyp);
209 SetInitValue( paramList.back(), hyp->GetDeflection()) ;
213 //=======================================================================
214 //function : GetParameters
216 //=======================================================================
217 void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr hyp,
218 list<SMESHGUI_aParameterPtr> & paramList,
222 list<SMESHGUI_aParameterPtr>::iterator paramIt = paramList.begin();
223 for ( ; paramIt != paramList.end(); paramIt++) {
224 if (params.compare("")) params += " ; ";
226 if ((*paramIt)->GetType() == SMESHGUI_aParameter::DOUBLE ) {
227 double aDoubleValue = 0.;
228 (*paramIt)->GetNewDouble(aDoubleValue);
229 params += QString::number(aDoubleValue);
231 else if ((*paramIt)->GetType() == SMESHGUI_aParameter::TEXT ) {
232 QString aStrValue( "" );
233 (*paramIt)->GetNewText(aStrValue);
234 params += aStrValue.simplifyWhiteSpace();
238 (*paramIt)->GetNewInt(aIntValue);
239 params += QString::number(aIntValue);;
244 //=======================================================================
245 //function : SetParameters
247 //=======================================================================
249 bool StdMeshersGUI_Parameters::SetParameters(SMESH::SMESH_Hypothesis_ptr theHyp,
250 const list<SMESHGUI_aParameterPtr> & paramList )
252 if (theHyp->_is_nil() || paramList.empty()) return false;
254 bool modified = false;
256 QString hypType = theHyp->GetName();
258 if (hypType.compare("LocalLength") == 0)
260 StdMeshers::StdMeshers_LocalLength_var LL =
261 StdMeshers::StdMeshers_LocalLength::_narrow(theHyp);
262 double length = LL->GetLength();
263 modified = paramList.front()->GetNewDouble( length );
264 LL->SetLength(length);
266 else if (hypType.compare("NumberOfSegments") == 0)
268 StdMeshers::StdMeshers_NumberOfSegments_var NOS =
269 StdMeshers::StdMeshers_NumberOfSegments::_narrow(theHyp);
270 int NbSeg = NOS->GetNumberOfSegments();
271 modified = paramList.front()->GetNewInt( NbSeg );
272 NOS->SetNumberOfSegments(NbSeg);
274 else if (hypType.compare("Arithmetic1D") == 0)
276 if ( paramList.size() != 2 )
278 StdMeshers::StdMeshers_Arithmetic1D_var hyp =
279 StdMeshers::StdMeshers_Arithmetic1D::_narrow(theHyp);
280 double begLength = hyp->GetLength( true ) ;
281 double endLength = hyp->GetLength( false ) ;
282 modified = paramList.front()->GetNewDouble( begLength );
283 modified = paramList.back()->GetNewDouble( endLength ) || modified;
284 hyp->SetLength( begLength, true );
285 hyp->SetLength( endLength, false );
287 else if (hypType.compare("MaxElementArea") == 0)
289 StdMeshers::StdMeshers_MaxElementArea_var MEA =
290 StdMeshers::StdMeshers_MaxElementArea::_narrow(theHyp);
291 double MaxArea = MEA->GetMaxElementArea();
292 modified = paramList.front()->GetNewDouble( MaxArea );
293 MEA->SetMaxElementArea(MaxArea);
295 else if (hypType.compare("MaxElementVolume") == 0)
297 StdMeshers::StdMeshers_MaxElementVolume_var MEV =
298 StdMeshers::StdMeshers_MaxElementVolume::_narrow(theHyp);
299 double MaxVolume = MEV->GetMaxElementVolume() ;
300 modified = paramList.front()->GetNewDouble( MaxVolume );
301 MEV->SetMaxElementVolume(MaxVolume);
303 else if (hypType.compare("StartEndLength") == 0)
305 if ( paramList.size() != 2 )
307 StdMeshers::StdMeshers_StartEndLength_var hyp =
308 StdMeshers::StdMeshers_StartEndLength::_narrow(theHyp);
309 double begLength = hyp->GetLength( true ) ;
310 double endLength = hyp->GetLength( false ) ;
311 modified = paramList.front()->GetNewDouble( begLength );
312 modified = paramList.back()->GetNewDouble( endLength ) || modified;
313 hyp->SetLength( begLength, true );
314 hyp->SetLength( endLength, false );
316 else if (hypType.compare("Deflection1D") == 0)
318 StdMeshers::StdMeshers_Deflection1D_var hyp =
319 StdMeshers::StdMeshers_Deflection1D::_narrow(theHyp);
320 double value = hyp->GetDeflection() ;
321 modified = paramList.front()->GetNewDouble( value );
322 hyp->SetDeflection( value );