Salome HOME
Code refactoring
[modules/geom.git] / src / GenerationGUI / GenerationGUI_RevolDlg.cxx
index b5f35c76799aaf9cb8678ecfca184f5ff1cf8bc9..53ba3d6256f4bac61ac7ffc56da9050f6f9f2f98 100644 (file)
@@ -1,4 +1,4 @@
-//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -19,6 +19,7 @@
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+
 // GEOM GEOMGUI : GUI for Geometry component
 // File   : GenerationGUI_RevolDlg.cxx
 // Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
@@ -71,7 +72,7 @@ GenerationGUI_RevolDlg::GenerationGUI_RevolDlg (GeometryGUI* theGeometryGUI, QWi
 
   GroupPoints = new DlgRef_2Sel1Spin2Check(centralWidget());
   GroupPoints->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
-  GroupPoints->TextLabel1->setText(tr("GEOM_OBJECT"));
+  GroupPoints->TextLabel1->setText(tr("GEOM_OBJECTS"));
   GroupPoints->TextLabel2->setText(tr("GEOM_AXIS"));
   GroupPoints->TextLabel3->setText(tr("GEOM_ANGLE"));
   GroupPoints->PushButton1->setIcon(image1);
@@ -109,7 +110,7 @@ void GenerationGUI_RevolDlg::Init()
 {
   // min, max, step and decimals for spin boxes & initial values
   double SpecificStep = 5;
-  initSpinBox(GroupPoints->SpinBox_DX, -360.0, 360.0, SpecificStep, 3); // VSR: TODO: DBL_DIGITS_DISPLAY
+  initSpinBox(GroupPoints->SpinBox_DX, -360.0, 360.0, SpecificStep, "angle_precision" );
   GroupPoints->SpinBox_DX->setValue(45.0);
 
   // init variables
@@ -118,7 +119,7 @@ void GenerationGUI_RevolDlg::Init()
 
   GroupPoints->LineEdit1->setText("");
   GroupPoints->LineEdit2->setText("");
-  myBase = myAxis = GEOM::GEOM_Object::_nil();
+  myAxis = GEOM::GEOM_Object::_nil();
   myOkBase = myOkAxis = false;
 
   // signals and slots connections
@@ -135,7 +136,8 @@ void GenerationGUI_RevolDlg::Init()
   connect(GroupPoints->CheckButton1, SIGNAL(toggled(bool)),        this, SLOT(onBothway()));
   connect(GroupPoints->CheckButton2, SIGNAL(toggled(bool)),        this, SLOT(onReverse()));
 
-  connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), this, SLOT(SetDoubleSpinBoxStep(double)));
+  // san: We don't need this, as the default step value is not used in this dialog box
+  //connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), this, SLOT(SetDoubleSpinBoxStep(double)));
 
   initName(tr("GEOM_REVOLUTION"));
   resize(100,100);
@@ -219,31 +221,35 @@ void GenerationGUI_RevolDlg::SelectionIntoArgument()
   SALOME_ListIO aSelList;
   aSelMgr->selectedObjects(aSelList);
 
-  if (aSelList.Extent() != 1)
+  if (aSelList.Extent() < 1)
     return;
 
-  // nbSel == 1
-  Standard_Boolean testResult = Standard_False;
-  GEOM::GEOM_Object_ptr aSelectedObject = GEOMBase::ConvertIOinGEOMObject(aSelList.First(), testResult);
+  GEOM::GEOM_Object_ptr aSelectedObject = GEOMBase::ConvertIOinGEOMObject( aSelList.First() );
+  QString aName = GEOMBase::GetName(aSelectedObject);
 
-  if (!testResult || aSelectedObject->_is_nil())
+  if ( aSelectedObject->_is_nil() )
     return;
 
   TopoDS_Shape S;
   if (!GEOMBase::GetShape(aSelectedObject, S) || S.IsNull())
     return;
 
