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 COORD_MAX_2 (COORD_MAX*COORD_MAX)
36 #define COORD_MAX_3 (COORD_MAX*COORD_MAX*COORD_MAX)
38 //=======================================================================
39 //function : HasParameters
41 //=======================================================================
43 bool StdMeshersGUI_Parameters::HasParameters (const QString& hypType)
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));
54 //=======================================================================
55 //function : SetInitValue
57 //=======================================================================
59 void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param,
62 SMESHGUI_intParameter* p = dynamic_cast<SMESHGUI_intParameter*>(param.get());
63 if ( p ) p->InitValue() = initValue;
66 //=======================================================================
67 //function : SetInitValue
69 //=======================================================================
71 void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param,
74 SMESHGUI_doubleParameter* p = dynamic_cast<SMESHGUI_doubleParameter*>(param.get());
75 if ( p ) p->InitValue() = initValue;
78 //=======================================================================
79 //function : SetInitValue
81 //=======================================================================
83 void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param,
84 const char* initValue)
86 SMESHGUI_strParameter* p = dynamic_cast<SMESHGUI_strParameter*>(param.get());
87 if ( p ) p->InitValue() = initValue;
90 //=======================================================================
91 //function : GetParameters
93 //=======================================================================
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))
99 void StdMeshersGUI_Parameters::GetParameters (const QString& hypType,
100 list<SMESHGUI_aParameterPtr> & paramList )
104 if (hypType.compare("LocalLength") == 0)
106 paramList.push_back( DOUBLE_PARAM (1.0,
107 QObject::tr("SMESH_LOCAL_LENGTH_PARAM"),
108 1E-3, COORD_MAX, 1.0, 6));
110 else if (hypType.compare("NumberOfSegments") == 0)
112 paramList.push_back ( INT_PARAM (3,
113 QObject::tr("SMESH_NB_SEGMENTS_PARAM"),
116 else if (hypType.compare("Arithmetic1D") == 0)
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));
125 else if (hypType.compare("MaxElementArea") == 0)
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));
131 else if (hypType.compare("MaxElementVolume") == 0)
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));
137 else if (hypType.compare("StartEndLength") == 0)
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));
146 else if (hypType.compare("Deflection1D") == 0)
148 paramList.push_back( DOUBLE_PARAM ( 1.0,
149 QObject::tr("SMESH_DEFLECTION1D_PARAM"),
150 1.0E-3, COORD_MAX, 1, 6));
154 //=======================================================================
155 //function : GetParameters
157 //=======================================================================
159 void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr theHyp,
160 list<SMESHGUI_aParameterPtr> & paramList )
164 if (theHyp->_is_nil()) return;
166 QString hypType = theHyp->GetName();
167 GetParameters( hypType, paramList ); // get default parameters
168 if ( paramList.empty() )
171 // set current values
172 if (hypType.compare("LocalLength") == 0)
174 StdMeshers::StdMeshers_LocalLength_var LL =
175 StdMeshers::StdMeshers_LocalLength::_narrow(theHyp);
176 SetInitValue( paramList.front(), LL->GetLength() );
178 else if (hypType.compare("NumberOfSegments") == 0)
180 StdMeshers::StdMeshers_NumberOfSegments_var NOS =
181 StdMeshers::StdMeshers_NumberOfSegments::_narrow(theHyp);
182 SetInitValue( paramList.front(), (int) NOS->GetNumberOfSegments());
184 else if (hypType.compare("Arithmetic1D") == 0)
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 )) ;
191 else if (hypType.compare("MaxElementArea") == 0)
193 StdMeshers::StdMeshers_MaxElementArea_var MEA =
194 StdMeshers::StdMeshers_MaxElementArea::_narrow(theHyp);
195 SetInitValue( paramList.front(), MEA->GetMaxElementArea() );
197 else if (hypType.compare("MaxElementVolume") == 0)
199 StdMeshers::StdMeshers_MaxElementVolume_var MEV =
200 StdMeshers::StdMeshers_MaxElementVolume::_narrow(theHyp);
201 SetInitValue( paramList.front(), MEV->GetMaxElementVolume() );
203 else if (hypType.compare("StartEndLength") == 0)
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 ));
210 else if (hypType.compare("Deflection1D") == 0)
212 StdMeshers::StdMeshers_Deflection1D_var hyp =
213 StdMeshers::StdMeshers_Deflection1D::_narrow(theHyp);
214 SetInitValue( paramList.back(), hyp->GetDeflection()) ;
218 //=======================================================================
219 //function : GetParameters
221 //=======================================================================
222 void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr hyp,
223 list<SMESHGUI_aParameterPtr> & paramList,
227 list<SMESHGUI_aParameterPtr>::iterator paramIt = paramList.begin();
228 for ( ; paramIt != paramList.end(); paramIt++) {
229 if (params.compare("")) params += " ; ";
231 if ((*paramIt)->GetType() == SMESHGUI_aParameter::DOUBLE ) {
232 double aDoubleValue = 0.;
233 (*paramIt)->GetNewDouble(aDoubleValue);
234 params += QString::number(aDoubleValue);
236 else if ((*paramIt)->GetType() == SMESHGUI_aParameter::TEXT ) {
237 QString aStrValue( "" );
238 (*paramIt)->GetNewText(aStrValue);
239 params += aStrValue.simplifyWhiteSpace();
243 (*paramIt)->GetNewInt(aIntValue);
244 params += QString::number(aIntValue);;
249 //=======================================================================
250 //function : SetParameters
252 //=======================================================================
254 bool StdMeshersGUI_Parameters::SetParameters(SMESH::SMESH_Hypothesis_ptr theHyp,
255 const list<SMESHGUI_aParameterPtr> & paramList )
257 if (theHyp->_is_nil() || paramList.empty()) return false;
259 bool modified = false;
261 QString hypType = theHyp->GetName();
263 if (hypType.compare("LocalLength") == 0)
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);
271 else if (hypType.compare("NumberOfSegments") == 0)
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);
279 else if (hypType.compare("Arithmetic1D") == 0)
281 if ( paramList.size() != 2 )
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 );
292 else if (hypType.compare("MaxElementArea") == 0)
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);
300 else if (hypType.compare("MaxElementVolume") == 0)
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);
308 else if (hypType.compare("StartEndLength") == 0)
310 if ( paramList.size() != 2 )
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 );
321 else if (hypType.compare("Deflection1D") == 0)
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 );