+
+//=================================================================================
+// function : ClickOnOkFilter()
+// purpose : highlight and select entities which parameters (length, area or volume) are less than the value specified by the user
+//=================================================================================
+void EntityGUI_SubShapeDlg::ClickOnOkFilter()
+{
+ if (CORBA::is_nil(myObject) || isAllSubShapes() || shapeType() >= GEOM::VERTEX)
+ return;
+
+ TopTools_IndexedMapOfShape aSubShapesMap;
+ TopExp::MapShapes(myShape, aSubShapesMap);
+ SALOME_View* view = GEOM_Displayer::GetActiveView();
+ getDisplayer()->Erase(myObject, false, false);
+ CORBA::String_var aMainEntry = myObject->GetStudyEntry();
+ QString anEntryBase = aMainEntry.in();
+
+ SALOME_ListIO toSelect;
+
+ TopExp_Explorer anExp (myShape, (TopAbs_ShapeEnum)shapeType());
+ for (; anExp.More(); anExp.Next())
+ {
+ TopoDS_Shape aSubShape = anExp.Current();
+ int index = aSubShapesMap.FindIndex(aSubShape);
+ QString anEntry = QString( "TEMP_" ) + anEntryBase + QString("_%1").arg(index);
+ if ( !getDisplayer()->IsDisplayed( anEntry ) )
+ continue;
+
+ double factor = GEOMUtils::ShapeToDouble(aSubShape).second;
+ double v1 = myLessFilterSpin->value();
+ double v2 = myGreaterFilterSpin->value();
+ bool isLess = myLessFilterCombo->itemData(myLessFilterCombo->currentIndex()).toInt() == Filter_LT ? factor < v1 : factor <= v1;
+ bool isGreater = myGreaterFilterCombo->itemData(myGreaterFilterCombo->currentIndex()).toInt() == Filter_GT ? factor > v2 : factor >= v2;
+ if ( ( myLessFilterCheck->isChecked() && myGreaterFilterCheck->isChecked() && isLess && isGreater ) ||
+ ( myLessFilterCheck->isChecked() && !myGreaterFilterCheck->isChecked() && isLess ) ||
+ ( myGreaterFilterCheck->isChecked() && !myLessFilterCheck->isChecked() && isGreater ) ) {
+ Handle(SALOME_InteractiveObject) io = new SALOME_InteractiveObject();
+ io->setEntry( anEntry.toLatin1().constData() );
+ io->setName( myObject->GetName() );
+ toSelect.Append(io);
+ }
+ }
+ if ( toSelect.Extent() > 0 ) {
+ myGeomGUI->getApp()->selectionMgr()->setSelectedObjects(toSelect);
+ SUIT_MessageBox::information( this,
+ tr( "INF_INFO" ),
+ tr( "GEOM_SOME_SHAPES_SELECTED").arg( toSelect.Extent() ),
+ tr( "BUT_OK" ) );
+ }
+ else {
+ SUIT_MessageBox::information( this,
+ tr( "INF_INFO" ),
+ tr( "GEOM_NO_SHAPES_SELECTED" ),
+ tr( "BUT_OK" ) );
+ }
+ updateButtonState();
+}
+
+#ifndef DISABLE_PLOT2DVIEWER
+//=================================================================================
+// function : ClickOnPlot()
+// purpose : opens "Shape Statistics" dialog box in order to plot sub-shapes distribution.
+//=================================================================================
+void EntityGUI_SubShapeDlg::ClickOnPlot()
+{
+ QDialog* dlg = new MeasureGUI_ShapeStatisticsDlg( this, myShape, (TopAbs_ShapeEnum)shapeType() );
+ if ( dlg ) {
+ dlg->show();
+ }
+}
+#endif
+
+//=================================================================================
+// function : MeasureToggled()
+// purpose :
+// : Called when 'myLessFilterCheck' or 'myGreaterFilterCheck' state change
+//=================================================================================
+void EntityGUI_SubShapeDlg::MeasureToggled()
+{
+ myLessFilterSpin->setEnabled(myLessFilterCheck->isChecked());
+ myLessFilterCombo->setEnabled(myLessFilterCheck->isChecked());
+ myGreaterFilterSpin->setEnabled(myGreaterFilterCheck->isChecked());
+ myGreaterFilterCombo->setEnabled(myGreaterFilterCheck->isChecked());
+ myApplyFilterButton->setEnabled(myLessFilterCheck->isChecked() || myGreaterFilterCheck->isChecked());
+}
+
+//=================================================================================
+// function : getSourceObjects
+// purpose : virtual method to get source objects
+//=================================================================================
+QList<GEOM::GeomObjPtr> EntityGUI_SubShapeDlg::getSourceObjects()
+{
+ QList<GEOM::GeomObjPtr> res;
+ GEOM::GeomObjPtr aGeomObjPtr(myObject);
+ res << aGeomObjPtr;
+ return res;
+}