-  QString aName = GEOMBase::GetName(aSelectedObject);
-
   if (myEditCurrentArgument == GroupPoints->LineEdit1) {
-    if (!isAcceptableBase(S))
-      return;
-
-    myBase = aSelectedObject;
-    myOkBase = true;
-    myEditCurrentArgument->setText(aName);
-    if (!myOkAxis)
-      GroupPoints->PushButton2->click();
+    myOkBase = false;
+    if (aSelList.Extent() > 1)
+      aName = QString( "%1_objects").arg( aSelList.Extent() );
+
+    if ( aSelList.Extent() > 0 ) {
+      GEOMBase::ConvertListOfIOInListOfGO(aSelList, myBaseObjects, true);
+      // check base shapes
+      for (int i=0; i < myBaseObjects.length(); i++) {
+        GEOMBase::GetShape(myBaseObjects[i], S);
+        if (!isAcceptableBase(S))
+          return;
+      }
+      myEditCurrentArgument->setText( aName );
+      myOkBase = true;
+    }
   }
   else if (myEditCurrentArgument == GroupPoints->LineEdit2) {
     TColStd_IndexedMapOfInteger aMap;
@@ -255,18 +261,16 @@ void GenerationGUI_RevolDlg::SelectionIntoArgument()
       //Find SubShape Object in Father
       GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
 
-      if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+      if (aFindedObject->_is_nil()) { // Object not found in study
         GEOM::GEOM_IShapesOperations_var aShapesOp =
           getGeomEngine()->GetIShapesOperations(getStudyId());
         myAxis = aShapesOp->GetSubShape(aSelectedObject, anIndex);
         myOkAxis = true;
-      }
-      else {
+      } else {
         myAxis = aFindedObject;
         myOkAxis = true;
       }
-    }
-    else {
+    } else {
       myOkAxis = true;
       if (S.ShapeType() != TopAbs_EDGE) {
         aSelectedObject = GEOM::GEOM_Object::_nil();
@@ -280,12 +284,6 @@ void GenerationGUI_RevolDlg::SelectionIntoArgument()
       GroupPoints->PushButton1->click();
   }
 
-  // clear selection
-  disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
-  myGeomGUI->getApp()->selectionMgr()->clearSelected();
-  connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
-          this, SLOT(SelectionIntoArgument()));
-
   displayPreview();
 }
 
@@ -403,26 +401,25 @@ bool GenerationGUI_RevolDlg::isValid (QString& msg)
 //=================================================================================
 bool GenerationGUI_RevolDlg::execute (ObjectList& objects)
 {
-  GEOM::GEOM_Object_var anObj;
-
+  GEOM::GEOM_Object_var anObj, aBase;
   GEOM::GEOM_I3DPrimOperations_var anOper = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation());
 
-  if (!myBothway) {
-    anObj = anOper->MakeRevolutionAxisAngle(myBase, myAxis, getAngle() * PI180);
-  }
-  else {
-    anObj = anOper->MakeRevolutionAxisAngle2Ways(myBase, myAxis, getAngle() * PI180);
-  }
-
-  if (!anObj->_is_nil())
-  {
-    if (!IsPreview())
-    {
-      QStringList aParameters;
-      aParameters << GroupPoints->SpinBox_DX->text();
-      anObj->SetParameters(aParameters.join(":").toLatin1().constData());
+  for (int i=0; i < myBaseObjects.length(); i++) {
+    aBase = myBaseObjects[i];
+
+    if (!myBothway)
+      anObj = anOper->MakeRevolutionAxisAngle(aBase, myAxis, getAngle() * PI180);
+    else
+      anObj = anOper->MakeRevolutionAxisAngle2Ways(aBase, myAxis, getAngle() * PI180);
+    
+    if (!anObj->_is_nil()) {
+      if (!IsPreview()) {
+        QStringList aParameters;
+        aParameters << GroupPoints->SpinBox_DX->text();
+        anObj->SetParameters(aParameters.join(":").toLatin1().constData());
+      }
+      objects.push_back(anObj._retn());
     }
-    objects.push_back(anObj._retn());
   }
 
   return true;
@@ -462,3 +459,12 @@ void GenerationGUI_RevolDlg::addSubshapesToStudy()
 
   addSubshapesToFather(objMap);
 }
+
+//=================================================================================
+// function : extractPrefix
+// purpose  : redefined from GEOMBase_Helper class
+//=================================================================================
+bool GenerationGUI_RevolDlg::extractPrefix() const
+{
+  return myBaseObjects.length() > 1;
+}