1 // Copyright (C) 2007-2013 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
23 // NETGENPlugin GUI: GUI for plugged-in mesher NETGENPlugin
24 // File : NETGENPluginGUI_HypothesisCreator.cxx
25 // Author : Michael Zorin
26 // Module : NETGENPlugin
28 #include "NETGENPluginGUI_HypothesisCreator.h"
30 #include <SMESHGUI_Utils.h>
31 #include <SMESHGUI_HypothesesUtils.h>
32 #include <SMESHGUI_SpinBox.h>
33 #include <GeomSelectionTools.h>
35 #include CORBA_SERVER_HEADER(NETGENPlugin_Algorithm)
37 #include <SUIT_Session.h>
38 #include <SUIT_ResourceMgr.h>
40 #include <SalomeApp_Tools.h>
41 #include <LightApp_SelectionMgr.h>
42 #include <SALOME_ListIteratorOfListIO.hxx>
52 #include <QTableWidget>
53 #include <QHeaderView>
54 #include <QPushButton>
87 NETGENPluginGUI_HypothesisCreator::NETGENPluginGUI_HypothesisCreator( const QString& theHypType )
88 : SMESHGUI_GenericHypothesisCreator( theHypType )
90 myGeomSelectionTools = NULL;
91 myLocalSizeMap.clear();
92 myIs2D = ( theHypType.startsWith("NETGEN_Parameters_2D"));
93 myIsONLY = ( theHypType == "NETGEN_Parameters_2D_ONLY" ||
94 theHypType == "NETGEN_Parameters_3D");
97 NETGENPluginGUI_HypothesisCreator::~NETGENPluginGUI_HypothesisCreator()
101 bool NETGENPluginGUI_HypothesisCreator::checkParams(QString& msg) const
103 NetgenHypothesisData data_old, data_new;
104 readParamsFromHypo( data_old );
105 readParamsFromWidgets( data_new );
106 bool res = storeParamsToHypo( data_new );
107 //storeParamsToHypo( data_old ); -- issue 0021364: Dump of netgen parameters has duplicate lines
109 res = myMaxSize->isValid(msg,true) && res;
110 res = myMinSize->isValid(msg,true) && res;
111 res = myGrowthRate->isValid(msg,true) && res; ;
112 if ( myNbSegPerEdge )
113 res = myNbSegPerEdge->isValid(msg,true) && res;
114 if ( myNbSegPerRadius )
115 res = myNbSegPerRadius->isValid(msg,true) && res;
117 if ( !res ) // -- issue 0021364: Dump of netgen parameters has duplicate lines
118 storeParamsToHypo( data_old );
123 QFrame* NETGENPluginGUI_HypothesisCreator::buildFrame()
125 QFrame* fr = new QFrame( 0 );
126 fr->setObjectName( "myframe" );
127 QVBoxLayout* lay = new QVBoxLayout( fr );
129 lay->setSpacing( 0 );
131 QTabWidget* tab = new QTabWidget( fr );
132 tab->setTabShape( QTabWidget::Rounded );
133 tab->setTabPosition( QTabWidget::North );
134 lay->addWidget( tab );
135 QWidget* GroupC1 = new QWidget();
136 tab->insertTab( STD_TAB, GroupC1, tr( "SMESH_ARGUMENTS" ) );
138 QGridLayout* aGroupLayout = new QGridLayout( GroupC1 );
139 aGroupLayout->setSpacing( 6 );
140 aGroupLayout->setMargin( 11 );
146 aGroupLayout->addWidget( new QLabel( tr( "SMESH_NAME" ), GroupC1 ), row, 0 );
147 myName = new QLineEdit( GroupC1 );
148 myName->setMinimumWidth(160);
149 aGroupLayout->addWidget( myName, row, 1 );
153 aGroupLayout->addWidget( new QLabel( tr( "NETGEN_MAX_SIZE" ), GroupC1 ), row, 0 );
154 myMaxSize = new SMESHGUI_SpinBox( GroupC1 );
155 myMaxSize->RangeStepAndValidator( 1e-07, 1e+06, 10., "length_precision" );
156 aGroupLayout->addWidget( myMaxSize, row, 1 );
159 aGroupLayout->addWidget( new QLabel( tr( "NETGEN_MIN_SIZE" ), GroupC1 ), row, 0 );
160 myMinSize = new SMESHGUI_SpinBox( GroupC1 );
161 myMinSize->RangeStepAndValidator( 0.0, 1e+06, 10., "length_precision" );
162 aGroupLayout->addWidget( myMinSize, row, 1 );
168 mySecondOrder = new QCheckBox( tr( "NETGEN_SECOND_ORDER" ), GroupC1 );
169 aGroupLayout->addWidget( mySecondOrder, row, 0 );
173 aGroupLayout->addWidget( new QLabel( tr( "NETGEN_FINENESS" ), GroupC1 ), row, 0 );
174 myFineness = new QComboBox( GroupC1 );
176 types << tr( "NETGEN_VERYCOARSE" ) << tr( "NETGEN_COARSE" ) << tr( "NETGEN_MODERATE" ) <<
177 tr( "NETGEN_FINE" ) << tr( "NETGEN_VERYFINE" ) << tr( "NETGEN_CUSTOM" );
178 myFineness->addItems( types );
179 aGroupLayout->addWidget( myFineness, row, 1 );
182 aGroupLayout->addWidget( new QLabel( tr( "NETGEN_GROWTH_RATE" ), GroupC1 ), row, 0 );
183 myGrowthRate = new SMESHGUI_SpinBox( GroupC1 );
184 myGrowthRate->RangeStepAndValidator( .0001, 10., .1, "parametric_precision" );
185 aGroupLayout->addWidget( myGrowthRate, row, 1 );
189 myNbSegPerRadius = 0;
192 const double VALUE_MAX = 1.0e+6;
194 aGroupLayout->addWidget( new QLabel( tr( "NETGEN_SEG_PER_EDGE" ), GroupC1 ), row, 0 );
195 myNbSegPerEdge = new SMESHGUI_SpinBox( GroupC1 );
196 myNbSegPerEdge->RangeStepAndValidator( .2, VALUE_MAX, .1, "parametric_precision" );
197 aGroupLayout->addWidget( myNbSegPerEdge, row, 1 );
200 aGroupLayout->addWidget( new QLabel( tr( "NETGEN_SEG_PER_RADIUS" ), GroupC1 ), row, 0 );
201 myNbSegPerRadius = new SMESHGUI_SpinBox( GroupC1 );
202 myNbSegPerRadius->RangeStepAndValidator( .2, VALUE_MAX, .1, "parametric_precision" );
203 aGroupLayout->addWidget( myNbSegPerRadius, row, 1 );
206 myAllowQuadrangles = 0;
207 if ( myIs2D || !myIsONLY ) // issue 0021676
209 myAllowQuadrangles = new QCheckBox( tr( "NETGEN_ALLOW_QUADRANGLES" ), GroupC1 );
210 aGroupLayout->addWidget( myAllowQuadrangles, row, 0 );
214 myOptimize = new QCheckBox( tr( "NETGEN_OPTIMIZE" ), GroupC1 );
215 aGroupLayout->addWidget( myOptimize, row, 0 );
218 connect( myFineness, SIGNAL( activated( int ) ), this, SLOT( onFinenessChanged() ) );
220 myLocalSizeTable = 0;
223 QWidget* localSizeGroup = new QWidget();
224 QGridLayout* localSizeLayout = new QGridLayout(localSizeGroup);
226 myLocalSizeTable = new QTableWidget(0, LSZ_NB_COLUMNS, localSizeGroup);
227 localSizeLayout->addWidget(myLocalSizeTable, 1, 0, 8, 1);
228 QStringList localSizeHeaders;
229 localSizeHeaders << tr( "LSZ_ENTRY_COLUMN" )<< tr( "LSZ_NAME_COLUMN" ) << tr( "LSZ_LOCALSIZE_COLUMN" );
230 myLocalSizeTable->setHorizontalHeaderLabels(localSizeHeaders);
231 myLocalSizeTable->horizontalHeader()->hideSection(LSZ_ENTRY_COLUMN);
232 myLocalSizeTable->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
233 myLocalSizeTable->resizeColumnToContents(LSZ_NAME_COLUMN);
234 myLocalSizeTable->resizeColumnToContents(LSZ_LOCALSIZE_COLUMN);
235 myLocalSizeTable->setAlternatingRowColors(true);
236 myLocalSizeTable->verticalHeader()->hide();
238 QPushButton* addVertexButton = new QPushButton(tr("NETGEN_LSZ_VERTEX"), localSizeGroup);
239 localSizeLayout->addWidget(addVertexButton, LSZ_VERTEX_BTN, 1, 1, 1);
240 QPushButton* addEdgeButton = new QPushButton(tr("NETGEN_LSZ_EDGE"), localSizeGroup);
241 localSizeLayout->addWidget(addEdgeButton, LSZ_EDGE_BTN, 1, 1, 1);
242 QPushButton* addFaceButton = new QPushButton(tr("NETGEN_LSZ_FACE"), localSizeGroup);
243 localSizeLayout->addWidget(addFaceButton, LSZ_FACE_BTN, 1, 1, 1);
245 QFrame *line2 = new QFrame(localSizeGroup);
246 line2->setFrameShape(QFrame::HLine);
247 line2->setFrameShadow(QFrame::Sunken);
248 localSizeLayout->addWidget(line2, LSZ_SEPARATOR2, 1, 1, 1);
250 QPushButton* removeButton = new QPushButton(tr("NETGEN_LSZ_REMOVE"), localSizeGroup);
251 localSizeLayout->addWidget(removeButton, LSZ_REMOVE_BTN, 1, 1, 1);
253 connect( addVertexButton, SIGNAL(clicked()), this, SLOT(onAddLocalSizeOnVertex()));
254 connect( addEdgeButton, SIGNAL(clicked()), this, SLOT(onAddLocalSizeOnEdge()));
255 connect( addFaceButton, SIGNAL(clicked()), this, SLOT(onAddLocalSizeOnFace()));
256 connect( removeButton, SIGNAL(clicked()), this, SLOT(onRemoveLocalSizeOnShape()));
257 connect( myLocalSizeTable, SIGNAL(cellChanged(int, int)), this, SLOT(onSetLocalSize(int, int)));
259 tab->insertTab(LSZ_TAB, localSizeGroup, tr("NETGEN_LOCAL_SIZE"));
264 void NETGENPluginGUI_HypothesisCreator::retrieveParams() const
266 NetgenHypothesisData data;
267 readParamsFromHypo( data );
270 myName->setText( data.myName );
271 if(data.myMaxSizeVar.isEmpty())
272 myMaxSize->setValue( data.myMaxSize );
274 myMaxSize->setText( data.myMaxSizeVar );
276 if(data.myMinSizeVar.isEmpty())
277 myMinSize->setValue( data.myMinSize );
279 myMinSize->setText( data.myMinSizeVar );
282 mySecondOrder->setChecked( data.mySecondOrder );
284 myOptimize->setChecked( data.myOptimize );
285 myFineness->setCurrentIndex( data.myFineness );
287 if(data.myGrowthRateVar.isEmpty())
288 myGrowthRate->setValue( data.myGrowthRate );
290 myGrowthRate->setText( data.myGrowthRateVar );
292 if ( myNbSegPerEdge )
294 if(data.myNbSegPerEdgeVar.isEmpty())
295 myNbSegPerEdge->setValue( data.myNbSegPerEdge );
297 myNbSegPerEdge->setText( data.myNbSegPerEdgeVar );
299 if ( myNbSegPerRadius )
301 if(data.myNbSegPerRadiusVar.isEmpty())
302 myNbSegPerRadius->setValue( data.myNbSegPerRadius );
304 myNbSegPerRadius->setText( data.myNbSegPerRadiusVar );
306 if (myAllowQuadrangles)
307 myAllowQuadrangles->setChecked( data.myAllowQuadrangles );
310 bool isCustom = (myFineness->currentIndex() == UserDefined);
311 myGrowthRate->setEnabled(isCustom);
312 if ( myNbSegPerEdge )
313 myNbSegPerEdge->setEnabled(isCustom);
314 if ( myNbSegPerRadius )
315 myNbSegPerRadius->setEnabled(isCustom);
317 if ( myLocalSizeTable )
319 NETGENPluginGUI_HypothesisCreator* that = (NETGENPluginGUI_HypothesisCreator*)this;
320 QMapIterator<QString, QString> i(myLocalSizeMap);
321 GeomSelectionTools* geomSelectionTools = that->getGeomSelectionTools();
322 while (i.hasNext()) {
324 const QString entry = i.key();
325 std::string shapeName = geomSelectionTools->getNameFromEntry(entry.toStdString());
326 const QString localSize = i.value();
327 int row = myLocalSizeTable->rowCount();
328 myLocalSizeTable->setRowCount(row+1);
329 myLocalSizeTable->setItem(row, LSZ_ENTRY_COLUMN, new QTableWidgetItem(entry));
330 myLocalSizeTable->item(row, LSZ_ENTRY_COLUMN)->setFlags(0);
331 myLocalSizeTable->setItem(row, LSZ_NAME_COLUMN, new QTableWidgetItem(QString::fromStdString(shapeName)));
332 myLocalSizeTable->item(row, LSZ_NAME_COLUMN)->setFlags(0);
333 myLocalSizeTable->setItem(row, LSZ_LOCALSIZE_COLUMN, new QTableWidgetItem(localSize));
334 myLocalSizeTable->item(row, LSZ_LOCALSIZE_COLUMN)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsEnabled);
336 myLocalSizeTable->resizeColumnToContents(LSZ_NAME_COLUMN);
337 myLocalSizeTable->resizeColumnToContents(LSZ_LOCALSIZE_COLUMN);
341 QString NETGENPluginGUI_HypothesisCreator::storeParams() const
343 NetgenHypothesisData data;
344 readParamsFromWidgets( data );
345 storeParamsToHypo( data );
347 QString valStr = tr("NETGEN_MAX_SIZE") + " = " + QString::number( data.myMaxSize ) + "; ";
348 valStr += tr("NETGEN_MIN_SIZE") + " = " + QString::number( data.myMinSize ) + "; ";
349 if ( data.mySecondOrder )
350 valStr += tr("NETGEN_SECOND_ORDER") + "; ";
351 if ( data.myOptimize )
352 valStr += tr("NETGEN_OPTIMIZE") + "; ";
353 valStr += myFineness->currentText() + "(" + QString::number( data.myGrowthRate ) + ", " +
354 QString::number( data.myNbSegPerEdge ) + ", " +
355 QString::number( data.myNbSegPerRadius ) + ")";
357 if ( myIs2D && data.myAllowQuadrangles )
358 valStr += "; " + tr("NETGEN_ALLOW_QUADRANGLES");
363 bool NETGENPluginGUI_HypothesisCreator::readParamsFromHypo( NetgenHypothesisData& h_data ) const
365 NETGENPlugin::NETGENPlugin_Hypothesis_var h =
366 NETGENPlugin::NETGENPlugin_Hypothesis::_narrow( initParamsHypothesis() );
368 HypothesisData* data = SMESH::GetHypothesisData( hypType() );
369 h_data.myName = isCreation() && data ? data->Label : "";
371 h_data.myMaxSize = h->GetMaxSize();
372 h_data.myMaxSizeVar = getVariableName("SetMaxSize");
373 h_data.mySecondOrder = h->GetSecondOrder();
374 h_data.myOptimize = h->GetOptimize();
376 h_data.myFineness = (int) h->GetFineness();
377 h_data.myGrowthRate = h->GetGrowthRate();
378 h_data.myGrowthRateVar = getVariableName("SetGrowthRate");
379 h_data.myNbSegPerEdge = h->GetNbSegPerEdge();
380 h_data.myNbSegPerEdgeVar = getVariableName("SetNbSegPerEdge");
381 h_data.myNbSegPerRadius = h->GetNbSegPerRadius();
382 h_data.myNbSegPerRadiusVar = getVariableName("SetNbSegPerRadius");
383 h_data.myMinSize = h->GetMinSize();
384 h_data.myMinSizeVar = getVariableName("SetMinSize");
388 NETGENPlugin::NETGENPlugin_Hypothesis_var h =
389 NETGENPlugin::NETGENPlugin_Hypothesis::_narrow( initParamsHypothesis() );
392 h_data.myAllowQuadrangles = h->GetQuadAllowed();
395 NETGENPluginGUI_HypothesisCreator* that = (NETGENPluginGUI_HypothesisCreator*)this;
396 NETGENPlugin::string_array_var myEntries = h->GetLocalSizeEntries();
397 for ( int i=0 ; i<myEntries->length() ; i++ )
399 QString entry = myEntries[i].in();
400 double val = h->GetLocalSizeOnEntry(entry.toStdString().c_str());
401 std::ostringstream tmp;
403 QString valstring = QString::fromStdString(tmp.str());
404 if (myLocalSizeMap.contains(entry))
406 if (myLocalSizeMap[entry] == "__TO_DELETE__")
411 that->myLocalSizeMap[entry] = valstring;
417 bool NETGENPluginGUI_HypothesisCreator::storeParamsToHypo( const NetgenHypothesisData& h_data ) const
419 NETGENPlugin::NETGENPlugin_Hypothesis_var h =
420 NETGENPlugin::NETGENPlugin_Hypothesis::_narrow( hypothesis() );
426 SMESH::SetName( SMESH::FindSObject( h ), h_data.myName.toLatin1().data() );
427 h->SetVarParameter( h_data.myMaxSizeVar.toLatin1().constData(), "SetMaxSize");
428 h->SetMaxSize( h_data.myMaxSize );
429 h->SetSecondOrder( h_data.mySecondOrder );
430 h->SetOptimize( h_data.myOptimize );
431 int fineness = h_data.myFineness;
432 h->SetFineness( fineness );
434 if( fineness==UserDefined )
436 h->SetVarParameter( h_data.myGrowthRateVar.toLatin1().constData(), "SetGrowthRate");
437 h->SetGrowthRate( h_data.myGrowthRate );
438 h->SetVarParameter( h_data.myNbSegPerEdgeVar.toLatin1().constData(), "SetNbSegPerEdge");
439 h->SetNbSegPerEdge( h_data.myNbSegPerEdge );
440 h->SetVarParameter( h_data.myNbSegPerRadiusVar.toLatin1().constData(), "SetNbSegPerRadius");
441 h->SetNbSegPerRadius( h_data.myNbSegPerRadius );
443 h->SetVarParameter( h_data.myMinSizeVar.toLatin1().constData(), "SetMinSize");
444 h->SetMinSize( h_data.myMinSize );
448 // NETGENPlugin::NETGENPlugin_Hypothesis_2D_var h_2d =
449 // NETGENPlugin::NETGENPlugin_Hypothesis_2D::_narrow( h );
451 // if ( !h_2d->_is_nil() )
452 // h_2d->SetQuadAllowed( h_data.myAllowQuadrangles );
453 h->SetQuadAllowed( h_data.myAllowQuadrangles );
456 QMapIterator<QString,QString> i(myLocalSizeMap);
457 while (i.hasNext()) {
459 const QString entry = i.key();
460 const QString localSize = i.value();
461 if (localSize == "__TO_DELETE__")
463 h->UnsetLocalSizeOnEntry(entry.toLatin1().constData());
467 std::istringstream tmp(localSize.toLatin1().constData());
470 h->SetLocalSizeOnEntry(entry.toLatin1().constData(), val);
474 catch(const SALOME::SALOME_Exception& ex)
476 SalomeApp_Tools::QtCatchCorbaException(ex);
482 bool NETGENPluginGUI_HypothesisCreator::readParamsFromWidgets( NetgenHypothesisData& h_data ) const
484 h_data.myName = myName ? myName->text() : "";
485 h_data.myMaxSize = myMaxSize->value();
486 h_data.myMaxSizeVar = myMaxSize->text();
487 h_data.myMinSize = myMinSize->value();
488 h_data.myMinSizeVar = myMinSize->text();
490 h_data.mySecondOrder = mySecondOrder->isChecked();
492 h_data.myOptimize = myOptimize->isChecked();
493 h_data.myFineness = myFineness->currentIndex();
494 h_data.myGrowthRate = myGrowthRate->value();
495 if ( myNbSegPerEdge )
496 h_data.myNbSegPerEdge = myNbSegPerEdge->value();
497 if ( myNbSegPerRadius )
498 h_data.myNbSegPerRadius = myNbSegPerRadius->value();
500 h_data.myGrowthRateVar = myGrowthRate->text();
501 if ( myNbSegPerEdge )
502 h_data.myNbSegPerEdgeVar = myNbSegPerEdge->text();
503 if ( myNbSegPerRadius )
504 h_data.myNbSegPerRadiusVar = myNbSegPerRadius->text();
507 if ( myAllowQuadrangles )
508 h_data.myAllowQuadrangles = myAllowQuadrangles->isChecked();
510 if ( myLocalSizeTable )
512 NETGENPluginGUI_HypothesisCreator* that = (NETGENPluginGUI_HypothesisCreator*)this;
513 int nbRows = myLocalSizeTable->rowCount();
514 for(int row=0 ; row < nbRows ; row++)
516 QString entry = myLocalSizeTable->item(row, LSZ_ENTRY_COLUMN)->text();
517 QString localSize = myLocalSizeTable->item(row, LSZ_LOCALSIZE_COLUMN)->text().trimmed();
518 that->myLocalSizeMap[entry] = localSize;
524 void NETGENPluginGUI_HypothesisCreator::onFinenessChanged()
526 bool isCustom = (myFineness->currentIndex() == UserDefined);
528 myGrowthRate->setEnabled(isCustom);
529 if ( myNbSegPerEdge )
530 myNbSegPerEdge->setEnabled(isCustom);
531 if ( myNbSegPerRadius )
532 myNbSegPerRadius->setEnabled(isCustom);
536 double aGrowthRate, aNbSegPerEdge, aNbSegPerRadius;
538 switch ( myFineness->currentIndex() )
548 aNbSegPerRadius = 1.5;
568 myGrowthRate->setValue( aGrowthRate );
569 if ( myNbSegPerEdge )
570 myNbSegPerEdge->setValue( aNbSegPerEdge );
571 if ( myNbSegPerRadius )
572 myNbSegPerRadius->setValue( aNbSegPerRadius );
576 void NETGENPluginGUI_HypothesisCreator::onAddLocalSizeOnVertex()
578 addLocalSizeOnShape(TopAbs_VERTEX);
581 void NETGENPluginGUI_HypothesisCreator::onAddLocalSizeOnEdge()
583 addLocalSizeOnShape(TopAbs_EDGE);
586 void NETGENPluginGUI_HypothesisCreator::onAddLocalSizeOnFace()
588 addLocalSizeOnShape(TopAbs_FACE);
591 void NETGENPluginGUI_HypothesisCreator::addLocalSizeOnShape(TopAbs_ShapeEnum typeShapeAsked)
593 NETGENPlugin::NETGENPlugin_Hypothesis_var h = NETGENPlugin::NETGENPlugin_Hypothesis::_narrow(initParamsHypothesis());
594 GeomSelectionTools* geomSelectionTools = getGeomSelectionTools();
595 LightApp_SelectionMgr* mySel = geomSelectionTools->selectionMgr();
596 SALOME_ListIO ListSelectedObjects;
597 mySel->selectedObjects(ListSelectedObjects, NULL, false );
598 SALOME_ListIteratorOfListIO Object_It(ListSelectedObjects);
599 for (Object_It ; Object_It.More() ; Object_It.Next())
601 Handle(SALOME_InteractiveObject) anObject = Object_It.Value();
602 std::string entry, shapeName;
603 entry = geomSelectionTools->getEntryOfObject(anObject);
604 shapeName = anObject->getName();
605 TopAbs_ShapeEnum shapeType;
606 shapeType = geomSelectionTools->entryToShapeType(entry);
607 if (shapeType == TopAbs_SHAPE)
609 // E.A. if shapeType == TopAbs_SHAPE, it is NOT a TopoDS_Shape !!!
613 if(shapeType != typeShapeAsked)
618 myLocalSizeTable->setFocus();
620 shapeEntry = QString::fromStdString(entry);
621 if (myLocalSizeMap.contains(shapeEntry))
623 if (myLocalSizeMap[shapeEntry] != "__TO_DELETE__")
628 double phySize = h->GetMaxSize();
629 std::ostringstream oss;
632 localSize = QString::fromStdString(oss.str());
634 int row = myLocalSizeTable->rowCount() ;
635 myLocalSizeTable->setRowCount(row+1);
636 myLocalSizeTable->setItem(row, LSZ_ENTRY_COLUMN, new QTableWidgetItem(shapeEntry));
637 myLocalSizeTable->item(row, LSZ_ENTRY_COLUMN )->setFlags(0);
638 myLocalSizeTable->setItem(row, LSZ_NAME_COLUMN, new QTableWidgetItem(QString::fromStdString(shapeName)));
639 myLocalSizeTable->item(row, LSZ_NAME_COLUMN )->setFlags(0);
640 myLocalSizeTable->setItem(row, LSZ_LOCALSIZE_COLUMN, new QTableWidgetItem(localSize));
641 myLocalSizeTable->item(row, LSZ_LOCALSIZE_COLUMN )->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsEnabled);
642 myLocalSizeTable->resizeColumnToContents(LSZ_NAME_COLUMN);
643 myLocalSizeTable->resizeColumnToContents(LSZ_LOCALSIZE_COLUMN);
644 myLocalSizeTable->clearSelection();
645 myLocalSizeTable->scrollToItem( myLocalSizeTable->item( row, LSZ_LOCALSIZE_COLUMN ) );
650 void NETGENPluginGUI_HypothesisCreator::onRemoveLocalSizeOnShape()
652 QList<int> selectedRows;
653 QList<QTableWidgetItem*> selected = myLocalSizeTable->selectedItems();
654 QTableWidgetItem* item;
656 foreach(item, selected) {
658 if (!selectedRows.contains(row))
659 selectedRows.append( row );
661 qSort( selectedRows );
662 QListIterator<int> it( selectedRows );
664 while (it.hasPrevious())
667 QString entry = myLocalSizeTable->item(row,LSZ_ENTRY_COLUMN)->text();
668 if (myLocalSizeMap.contains(entry))
670 myLocalSizeMap[entry] = "__TO_DELETE__";
672 myLocalSizeTable->removeRow(row );
674 myLocalSizeTable->resizeColumnToContents(LSZ_NAME_COLUMN);
675 myLocalSizeTable->resizeColumnToContents(LSZ_LOCALSIZE_COLUMN);
678 void NETGENPluginGUI_HypothesisCreator::onSetLocalSize(int row,int col)
680 if (col == LSZ_LOCALSIZE_COLUMN) {
681 QString entry = myLocalSizeTable->item(row, LSZ_ENTRY_COLUMN)->text();
682 QString localSize = myLocalSizeTable->item(row, LSZ_LOCALSIZE_COLUMN)->text().trimmed();
683 myLocalSizeMap[entry] = localSize;
684 myLocalSizeTable->resizeColumnToContents(LSZ_LOCALSIZE_COLUMN);
688 GeomSelectionTools* NETGENPluginGUI_HypothesisCreator::getGeomSelectionTools()
690 _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
691 if (myGeomSelectionTools == NULL || myGeomSelectionTools->getMyStudy() != aStudy) {
692 delete myGeomSelectionTools;
693 myGeomSelectionTools = new GeomSelectionTools(aStudy);
695 return myGeomSelectionTools;
698 QString NETGENPluginGUI_HypothesisCreator::caption() const
700 return tr( QString( "NETGEN_%1_TITLE" ).arg(myIs2D?QString("2D"):QString("3D")).toLatin1().data() );
703 QPixmap NETGENPluginGUI_HypothesisCreator::icon() const
705 QString hypIconName = tr( QString("ICON_DLG_NETGEN_PARAMETERS%1").arg(myIs2D?QString("_2D"):QString("")).toLatin1().data() );
706 return SUIT_Session::session()->resourceMgr()->loadPixmap( "NETGENPlugin", hypIconName );
709 QString NETGENPluginGUI_HypothesisCreator::type() const
711 return tr( QString( "NETGEN_%1_HYPOTHESIS" ).arg(myIs2D?QString("2D"):QString("3D")).toLatin1().data() );
714 QString NETGENPluginGUI_HypothesisCreator::helpPage() const
716 return "netgen_2d_3d_hypo_page.html";