1 // Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : StdMeshersGUI_StdHypothesisCreator.cxx
23 // Author : Alexander SOLOVYOV, Open CASCADE S.A.S.
26 #include "StdMeshersGUI_StdHypothesisCreator.h"
29 #include <SMESHGUI_SpinBox.h>
30 #include <SMESHGUI_HypothesesUtils.h>
31 #include <SMESHGUI_Utils.h>
32 #include <SMESHGUI_GEOMGenUtils.h>
34 #include <SMESH_TypeFilter.hxx>
35 #include <SMESH_NumberFilter.hxx>
37 #include "StdMeshersGUI_FixedPointsParamWdg.h"
38 #include "StdMeshersGUI_LayerDistributionParamWdg.h"
39 #include "StdMeshersGUI_ObjectReferenceParamWdg.h"
40 #include "StdMeshersGUI_QuadrangleParamWdg.h"
41 #include "StdMeshersGUI_SubShapeSelectorWdg.h"
43 #include <SALOMEDSClient_Study.hxx>
45 // SALOME GUI includes
46 #include <SUIT_ResourceMgr.h>
49 #include <SALOMEconfig.h>
50 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
51 #include CORBA_SERVER_HEADER(SMESH_Mesh)
52 #include CORBA_SERVER_HEADER(SMESH_Group)
55 #include <QHBoxLayout>
60 const double VALUE_MAX = 1.0e+15, // COORD_MAX
61 VALUE_MAX_2 = VALUE_MAX * VALUE_MAX,
62 VALUE_MAX_3 = VALUE_MAX_2 * VALUE_MAX,
63 VALUE_SMALL = 1.0e-15,
64 VALUE_SMALL_2 = VALUE_SMALL * VALUE_SMALL,
65 VALUE_SMALL_3 = VALUE_SMALL_2 * VALUE_SMALL;
67 //================================================================================
70 * \param type - hypothesis type
72 //================================================================================
74 StdMeshersGUI_StdHypothesisCreator::StdMeshersGUI_StdHypothesisCreator( const QString& type )
75 : SMESHGUI_GenericHypothesisCreator( type )
79 //================================================================================
83 //================================================================================
85 StdMeshersGUI_StdHypothesisCreator::~StdMeshersGUI_StdHypothesisCreator()
89 //================================================================================
91 * \brief Return widget for i-th hypothesis parameter (got from myParamWidgets)
92 * \param i - index of hypothesis parameter
93 * \retval QWidget* - found widget
95 //================================================================================
97 QWidget* StdMeshersGUI_StdHypothesisCreator::getWidgetForParam( int i ) const
100 if ( isCreation() ) ++i; // skip widget of 'name' parameter
102 if ( i < myCustomWidgets.count() ) {
103 QList<QWidget*>::const_iterator anIt = myCustomWidgets.begin();
104 QList<QWidget*>::const_iterator aLast = myCustomWidgets.end();
105 for ( int j = 0 ; !w && anIt != aLast; ++anIt, ++j )
110 // list has no at() const, so we iterate
111 QList<QWidget*>::const_iterator anIt = widgets().begin();
112 QList<QWidget*>::const_iterator aLast = widgets().end();
113 for( int j = 0; !w && anIt!=aLast; anIt++, ++j ) {
121 //================================================================================
123 * \brief Allow modifing myCustomWidgets in const methods
124 * \retval ListOfWidgets* - non-const pointer to myCustomWidgets
126 //================================================================================
128 StdMeshersGUI_StdHypothesisCreator::ListOfWidgets*
129 StdMeshersGUI_StdHypothesisCreator::customWidgets() const
131 return const_cast< ListOfWidgets* >( & myCustomWidgets );
134 //================================================================================
136 * \brief Builds dlg layout
137 * \retval QFrame* - the built widget
139 //================================================================================
141 QFrame* StdMeshersGUI_StdHypothesisCreator::buildFrame()
143 return buildStdFrame();
146 //================================================================================
148 * \brief Initialise parameter values in controls
150 //================================================================================
152 void StdMeshersGUI_StdHypothesisCreator::retrieveParams() const
154 // buildStdFrame() sets values itself calling stdParams()
156 if ( hypType().startsWith("ProjectionSource" ))
158 // we use this method to connect depending custom widgets
159 StdMeshersGUI_ObjectReferenceParamWdg* widgetToActivate = 0;
160 ListOfWidgets::const_iterator anIt = myCustomWidgets.begin();
161 for ( ; anIt != myCustomWidgets.end(); anIt++)
163 if ( *anIt && (*anIt)->inherits("StdMeshersGUI_ObjectReferenceParamWdg"))
165 StdMeshersGUI_ObjectReferenceParamWdg * w1 =
166 ( StdMeshersGUI_ObjectReferenceParamWdg* ) ( *anIt );
167 ListOfWidgets::const_iterator anIt2 = anIt;
168 for ( ++anIt2; anIt2 != myCustomWidgets.end(); anIt2++)
169 if ( *anIt2 && (*anIt2)->inherits("StdMeshersGUI_ObjectReferenceParamWdg"))
171 StdMeshersGUI_ObjectReferenceParamWdg * w2 =
172 ( StdMeshersGUI_ObjectReferenceParamWdg* ) ( *anIt2 );
173 w1->AvoidSimultaneousSelection( w2 );
175 if ( !widgetToActivate )
176 widgetToActivate = w1;
179 if ( widgetToActivate )
180 widgetToActivate->activateSelection();
184 dlg()->setMinimumSize( dlg()->minimumSizeHint().width(), dlg()->minimumSizeHint().height() );
189 //================================================================================
191 * \brief Widget: slider with left and right labels
193 //================================================================================
195 class TDoubleSliderWith2Labels: public QWidget
198 TDoubleSliderWith2Labels( const QString& leftLabel, const QString& rightLabel,
199 const double initValue, const double bottom,
200 const double top , const double precision,
201 QWidget * parent=0 , const char * name=0 )
202 :QWidget(parent), _bottom(bottom), _precision(precision)
206 QHBoxLayout* aHBoxL = new QHBoxLayout(this);
208 if ( !leftLabel.isEmpty() ) {
209 QLabel* aLeftLabel = new QLabel( this );
210 aLeftLabel->setText( leftLabel );
211 aHBoxL->addWidget( aLeftLabel );
214 _slider = new QSlider( Qt::Horizontal, this );
215 _slider->setRange( 0, toInt( top ));
216 _slider->setValue( toInt( initValue ));
217 aHBoxL->addWidget( _slider );
219 if ( !rightLabel.isEmpty() ) {
220 QLabel* aRightLabel = new QLabel( this );
221 aRightLabel->setText( rightLabel );
222 aHBoxL->addWidget( aRightLabel );
227 double value() const { return _bottom + _slider->value() * _precision; }
228 QSlider * getSlider() const { return _slider; }
229 int toInt( double val ) const { return (int) ceil(( val - _bottom ) / _precision ); }
231 double _bottom, _precision;
235 //================================================================================
237 * \brief Retrieve GEOM_Object held by widget
239 //================================================================================
241 inline GEOM::GEOM_Object_var geomFromWdg(const QWidget* wdg)
243 const StdMeshersGUI_ObjectReferenceParamWdg * objRefWdg =
244 dynamic_cast<const StdMeshersGUI_ObjectReferenceParamWdg*>( wdg );
246 return objRefWdg->GetObject< GEOM::GEOM_Object >();
248 return GEOM::GEOM_Object::_nil();
250 //================================================================================
252 * \brief Retrieve SMESH_Mesh held by widget
254 //================================================================================
256 inline SMESH::SMESH_Mesh_var meshFromWdg(const QWidget* wdg)
258 const StdMeshersGUI_ObjectReferenceParamWdg * objRefWdg =
259 dynamic_cast<const StdMeshersGUI_ObjectReferenceParamWdg*>( wdg );
261 return objRefWdg->GetObject< SMESH::SMESH_Mesh >();
263 return SMESH::SMESH_Mesh::_nil();
265 //================================================================================
267 * \brief Retrieve SMESH_Mesh held by widget
269 //================================================================================
271 inline SMESH::ListOfGroups_var groupsFromWdg(const QWidget* wdg)
273 SMESH::ListOfGroups_var groups = new SMESH::ListOfGroups;
274 const StdMeshersGUI_ObjectReferenceParamWdg * objRefWdg =
275 dynamic_cast<const StdMeshersGUI_ObjectReferenceParamWdg*>( wdg );
278 groups->length( objRefWdg->NbObjects() );
279 for ( unsigned i = 0; i < groups->length(); ++i )
280 groups[i] = objRefWdg->GetObject< SMESH::SMESH_GroupBase >(i);
284 //================================================================================
286 * \brief creates a filter for selection of shapes of given dimension
287 * \param dim - dimension
288 * \param subShapeType - required type of sub-shapes, number of which must be \a nbSubShapes
289 * \param nbSubShapes - number of sub-shapes of given type
290 * \param closed - required closeness flag of a shape
291 * \retval SUIT_SelectionFilter* - created filter
293 //================================================================================
295 SUIT_SelectionFilter* filterForShapeOfDim(const int dim,
296 TopAbs_ShapeEnum subShapeType = TopAbs_SHAPE,
297 const int nbSubShapes = 0,
300 TColStd_MapOfInteger shapeTypes;
302 case 0: shapeTypes.Add( TopAbs_VERTEX ); break;
304 if ( subShapeType == TopAbs_SHAPE ) subShapeType = TopAbs_EDGE;
305 shapeTypes.Add( TopAbs_EDGE );
306 shapeTypes.Add( TopAbs_COMPOUND ); // for a group
309 if ( subShapeType == TopAbs_SHAPE ) subShapeType = TopAbs_FACE;
310 shapeTypes.Add( TopAbs_FACE );
311 shapeTypes.Add( TopAbs_COMPOUND ); // for a group
314 shapeTypes.Add( TopAbs_SHELL );
315 shapeTypes.Add( TopAbs_SOLID );
316 shapeTypes.Add( TopAbs_COMPSOLID );
317 shapeTypes.Add( TopAbs_COMPOUND );
320 return new SMESH_NumberFilter("GEOM", subShapeType, nbSubShapes,
321 shapeTypes, GEOM::GEOM_Object::_nil(), closed);
324 //================================================================================
326 * \brief Create a widget for object selection
327 * \param object - initial object
328 * \param filter - selection filter
329 * \retval QWidget* - created widget
331 //================================================================================
333 QWidget* newObjRefParamWdg( SUIT_SelectionFilter* filter,
334 CORBA::Object_var object)
336 StdMeshersGUI_ObjectReferenceParamWdg* w =
337 new StdMeshersGUI_ObjectReferenceParamWdg( filter, 0);
338 w->SetObject( object.in() );
341 QWidget* newObjRefParamWdg( SUIT_SelectionFilter* filter,
342 SMESH::string_array_var& objEntries)
344 StdMeshersGUI_ObjectReferenceParamWdg* w =
345 new StdMeshersGUI_ObjectReferenceParamWdg( filter, 0, /*multiSel=*/true);
346 //RNV: Firstly, activate selection, then set objects
347 w->activateSelection();
348 w->SetObjects( objEntries );
352 //================================================================================
354 * \brief calls deactivateSelection() for StdMeshersGUI_ObjectReferenceParamWdg
355 * \param widgetList - list of widgets
357 //================================================================================
359 void deactivateObjRefParamWdg( QList<QWidget*>* widgetList )
361 StdMeshersGUI_ObjectReferenceParamWdg* w = 0;
362 QList<QWidget*>::iterator anIt = widgetList->begin();
363 QList<QWidget*>::iterator aLast = widgetList->end();
364 for ( ; anIt != aLast; anIt++ ) {
365 if ( (*anIt) && (*anIt)->inherits( "StdMeshersGUI_ObjectReferenceParamWdg" ))
367 w = (StdMeshersGUI_ObjectReferenceParamWdg* )( *anIt );
368 w->deactivateSelection();
374 //================================================================================
376 * \brief Check parameter values before accept()
377 * \retval bool - true if OK
379 //================================================================================
381 bool StdMeshersGUI_StdHypothesisCreator::checkParams( QString& msg ) const
383 if( !SMESHGUI_GenericHypothesisCreator::checkParams( msg ) )
386 // check if object reference parameter is set, as it has no default value
388 if ( hypType().startsWith("ProjectionSource" ))
390 StdMeshersGUI_ObjectReferenceParamWdg* w =
391 widget< StdMeshersGUI_ObjectReferenceParamWdg >( 0 );
392 ok = ( w->IsObjectSelected() );
393 if ( !ok ) w->SetObject( CORBA::Object::_nil() );
394 int nbAssocVert = ( hypType() == "ProjectionSource1D" ? 1 : 2 );
395 int nbNonEmptyAssoc = 0;
396 for ( int i = 0; ok && i < nbAssocVert*2; i += 2)
399 StdMeshersGUI_ObjectReferenceParamWdg* w1 =
400 widget< StdMeshersGUI_ObjectReferenceParamWdg >( i+2 );
401 StdMeshersGUI_ObjectReferenceParamWdg* w2 =
402 widget< StdMeshersGUI_ObjectReferenceParamWdg >( i+3 );
403 srcV = w1->GetValue();
404 tgtV = w2->GetValue();
405 ok = (( srcV.isEmpty() && tgtV.isEmpty() ) ||
406 ( !srcV.isEmpty() && !tgtV.isEmpty() && srcV != tgtV ));
408 w1->SetObject( CORBA::Object::_nil() );
409 w2->SetObject( CORBA::Object::_nil() );
411 nbNonEmptyAssoc += !srcV.isEmpty();
413 if ( ok && nbNonEmptyAssoc == 1 && nbAssocVert == 2 )
415 // only one pair of VERTEXes is given for a FACE,
416 // then the FACE must have only one VERTEX
417 GEOM::GEOM_Object_var face = w->GetObject< GEOM::GEOM_Object >();
419 GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
420 _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
421 GEOM::GEOM_IShapesOperations_var shapeOp;
422 if ( !geomGen->_is_nil() && aStudy )
423 shapeOp = geomGen->GetIShapesOperations( aStudy->StudyId() );
424 if ( !shapeOp->_is_nil() )
426 GEOM::ListOfLong_var vertices =
427 shapeOp->GetAllSubShapesIDs (face, GEOM::VERTEX, /*isSorted=*/false);
428 ok = ( vertices->length() == 1 );
431 // Uninstall filters of StdMeshersGUI_ObjectReferenceParamWdg
433 deactivateObjRefParamWdg( customWidgets() );
435 else if ( hypType().startsWith("ImportSource" ))
437 StdMeshersGUI_ObjectReferenceParamWdg* w =
438 widget< StdMeshersGUI_ObjectReferenceParamWdg >( 0 );
439 ok = ( w->IsObjectSelected() );
441 else if ( hypType() == "LayerDistribution" || hypType() == "LayerDistribution2D" )
443 StdMeshersGUI_LayerDistributionParamWdg* w =
444 widget< StdMeshersGUI_LayerDistributionParamWdg >( 0 );
445 ok = ( w && w->IsOk() );
451 //================================================================================
453 * \brief Store params from GUI controls to a hypothesis
454 * \retval QString - text representation of parameters
456 //================================================================================
458 QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
460 ListOfStdParams params;
461 bool res = getStdParamFromDlg( params );
464 SMESH::SetName( SMESH::FindSObject( hypothesis() ), params[0].myValue.toString().toLatin1().data() );
465 params.erase( params.begin() );
468 QString valueStr = stdParamValues( params );
469 QStringList aVariablesList = getVariablesFromDlg();
471 if( res && !params.isEmpty() )
473 if( hypType()=="LocalLength" )
475 StdMeshers::StdMeshers_LocalLength_var h =
476 StdMeshers::StdMeshers_LocalLength::_narrow( hypothesis() );
478 h->SetLength( params[0].myValue.toDouble() );
479 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
480 h->SetPrecision( params[1].myValue.toDouble() );
481 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
483 else if( hypType()=="MaxLength" )
485 StdMeshers::StdMeshers_MaxLength_var h =
486 StdMeshers::StdMeshers_MaxLength::_narrow( hypothesis() );
488 h->SetLength( params[0].myValue.toDouble() );
489 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
490 h->SetUsePreestimatedLength( widget< QCheckBox >( 1 )->isChecked() );
491 if ( !h->HavePreestimatedLength() && !h->_is_equivalent( initParamsHypothesis() )) {
492 StdMeshers::StdMeshers_MaxLength_var hInit =
493 StdMeshers::StdMeshers_MaxLength::_narrow( initParamsHypothesis() );
494 h->SetPreestimatedLength( hInit->GetPreestimatedLength() );
497 else if( hypType()=="SegmentLengthAroundVertex" )
499 StdMeshers::StdMeshers_SegmentLengthAroundVertex_var h =
500 StdMeshers::StdMeshers_SegmentLengthAroundVertex::_narrow( hypothesis() );
502 h->SetLength( params[0].myValue.toDouble() );
503 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
505 else if( hypType()=="Arithmetic1D" )
507 StdMeshers::StdMeshers_Arithmetic1D_var h =
508 StdMeshers::StdMeshers_Arithmetic1D::_narrow( hypothesis() );
510 StdMeshersGUI_SubShapeSelectorWdg* w =
511 widget< StdMeshersGUI_SubShapeSelectorWdg >( 2 );
513 h->SetStartLength( params[0].myValue.toDouble() );
514 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
515 h->SetEndLength( params[1].myValue.toDouble() );
516 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
518 h->SetReversedEdges( w->GetListOfIDs() );
519 h->SetObjectEntry( w->GetMainShapeEntry() );
522 else if( hypType()=="FixedPoints1D" )
524 StdMeshers::StdMeshers_FixedPoints1D_var h =
525 StdMeshers::StdMeshers_FixedPoints1D::_narrow( hypothesis() );
527 StdMeshersGUI_FixedPointsParamWdg* w1 =
528 widget< StdMeshersGUI_FixedPointsParamWdg >( 0 );
530 StdMeshersGUI_SubShapeSelectorWdg* w2 =
531 widget< StdMeshersGUI_SubShapeSelectorWdg >( 1 );
534 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
535 h->SetPoints( w1->GetListOfPoints() );
536 h->SetNbSegments( w1->GetListOfSegments() );
539 h->SetReversedEdges( w2->GetListOfIDs() );
540 h->SetObjectEntry( w2->GetMainShapeEntry() );
543 else if( hypType()=="MaxElementArea" )
545 StdMeshers::StdMeshers_MaxElementArea_var h =
546 StdMeshers::StdMeshers_MaxElementArea::_narrow( hypothesis() );
547 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
548 h->SetMaxElementArea( params[0].myValue.toDouble() );
550 else if( hypType()=="MaxElementVolume" )
552 StdMeshers::StdMeshers_MaxElementVolume_var h =
553 StdMeshers::StdMeshers_MaxElementVolume::_narrow( hypothesis() );
555 h->SetMaxElementVolume( params[0].myValue.toDouble() );
556 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
558 else if( hypType()=="StartEndLength" )
560 StdMeshers::StdMeshers_StartEndLength_var h =
561 StdMeshers::StdMeshers_StartEndLength::_narrow( hypothesis() );
563 StdMeshersGUI_SubShapeSelectorWdg* w =
564 widget< StdMeshersGUI_SubShapeSelectorWdg >( 2 );
566 h->SetStartLength( params[0].myValue.toDouble() );
567 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
568 h->SetEndLength( params[1].myValue.toDouble() );
569 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
571 h->SetReversedEdges( w->GetListOfIDs() );
572 h->SetObjectEntry( w->GetMainShapeEntry() );
575 else if( hypType()=="Deflection1D" )
577 StdMeshers::StdMeshers_Deflection1D_var h =
578 StdMeshers::StdMeshers_Deflection1D::_narrow( hypothesis() );
579 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
580 h->SetDeflection( params[0].myValue.toDouble() );
582 else if( hypType()=="AutomaticLength" )
584 StdMeshers::StdMeshers_AutomaticLength_var h =
585 StdMeshers::StdMeshers_AutomaticLength::_narrow( hypothesis() );
587 h->SetFineness( params[0].myValue.toDouble() );
589 else if( hypType()=="NumberOfLayers" )
591 StdMeshers::StdMeshers_NumberOfLayers_var h =
592 StdMeshers::StdMeshers_NumberOfLayers::_narrow( hypothesis() );
594 h->SetNumberOfLayers( params[0].myValue.toInt() );
595 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
597 else if( hypType()=="LayerDistribution" )
599 StdMeshers::StdMeshers_LayerDistribution_var h =
600 StdMeshers::StdMeshers_LayerDistribution::_narrow( hypothesis() );
601 StdMeshersGUI_LayerDistributionParamWdg* w =
602 widget< StdMeshersGUI_LayerDistributionParamWdg >( 0 );
604 h->SetLayerDistribution( w->GetHypothesis() );
605 h->SetParameters(w->GetHypothesis()->GetParameters());
606 w->GetHypothesis()->ClearParameters();
608 else if( hypType()=="NumberOfLayers2D" )
610 StdMeshers::StdMeshers_NumberOfLayers2D_var h =
611 StdMeshers::StdMeshers_NumberOfLayers2D::_narrow( hypothesis() );
613 h->SetNumberOfLayers( params[0].myValue.toInt() );
614 h->SetParameters(aVariablesList.join(":").toLatin1().constData());
616 else if( hypType()=="LayerDistribution2D" )
618 StdMeshers::StdMeshers_LayerDistribution2D_var h =
619 StdMeshers::StdMeshers_LayerDistribution2D::_narrow( hypothesis() );
620 StdMeshersGUI_LayerDistributionParamWdg* w =
621 widget< StdMeshersGUI_LayerDistributionParamWdg >( 0 );
623 h->SetLayerDistribution( w->GetHypothesis() );
624 h->SetParameters(w->GetHypothesis()->GetParameters());
625 w->GetHypothesis()->ClearParameters();
627 else if( hypType()=="ProjectionSource1D" )
629 StdMeshers::StdMeshers_ProjectionSource1D_var h =
630 StdMeshers::StdMeshers_ProjectionSource1D::_narrow( hypothesis() );
632 h->SetSourceEdge ( geomFromWdg ( getWidgetForParam( 0 )));
633 h->SetSourceMesh ( meshFromWdg ( getWidgetForParam( 1 )));
634 h->SetVertexAssociation( geomFromWdg ( getWidgetForParam( 2 )),
635 geomFromWdg ( getWidgetForParam( 3 )));
637 else if( hypType()=="ProjectionSource2D" )
639 StdMeshers::StdMeshers_ProjectionSource2D_var h =
640 StdMeshers::StdMeshers_ProjectionSource2D::_narrow( hypothesis() );
642 h->SetSourceFace ( geomFromWdg ( getWidgetForParam( 0 )));
643 h->SetSourceMesh ( meshFromWdg ( getWidgetForParam( 1 )));
644 h->SetVertexAssociation( geomFromWdg ( getWidgetForParam( 2 )), // src1
645 geomFromWdg ( getWidgetForParam( 4 )), // src2
646 geomFromWdg ( getWidgetForParam( 3 )), // tgt1
647 geomFromWdg ( getWidgetForParam( 5 ))); // tgt2
649 else if( hypType()=="ProjectionSource3D" )
651 StdMeshers::StdMeshers_ProjectionSource3D_var h =
652 StdMeshers::StdMeshers_ProjectionSource3D::_narrow( hypothesis() );
654 h->SetSource3DShape ( geomFromWdg ( getWidgetForParam( 0 )));
655 h->SetSourceMesh ( meshFromWdg ( getWidgetForParam( 1 )));
656 h->SetVertexAssociation( geomFromWdg ( getWidgetForParam( 2 )), // src1
657 geomFromWdg ( getWidgetForParam( 4 )), // src2
658 geomFromWdg ( getWidgetForParam( 3 )), // tgt1
659 geomFromWdg ( getWidgetForParam( 5 ))); // tgt2
661 else if( hypType()=="ImportSource1D" )
663 StdMeshers::StdMeshers_ImportSource1D_var h =
664 StdMeshers::StdMeshers_ImportSource1D::_narrow( hypothesis() );
666 SMESH::ListOfGroups_var groups = groupsFromWdg( getWidgetForParam( 0 ));
667 h->SetSourceEdges( groups.in() );
668 QCheckBox* toCopyMesh = widget< QCheckBox >( 1 );
669 QCheckBox* toCopyGroups = widget< QCheckBox >( 2 );
670 h->SetCopySourceMesh( toCopyMesh->isChecked(), toCopyGroups->isChecked());
672 else if( hypType()=="ImportSource2D" )
674 StdMeshers::StdMeshers_ImportSource2D_var h =
675 StdMeshers::StdMeshers_ImportSource2D::_narrow( hypothesis() );
677 SMESH::ListOfGroups_var groups = groupsFromWdg( getWidgetForParam( 0 ));
678 h->SetSourceFaces( groups.in() );
679 QCheckBox* toCopyMesh = widget< QCheckBox >( 1 );
680 QCheckBox* toCopyGroups = widget< QCheckBox >( 2 );
681 h->SetCopySourceMesh( toCopyMesh->isChecked(), toCopyGroups->isChecked());
683 else if( hypType()=="ViscousLayers" )
685 StdMeshers::StdMeshers_ViscousLayers_var h =
686 StdMeshers::StdMeshers_ViscousLayers::_narrow( hypothesis() );
688 h->SetTotalThickness( params[0].myValue.toDouble() );
689 /* */ h->SetParameters(aVariablesList.join(":").toLatin1().constData());
690 h->SetNumberLayers ( params[1].myValue.toInt() );
691 /* */ h->SetParameters(aVariablesList.join(":").toLatin1().constData());
692 h->SetStretchFactor ( params[2].myValue.toDouble() );
693 /* */ h->SetParameters(aVariablesList.join(":").toLatin1().constData());
695 if ( StdMeshersGUI_SubShapeSelectorWdg* idsWg =
696 widget< StdMeshersGUI_SubShapeSelectorWdg >( 3 ))
698 h->SetIgnoreFaces( idsWg->GetListOfIDs() );
699 //h->SetObjectEntry( idsWg->GetMainShapeEntry() );
702 else if( hypType()=="QuadrangleParams" )
704 StdMeshers::StdMeshers_QuadrangleParams_var h =
705 StdMeshers::StdMeshers_QuadrangleParams::_narrow( hypothesis() );
706 StdMeshersGUI_SubShapeSelectorWdg* w1 =
707 widget< StdMeshersGUI_SubShapeSelectorWdg >( 0 );
708 StdMeshersGUI_QuadrangleParamWdg* w2 =
709 widget< StdMeshersGUI_QuadrangleParamWdg >( 1 );
711 if (w1->GetListSize() > 0) {
712 h->SetTriaVertex(w1->GetListOfIDs()[0]); // getlist must be called once
713 const char * entry = w1->GetMainShapeEntry();
714 h->SetObjectEntry(entry);
716 h->SetQuadType(StdMeshers::QuadType(w2->GetType()));
723 //================================================================================
725 * \brief Return parameter values as SMESHGUI_GenericHypothesisCreator::StdParam
726 * \param p - list of parameters
727 * \retval bool - success flag
729 * Is called from SMESHGUI_GenericHypothesisCreator::buildStdFrame().
730 * Parameters will be shown using "standard" controls:
731 * Int by QtxIntSpinBox
732 * Double by SMESHGUI_SpinBox
733 * String by QLineEdit
734 * getCustomWidget() allows to redefine control for a parameter
736 //================================================================================
738 bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
741 SMESHGUI_GenericHypothesisCreator::StdParam item;
744 customWidgets()->clear();
747 HypothesisData* data = SMESH::GetHypothesisData( hypType() );
748 item.myName = tr( "SMESH_NAME" );
749 item.myValue = data ? hypName() : QString();
751 customWidgets()->append(0);
754 SMESH::SMESH_Hypothesis_var hyp = initParamsHypothesis();
755 SMESH::ListOfParameters_var aParameters = hyp->GetLastParameters();
757 if( hypType()=="LocalLength" )
759 StdMeshers::StdMeshers_LocalLength_var h =
760 StdMeshers::StdMeshers_LocalLength::_narrow( hyp );
762 item.myName = tr("SMESH_LOCAL_LENGTH_PARAM");
763 if(!initVariableName(aParameters,item,0))
764 item.myValue = h->GetLength();
767 item.myName = tr("SMESH_LOCAL_LENGTH_PRECISION");
768 if(!initVariableName(aParameters,item,1))
769 item.myValue = h->GetPrecision();
773 else if( hypType()=="MaxLength" )
775 StdMeshers::StdMeshers_MaxLength_var h =
776 StdMeshers::StdMeshers_MaxLength::_narrow( hyp );
777 // try to set a right preestimated length to edited hypothesis
778 bool noPreestimatedAtEdition = false;
779 if ( !isCreation() ) {
780 StdMeshers::StdMeshers_MaxLength_var initHyp =
781 StdMeshers::StdMeshers_MaxLength::_narrow( initParamsHypothesis(true) );
782 noPreestimatedAtEdition =
783 ( initHyp->_is_nil() || !initHyp->HavePreestimatedLength() );
784 if ( !noPreestimatedAtEdition )
785 h->SetPreestimatedLength( initHyp->GetPreestimatedLength() );
788 item.myName = tr("SMESH_LOCAL_LENGTH_PARAM");
789 if(!initVariableName(aParameters,item,0))
790 item.myValue = h->GetLength();
792 customWidgets()->append(0);
794 item.myName = tr("SMESH_USE_PREESTIMATED_LENGTH");
796 QCheckBox* aQCheckBox = new QCheckBox(dlg());
797 if ( !noPreestimatedAtEdition && h->HavePreestimatedLength() ) {
798 aQCheckBox->setChecked( h->GetUsePreestimatedLength() );
799 connect( aQCheckBox, SIGNAL( stateChanged(int) ), this, SLOT( onValueChanged() ) );
802 aQCheckBox->setChecked( false );
803 aQCheckBox->setEnabled( false );
805 customWidgets()->append( aQCheckBox );
807 else if( hypType()=="SegmentLengthAroundVertex" )
809 StdMeshers::StdMeshers_SegmentLengthAroundVertex_var h =
810 StdMeshers::StdMeshers_SegmentLengthAroundVertex::_narrow( hyp );
812 item.myName = tr("SMESH_LOCAL_LENGTH_PARAM");
813 if(!initVariableName(aParameters,item,0))
814 item.myValue = h->GetLength();
818 else if( hypType()=="Arithmetic1D" )
820 StdMeshers::StdMeshers_Arithmetic1D_var h =
821 StdMeshers::StdMeshers_Arithmetic1D::_narrow( hyp );
823 item.myName = tr( "SMESH_START_LENGTH_PARAM" );
824 if(!initVariableName(aParameters,item,0))
825 item.myValue = h->GetLength( true );
828 customWidgets()->append (0);
830 item.myName = tr( "SMESH_END_LENGTH_PARAM" );
831 if(!initVariableName(aParameters,item,1))
832 item.myValue = h->GetLength( false );
835 customWidgets()->append (0);
837 item.myName = tr( "SMESH_REVERSED_EDGES" );
840 StdMeshersGUI_SubShapeSelectorWdg* aDirectionWidget =
841 new StdMeshersGUI_SubShapeSelectorWdg();
842 QString aGeomEntry = SMESHGUI_GenericHypothesisCreator::getShapeEntry();
843 QString aMainEntry = SMESHGUI_GenericHypothesisCreator::getMainShapeEntry();
844 if ( aGeomEntry == "" )
845 aGeomEntry = h->GetObjectEntry();
847 aDirectionWidget->SetGeomShapeEntry( aGeomEntry );
848 aDirectionWidget->SetMainShapeEntry( aMainEntry );
849 aDirectionWidget->SetListOfIDs( h->GetReversedEdges() );
850 aDirectionWidget->showPreview( true );
851 customWidgets()->append ( aDirectionWidget );
855 else if( hypType()=="FixedPoints1D" )
857 StdMeshers::StdMeshers_FixedPoints1D_var h =
858 StdMeshers::StdMeshers_FixedPoints1D::_narrow( hyp );
860 item.myName = tr( "SMESH_FIXED_POINTS" );
863 StdMeshersGUI_FixedPointsParamWdg* aFixedPointsWidget =
864 new StdMeshersGUI_FixedPointsParamWdg();
866 if ( !isCreation() ) {
867 aFixedPointsWidget->SetListOfPoints( h->GetPoints() );
868 aFixedPointsWidget->SetListOfSegments( h->GetNbSegments() );
870 customWidgets()->append( aFixedPointsWidget );
872 item.myName = tr( "SMESH_REVERSED_EDGES" );
875 StdMeshersGUI_SubShapeSelectorWdg* aDirectionWidget =
876 new StdMeshersGUI_SubShapeSelectorWdg();
877 QString anEntry = SMESHGUI_GenericHypothesisCreator::getShapeEntry();
878 QString aMainEntry = SMESHGUI_GenericHypothesisCreator::getMainShapeEntry();
880 anEntry = h->GetObjectEntry();
881 aDirectionWidget->SetGeomShapeEntry( anEntry );
882 aDirectionWidget->SetMainShapeEntry( aMainEntry );
883 aDirectionWidget->SetListOfIDs( h->GetReversedEdges() );
884 aDirectionWidget->showPreview( true );
885 customWidgets()->append ( aDirectionWidget );
889 else if( hypType()=="MaxElementArea" )
891 StdMeshers::StdMeshers_MaxElementArea_var h =
892 StdMeshers::StdMeshers_MaxElementArea::_narrow( hyp );
894 item.myName = tr( "SMESH_MAX_ELEMENT_AREA_PARAM" );
895 if(!initVariableName(aParameters,item,0))
896 item.myValue = h->GetMaxElementArea();
900 else if( hypType()=="MaxElementVolume" )
902 StdMeshers::StdMeshers_MaxElementVolume_var h =
903 StdMeshers::StdMeshers_MaxElementVolume::_narrow( hyp );
905 item.myName = tr( "SMESH_MAX_ELEMENT_VOLUME_PARAM" );
906 if(!initVariableName(aParameters,item,0))
907 item.myValue = h->GetMaxElementVolume();
910 else if( hypType()=="StartEndLength" )
912 StdMeshers::StdMeshers_StartEndLength_var h =
913 StdMeshers::StdMeshers_StartEndLength::_narrow( hyp );
915 item.myName = tr( "SMESH_START_LENGTH_PARAM" );
917 if(!initVariableName(aParameters,item,0))
918 item.myValue = h->GetLength( true );
920 customWidgets()->append(0);
922 item.myName = tr( "SMESH_END_LENGTH_PARAM" );
923 if(!initVariableName(aParameters,item,1))
924 item.myValue = h->GetLength( false );
926 customWidgets()->append(0);
928 item.myName = tr( "SMESH_REVERSED_EDGES" );
931 StdMeshersGUI_SubShapeSelectorWdg* aDirectionWidget =
932 new StdMeshersGUI_SubShapeSelectorWdg();
933 QString anEntry = SMESHGUI_GenericHypothesisCreator::getShapeEntry();
934 QString aMainEntry = SMESHGUI_GenericHypothesisCreator::getMainShapeEntry();
936 anEntry = h->GetObjectEntry();
937 aDirectionWidget->SetGeomShapeEntry( anEntry );
938 aDirectionWidget->SetMainShapeEntry( aMainEntry );
939 aDirectionWidget->SetListOfIDs( h->GetReversedEdges() );
940 aDirectionWidget->showPreview( true );
941 customWidgets()->append ( aDirectionWidget );
943 else if( hypType()=="Deflection1D" )
945 StdMeshers::StdMeshers_Deflection1D_var h =
946 StdMeshers::StdMeshers_Deflection1D::_narrow( hyp );
948 item.myName = tr( "SMESH_DEFLECTION1D_PARAM" );
949 if(!initVariableName(aParameters,item,0))
950 item.myValue = h->GetDeflection();
953 else if( hypType()=="AutomaticLength" )
955 StdMeshers::StdMeshers_AutomaticLength_var h =
956 StdMeshers::StdMeshers_AutomaticLength::_narrow( hyp );
958 item.myName = tr( "SMESH_FINENESS_PARAM" );
959 //item.myValue = h->GetFineness();
961 SMESHGUI_SpinBox* _autoLengthSpinBox = new SMESHGUI_SpinBox(dlg());
962 _autoLengthSpinBox->RangeStepAndValidator(0, 1, 0.01, "length_precision");
963 _autoLengthSpinBox->SetValue(h->GetFineness());
964 customWidgets()->append( _autoLengthSpinBox);
966 else if( hypType()=="NumberOfLayers" )
968 StdMeshers::StdMeshers_NumberOfLayers_var h =
969 StdMeshers::StdMeshers_NumberOfLayers::_narrow( hyp );
971 item.myName = tr( "SMESH_NUMBER_OF_LAYERS" );
972 if(!initVariableName(aParameters,item,0))
973 item.myValue = (int) h->GetNumberOfLayers();
976 else if( hypType()=="LayerDistribution" ) {
977 StdMeshers::StdMeshers_LayerDistribution_var h =
978 StdMeshers::StdMeshers_LayerDistribution::_narrow( hyp );
980 item.myName = tr( "SMESH_LAYERS_DISTRIBUTION" ); p.append( item );
982 //Set into not published hypo last variables
983 QStringList aLastVarsList;
984 for(int i = 0;i<aParameters->length();i++)
985 aLastVarsList.append(QString(aParameters[i].in()));
987 if(!aLastVarsList.isEmpty())
988 h->GetLayerDistribution()->SetLastParameters(aLastVarsList.join(":").toLatin1().constData());
990 customWidgets()->append
991 ( new StdMeshersGUI_LayerDistributionParamWdg( h->GetLayerDistribution(), hypName(), dlg()));
993 else if( hypType()=="NumberOfLayers2D" ) {
994 StdMeshers::StdMeshers_NumberOfLayers2D_var h =
995 StdMeshers::StdMeshers_NumberOfLayers2D::_narrow( hyp );
997 item.myName = tr( "SMESH_NUMBER_OF_LAYERS" );
998 if(!initVariableName(aParameters,item,0))
999 item.myValue = (int) h->GetNumberOfLayers();
1002 else if( hypType()=="LayerDistribution2D" ) {
1003 StdMeshers::StdMeshers_LayerDistribution2D_var h =
1004 StdMeshers::StdMeshers_LayerDistribution2D::_narrow( hyp );
1006 item.myName = tr( "SMESH_LAYERS_DISTRIBUTION" ); p.append( item );
1008 //Set into not published hypo last variables
1009 QStringList aLastVarsList;
1010 for(int i = 0;i<aParameters->length();i++)
1011 aLastVarsList.append(QString(aParameters[i].in()));
1013 if(!aLastVarsList.isEmpty())
1014 h->GetLayerDistribution()->SetLastParameters(aLastVarsList.join(":").toLatin1().constData());
1016 customWidgets()->append
1017 ( new StdMeshersGUI_LayerDistributionParamWdg( h->GetLayerDistribution(), hypName(), dlg()));
1019 else if( hypType()=="ProjectionSource1D" )
1021 StdMeshers::StdMeshers_ProjectionSource1D_var h =
1022 StdMeshers::StdMeshers_ProjectionSource1D::_narrow( hyp );
1024 item.myName = tr( "SMESH_SOURCE_EDGE" ); p.append( item );
1025 customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 1 ),
1026 h->GetSourceEdge()));
1027 item.myName = tr( "SMESH_SOURCE_MESH" ); p.append( item );
1028 customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( MESH ),
1029 h->GetSourceMesh()));
1030 item.myName = tr( "SMESH_SOURCE_VERTEX" ); p.append( item );
1031 customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
1032 h->GetSourceVertex()));
1033 item.myName = tr( "SMESH_TARGET_VERTEX" ); p.append( item );
1034 customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
1035 h->GetTargetVertex()));
1037 else if( hypType()=="ProjectionSource2D" )
1039 StdMeshers::StdMeshers_ProjectionSource2D_var h =
1040 StdMeshers::StdMeshers_ProjectionSource2D::_narrow( hyp );
1042 item.myName = tr( "SMESH_SOURCE_FACE" ); p.append( item );
1043 customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 2 ),
1044 h->GetSourceFace()));
1045 item.myName = tr( "SMESH_SOURCE_MESH" ); p.append( item );
1046 customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( MESH ),
1047 h->GetSourceMesh()));
1048 item.myName = tr( "SMESH_SOURCE_VERTEX1" ); p.append( item );
1049 customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
1050 h->GetSourceVertex( 1 )));
1051 item.myName = tr( "SMESH_TARGET_VERTEX1" ); p.append( item );
1052 customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
1053 h->GetTargetVertex( 1 )));
1054 item.myName = tr( "SMESH_SOURCE_VERTEX2" ); p.append( item );
1055 customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
1056 h->GetSourceVertex( 2 )));
1057 item.myName = tr( "SMESH_TARGET_VERTEX2" ); p.append( item );
1058 customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
1059 h->GetTargetVertex( 2 )));
1061 else if( hypType()=="ProjectionSource3D" )
1063 StdMeshers::StdMeshers_ProjectionSource3D_var h =
1064 StdMeshers::StdMeshers_ProjectionSource3D::_narrow( hyp );
1066 item.myName = tr( "SMESH_SOURCE_3DSHAPE" ); p.append( item );
1067 customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 3, TopAbs_FACE, 6, true ),
1068 h->GetSource3DShape()));
1069 item.myName = tr( "SMESH_SOURCE_MESH" ); p.append( item );
1070 customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( MESH ),
1071 h->GetSourceMesh()));
1072 item.myName = tr( "SMESH_SOURCE_VERTEX1" ); p.append( item );
1073 customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
1074 h->GetSourceVertex( 1 )));
1075 item.myName = tr( "SMESH_TARGET_VERTEX1" ); p.append( item );
1076 customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
1077 h->GetTargetVertex( 1 )));
1078 item.myName = tr( "SMESH_SOURCE_VERTEX2" ); p.append( item );
1079 customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
1080 h->GetSourceVertex( 2 )));
1081 item.myName = tr( "SMESH_TARGET_VERTEX2" ); p.append( item );
1082 customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
1083 h->GetTargetVertex( 2 )));
1085 else if( hypType()=="ImportSource1D" )
1087 StdMeshers::StdMeshers_ImportSource1D_var h =
1088 StdMeshers::StdMeshers_ImportSource1D::_narrow( hyp );
1090 SMESH::string_array_var groupEntries = h->GetSourceEdges();
1091 CORBA::Boolean toCopyMesh, toCopyGroups;
1092 h->GetCopySourceMesh(toCopyMesh, toCopyGroups);
1094 item.myName = tr( "SMESH_SOURCE_EDGES" ); p.append( item );
1095 customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( GROUP_EDGE ),
1098 item.myName = tr( "SMESH_COPY_MESH" ); p.append( item );
1099 QCheckBox* aQCheckBox = new QCheckBox(dlg());
1100 aQCheckBox->setChecked( toCopyMesh );
1101 connect( aQCheckBox, SIGNAL( stateChanged(int) ), this, SLOT( onValueChanged() ));
1102 customWidgets()->append( aQCheckBox );
1104 item.myName = tr( "SMESH_TO_COPY_GROUPS" ); p.append( item );
1105 aQCheckBox = new QCheckBox(dlg());
1106 aQCheckBox->setChecked( toCopyGroups );
1107 aQCheckBox->setEnabled( toCopyMesh );
1108 customWidgets()->append( aQCheckBox );
1110 else if( hypType()=="ImportSource2D" )
1112 StdMeshers::StdMeshers_ImportSource2D_var h =
1113 StdMeshers::StdMeshers_ImportSource2D::_narrow( hyp );
1115 SMESH::string_array_var groupEntries = h->GetSourceFaces();
1116 CORBA::Boolean toCopyMesh, toCopyGroups;
1117 h->GetCopySourceMesh(toCopyMesh, toCopyGroups);
1119 item.myName = tr( "SMESH_SOURCE_FACES" ); p.append( item );
1120 customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( GROUP_FACE ),
1123 item.myName = tr( "SMESH_COPY_MESH" ); p.append( item );
1124 QCheckBox* aQCheckBox = new QCheckBox(dlg());
1125 aQCheckBox->setChecked( toCopyMesh );
1126 connect( aQCheckBox, SIGNAL( stateChanged(int) ), this, SLOT( onValueChanged() ));
1127 customWidgets()->append( aQCheckBox );
1129 item.myName = tr( "SMESH_COPY_GROUPS" ); p.append( item );
1130 aQCheckBox = new QCheckBox(dlg());
1131 aQCheckBox->setChecked( toCopyGroups );
1132 aQCheckBox->setEnabled( toCopyMesh );
1133 customWidgets()->append( aQCheckBox );
1135 else if( hypType()=="ViscousLayers" )
1137 StdMeshers::StdMeshers_ViscousLayers_var h =
1138 StdMeshers::StdMeshers_ViscousLayers::_narrow( hyp );
1140 item.myName = tr( "SMESH_TOTAL_THICKNESS" );
1141 if(!initVariableName(aParameters,item,0))
1142 item.myValue = h->GetTotalThickness();
1144 customWidgets()->append (0);
1146 item.myName = tr( "SMESH_NUMBER_OF_LAYERS" );
1147 if(!initVariableName(aParameters,item,1))
1148 item.myValue = h->GetNumberLayers();
1150 customWidgets()->append (0);
1152 item.myName = tr( "SMESH_STRETCH_FACTOR" );
1153 if(!initVariableName(aParameters,item,2))
1154 item.myValue = h->GetStretchFactor();
1156 customWidgets()->append (0);
1158 QString aMainEntry = SMESHGUI_GenericHypothesisCreator::getMainShapeEntry();
1159 if ( !aMainEntry.isEmpty() )
1161 item.myName = tr( "SMESH_FACES_WO_LAYERS" );
1164 StdMeshersGUI_SubShapeSelectorWdg* idsWg =
1165 new StdMeshersGUI_SubShapeSelectorWdg(0,TopAbs_FACE);
1167 idsWg->SetGeomShapeEntry( aMainEntry );
1168 idsWg->SetMainShapeEntry( aMainEntry );
1169 idsWg->SetListOfIDs( h->GetIgnoreFaces() );
1170 idsWg->showPreview( true );
1171 customWidgets()->append ( idsWg );
1174 else if (hypType() == "QuadrangleParams")
1176 StdMeshers::StdMeshers_QuadrangleParams_var h =
1177 StdMeshers::StdMeshers_QuadrangleParams::_narrow(hyp);
1179 item.myName = tr("SMESH_BASE_VERTEX");
1182 StdMeshersGUI_SubShapeSelectorWdg* aDirectionWidget =
1183 new StdMeshersGUI_SubShapeSelectorWdg(0, TopAbs_VERTEX);
1184 aDirectionWidget->SetMaxSize(1);
1185 QString anEntry = SMESHGUI_GenericHypothesisCreator::getShapeEntry();
1186 QString aMainEntry = SMESHGUI_GenericHypothesisCreator::getMainShapeEntry();
1188 anEntry = h->GetObjectEntry();
1189 aDirectionWidget->SetGeomShapeEntry(anEntry);
1190 aDirectionWidget->SetMainShapeEntry(aMainEntry);
1191 if (!isCreation()) {
1192 SMESH::long_array_var aVec = new SMESH::long_array;
1193 int vertID = h->GetTriaVertex();
1197 aDirectionWidget->SetListOfIDs(aVec);
1200 aDirectionWidget->showPreview(true);
1202 item.myName = tr("SMESH_QUAD_TYPE");
1205 StdMeshersGUI_QuadrangleParamWdg* aTypeWidget =
1206 new StdMeshersGUI_QuadrangleParamWdg();
1207 if (!isCreation()) {
1208 aTypeWidget->SetType(int(h->GetQuadType()));
1211 customWidgets()->append(aDirectionWidget);
1212 customWidgets()->append(aTypeWidget);
1219 //================================================================================
1221 * \brief tune "standard" control
1222 * \param w - control widget
1223 * \param int - parameter index
1225 //================================================================================
1227 void StdMeshersGUI_StdHypothesisCreator::attuneStdWidget (QWidget* w, const int) const
1229 SMESHGUI_SpinBox* sb = w->inherits( "SMESHGUI_SpinBox" ) ? ( SMESHGUI_SpinBox* )w : 0;
1232 if( hypType()=="LocalLength" )
1234 if (sb->objectName() == tr("SMESH_LOCAL_LENGTH_PARAM"))
1235 sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "length_precision" );
1236 else if (sb->objectName() == tr("SMESH_LOCAL_LENGTH_PRECISION"))
1237 sb->RangeStepAndValidator( 0.0, 1.0, 0.05, "len_tol_precision" );
1239 else if( hypType()=="Arithmetic1D" )
1241 sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "parametric_precision" );
1243 else if( hypType()=="MaxLength" )
1245 sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "length_precision" );
1246 sb->setEnabled( !widget< QCheckBox >( 1 )->isChecked() );
1248 else if( hypType()=="MaxElementArea" )
1250 sb->RangeStepAndValidator( VALUE_SMALL_2, VALUE_MAX_2, 1.0, "area_precision" );
1252 else if( hypType()=="MaxElementVolume" )
1254 sb->RangeStepAndValidator( VALUE_SMALL_3, VALUE_MAX_3, 1.0, "vol_precision" );
1256 else if( hypType()=="StartEndLength" )
1258 sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "length_precision" );
1260 else if( hypType()=="Deflection1D" )
1262 sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "parametric_precision" );
1264 else if( hypType()=="ViscousLayers" )
1266 if (sb->objectName() == tr("SMESH_STRETCH_FACTOR"))
1267 sb->RangeStepAndValidator( 1.0, VALUE_MAX, 0.1, "parametric_precision" );
1269 sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "length_precision" );
1271 else // default validator for possible ancestors
1273 sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "length_precision" );
1276 // else if ( QtxIntSpinBox* ib = w->inherits( "QtxIntSpinBox" ) ? ( QtxIntSpinBox* )w : 0)
1278 // if( hypType()=="ViscousLayers" )
1284 //================================================================================
1286 * \brief Return dlg title
1287 * \retval QString - title string
1289 //================================================================================
1291 QString StdMeshersGUI_StdHypothesisCreator::caption() const
1293 return tr( QString( "SMESH_%1_TITLE" ).arg( hypTypeName( hypType() ) ).toLatin1().data() );
1296 //================================================================================
1298 * \brief return pixmap for dlg icon
1301 //================================================================================
1303 QPixmap StdMeshersGUI_StdHypothesisCreator::icon() const
1305 QString hypIconName = tr( QString( "ICON_DLG_%1" ).arg( hypTypeName( hypType() ) ).toLatin1().data() );
1306 return SMESHGUI::resourceMgr()->loadPixmap( "SMESH", hypIconName );
1309 //================================================================================
1311 * \brief Return hypothesis type name to show in dlg
1314 //================================================================================
1316 QString StdMeshersGUI_StdHypothesisCreator::type() const
1318 return tr( QString( "SMESH_%1_HYPOTHESIS" ).arg( hypTypeName( hypType() ) ).toLatin1().data() );
1321 //================================================================================
1323 * \brief String to insert in "SMESH_%1_HYPOTHESIS" to get hypothesis type name
1324 * from message resouce file
1325 * \param t - hypothesis type
1326 * \retval QString - result string
1328 //================================================================================
1330 QString StdMeshersGUI_StdHypothesisCreator::hypTypeName( const QString& t ) const
1332 static QMap<QString,QString> types;
1333 if( types.isEmpty() )
1335 types.insert( "LocalLength", "LOCAL_LENGTH" );
1336 types.insert( "NumberOfSegments", "NB_SEGMENTS" );
1337 types.insert( "MaxElementArea", "MAX_ELEMENT_AREA" );
1338 types.insert( "MaxElementVolume", "MAX_ELEMENT_VOLUME" );
1339 types.insert( "StartEndLength", "START_END_LENGTH" );
1340 types.insert( "Deflection1D", "DEFLECTION1D" );
1341 types.insert( "Arithmetic1D", "ARITHMETIC_1D" );
1342 types.insert( "FixedPoints1D", "FIXED_POINTS_1D" );
1343 types.insert( "AutomaticLength", "AUTOMATIC_LENGTH" );
1344 types.insert( "ProjectionSource1D", "PROJECTION_SOURCE_1D" );
1345 types.insert( "ProjectionSource2D", "PROJECTION_SOURCE_2D" );
1346 types.insert( "ProjectionSource3D", "PROJECTION_SOURCE_3D" );
1347 types.insert( "ImportSource1D", "IMPORT_SOURCE_1D" );
1348 types.insert( "ImportSource2D", "IMPORT_SOURCE_2D" );
1349 types.insert( "NumberOfLayers", "NUMBER_OF_LAYERS" );
1350 types.insert( "LayerDistribution", "LAYER_DISTRIBUTION" );
1351 types.insert( "NumberOfLayers2D", "NUMBER_OF_LAYERS_2D" );
1352 types.insert( "LayerDistribution2D", "LAYER_DISTRIBUTION" );
1353 types.insert( "SegmentLengthAroundVertex", "SEGMENT_LENGTH_AROUND_VERTEX" );
1354 types.insert( "MaxLength", "MAX_LENGTH" );
1355 types.insert( "ViscousLayers", "VISCOUS_LAYERS" );
1356 types.insert( "QuadrangleParams", "QUADRANGLE_PARAMS" );
1357 types.insert( "CartesianParameters3D", "CARTESIAN_PARAMS" );
1361 if( types.contains( t ) )
1368 //=======================================================================
1369 //function : getCustomWidget
1370 //purpose : is called from buildStdFrame()
1371 //=======================================================================
1373 QWidget* StdMeshersGUI_StdHypothesisCreator::getCustomWidget( const StdParam & param,
1375 const int index) const
1378 if ( index < customWidgets()->count() ) {
1379 w = customWidgets()->at( index );
1381 w->setParent( parent );
1382 w->move( QPoint( 0, 0 ) );
1388 //================================================================================
1390 * \brief Set param value taken from a custom widget
1391 * \param param - SMESHGUI_GenericHypothesisCreator::StdParam structure
1392 * \param widget - widget presenting param
1393 * \retval bool - success flag
1395 * this method is called from getStdParamFromDlg()
1397 //================================================================================
1399 bool StdMeshersGUI_StdHypothesisCreator::getParamFromCustomWidget( StdParam & param,
1400 QWidget* widget) const
1402 if ( hypType()=="AutomaticLength" ) {
1403 SMESHGUI_SpinBox* w = dynamic_cast<SMESHGUI_SpinBox*>( widget );
1405 param.myValue = w->GetValue();
1409 if ( hypType() == "MaxLength" ) {
1413 if ( widget->inherits( "StdMeshersGUI_ObjectReferenceParamWdg" ))
1415 // show only 1st reference value
1416 if ( true /*widget == getWidgetForParam( 0 )*/) {
1417 const StdMeshersGUI_ObjectReferenceParamWdg * w =
1418 static_cast<const StdMeshersGUI_ObjectReferenceParamWdg*>( widget );
1419 param.myValue = w->GetValue();
1423 if ( widget->inherits( "StdMeshersGUI_LayerDistributionParamWdg" ))
1425 const StdMeshersGUI_LayerDistributionParamWdg * w =
1426 static_cast<const StdMeshersGUI_LayerDistributionParamWdg*>( widget );
1427 param.myValue = w->GetValue();
1430 if ( widget->inherits( "StdMeshersGUI_SubShapeSelectorWdg" ))
1432 const StdMeshersGUI_SubShapeSelectorWdg * w =
1433 static_cast<const StdMeshersGUI_SubShapeSelectorWdg*>( widget );
1434 param.myValue = w->GetValue();
1437 if ( widget->inherits( "StdMeshersGUI_QuadrangleParamWdg" ))
1439 //const StdMeshersGUI_QuadrangleParamWdg * w =
1440 // static_cast<const StdMeshersGUI_QuadrangleParamWdg*>( widget );
1441 param.myValue = "QuadType";
1444 if ( widget->inherits( "StdMeshersGUI_FixedPointsParamWdg" ))
1446 const StdMeshersGUI_FixedPointsParamWdg * w =
1447 static_cast<const StdMeshersGUI_FixedPointsParamWdg*>( widget );
1448 param.myValue = w->GetValue();
1451 if ( widget->inherits( "QCheckBox" ))
1453 //const QCheckBox * w = static_cast<const QCheckBox*>( widget );
1454 //param.myValue = w->isChecked();
1460 //================================================================================
1462 * \brief called when operation cancelled
1464 //================================================================================
1466 void StdMeshersGUI_StdHypothesisCreator::onReject()
1468 if ( hypType().startsWith("ProjectionSource" ) ||
1469 hypType().startsWith("ImportSource" ))
1471 // Uninstall filters of StdMeshersGUI_ObjectReferenceParamWdg
1472 deactivateObjRefParamWdg( customWidgets() );
1476 //================================================================================
1478 * \brief Update widgets dependent on paramWidget
1480 //================================================================================
1482 void StdMeshersGUI_StdHypothesisCreator::valueChanged( QWidget* paramWidget)
1484 if ( hypType() == "MaxLength" && paramWidget == getWidgetForParam(1) )
1486 getWidgetForParam(0)->setEnabled( !widget< QCheckBox >( 1 )->isChecked() );
1487 if ( !getWidgetForParam(0)->isEnabled() ) {
1488 StdMeshers::StdMeshers_MaxLength_var h =
1489 StdMeshers::StdMeshers_MaxLength::_narrow( initParamsHypothesis() );
1490 widget< QtxDoubleSpinBox >( 0 )->setValue( h->GetPreestimatedLength() );
1493 else if ( hypType().startsWith("ImportSource") && paramWidget == getWidgetForParam(1) )
1495 QCheckBox* toCopyMesh = (QCheckBox*) paramWidget;
1496 QCheckBox* toCopyGroups = widget< QCheckBox >( 2 );
1497 if ( !toCopyMesh->isChecked() )
1499 toCopyGroups->setChecked( false );
1500 toCopyGroups->setEnabled( false );
1504 toCopyGroups->setEnabled( true );
1509 //================================================================================
1513 //================================================================================
1515 bool StdMeshersGUI_StdHypothesisCreator::initVariableName(SMESH::ListOfParameters_var theParameters,
1516 StdParam &theParams,
1519 QString aVaribaleName = (theParameters->length() > order) ? QString(theParameters[order].in()) : QString("");
1520 theParams.isVariable = !aVaribaleName.isEmpty();
1521 if(theParams.isVariable)
1522 theParams.myValue = aVaribaleName;
1524 return theParams.isVariable;