Salome HOME
0022765: [EDF] Improvement of local selection mechanism
[modules/geom.git] / src / MeasureGUI / MeasureGUI_BndBoxDlg.cxx
index 0da5051ba80048134ca09d06f4b8e36bcae91a15..436c4a0036760c978ead28b039b679a057fc54e2 100644 (file)
@@ -124,7 +124,7 @@ void MeasureGUI_BndBoxDlg::Init()
           this, SLOT(SelectionIntoArgument()));
 
   initName(tr("GEOM_BNDBOX"));
-  globalSelection();
+  activateSelection();
   SelectionIntoArgument();
 }
 
@@ -148,6 +148,7 @@ bool MeasureGUI_BndBoxDlg::ClickOnApply()
     return false;
 
   initName();
+  activateSelection();
   return true;
 }
 
@@ -162,7 +163,7 @@ void MeasureGUI_BndBoxDlg::ActivateThisDialog()
   connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
           this, SLOT(SelectionIntoArgument()));
 
-  globalSelection();
+  activateSelection();
   redisplayPreview();
 }
 
@@ -216,11 +217,11 @@ bool MeasureGUI_BndBoxDlg::getParameters (double& theXmin, double& theXmax,
                                           double& theYmin, double& theYmax,
                                           double& theZmin, double& theZmax)
 {
-  if (myObj->_is_nil())
+  if (!myObj)
     return false;
 
   GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
-  anOper->GetBoundingBox(myObj, true, theXmin, theXmax, theYmin, theYmax, theZmin, theZmax);
+  anOper->GetBoundingBox(myObj.get(), true, theXmin, theXmax, theYmin, theYmax, theZmin, theZmax);
 
   return anOper->IsDone();
 }
@@ -249,28 +250,19 @@ SALOME_Prs* MeasureGUI_BndBoxDlg::buildPrs()
 void MeasureGUI_BndBoxDlg::SelectionIntoArgument()
 {
   myEditCurrentArgument->setText("");
-  myObj = GEOM::GEOM_Object::_nil();
+  myObj.nullify();
 
-  LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
-  SALOME_ListIO aSelList;
-  aSelMgr->selectedObjects(aSelList);
+  QList<TopAbs_ShapeEnum> aTypes;
+  aTypes << TopAbs_VERTEX << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND << TopAbs_SHAPE;
+  myObj = getSelected( aTypes );
 
-  if (aSelList.Extent() != 1) {
+  if ( !myObj ) {
     processObject();
     erasePreview();
     return;
   }
 
-  GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject(aSelList.First());
-
-  if (aSelectedObject->_is_nil()) {
-    processObject();
-    erasePreview();
-    return;
-  }
-
-  myObj = aSelectedObject;
-  myEditCurrentArgument->setText(GEOMBase::GetName(myObj));
+  myEditCurrentArgument->setText(GEOMBase::GetName(myObj.get()));
   processObject();
   redisplayPreview();
 }
@@ -290,7 +282,7 @@ GEOM::GEOM_IOperations_ptr MeasureGUI_BndBoxDlg::createOperation()
 //=================================================================================
 bool MeasureGUI_BndBoxDlg::isValid (QString&)
 {
-  return !myObj->_is_nil();
+  return myObj;
 }
 
 //=================================================================================
@@ -300,7 +292,7 @@ bool MeasureGUI_BndBoxDlg::isValid (QString&)
 bool MeasureGUI_BndBoxDlg::execute (ObjectList& objects)
 {
   GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
-  GEOM::GEOM_Object_var anObj = anOper->MakeBoundingBox(myObj, true);
+  GEOM::GEOM_Object_var anObj = anOper->MakeBoundingBox(myObj.get(), true);
 
   if (!anObj->_is_nil())
     objects.push_back(anObj._retn());
@@ -308,6 +300,20 @@ bool MeasureGUI_BndBoxDlg::execute (ObjectList& objects)
   return true;
 }
 
+//=================================================================================
+// function : activateSelection()
+// purpose  :
+//=================================================================================
+void MeasureGUI_BndBoxDlg::activateSelection()
+{
+  globalSelection( GEOM_ALLSHAPES );
+  std::list<int> needTypes;
+  needTypes.push_back( TopAbs_SHAPE ), needTypes.push_back( TopAbs_VERTEX ), needTypes.push_back( TopAbs_EDGE ); 
+  needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL );
+  needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPSOLID ), needTypes.push_back( TopAbs_COMPOUND );
+  localSelection(GEOM::GEOM_Object::_nil(), needTypes );
+}
+
 //=================================================================================
 // function : redisplayPreview()
 // purpose  :
@@ -337,3 +343,12 @@ void MeasureGUI_BndBoxDlg::redisplayPreview()
   catch (...) {
   }
 }
+
+//=================================================================================
+// function : addSubshapeToStudy
+// purpose  : virtual method to add new SubObjects if local selection
+//=================================================================================
+void MeasureGUI_BndBoxDlg::addSubshapesToStudy()
+{
+  GEOMBase::PublishSubObject( myObj.get() );
+}