Salome HOME
Merge from V7_3_BR branch 18/12/2013
[modules/geom.git] / src / TransformationGUI / TransformationGUI_MultiTranslationDlg.cxx
index 286e2dc00b9b51b8734c2c33ab755a86d98bedd3..1cb934f8ad0d5b80e8b504e668adaabcc8b21a14 100644 (file)
@@ -239,15 +239,21 @@ void TransformationGUI_MultiTranslationDlg::ConstructorsClicked (int constructor
       GroupDimensions->hide();
       GroupPoints->show();
 
-      GroupPoints->LineEdit1->setText("");
-      GroupPoints->LineEdit2->setText("");
-      myBase.nullify();
-      myVectorU.nullify();
+      //GroupPoints->LineEdit1->setText("");
+      //GroupPoints->LineEdit2->setText("");
+      //myBase.nullify();
+      //myVectorU.nullify();
+
+      if ( myBase ) GroupDimensions->LineEdit1->setText( GEOMBase::GetName( myBase.get() ) );
+      if ( myVectorU ) GroupDimensions->LineEdit2->setText( GEOMBase::GetName( myVectorU.get() ) );
 
       GroupPoints->SpinBox_DX->setValue(myStepU);
       GroupPoints->SpinBox_DY->setValue(myNbTimesU);
 
-      GroupPoints->PushButton1->click();
+      if ( !myBase )
+       GroupPoints->PushButton1->click();
+      else if ( !myVectorU )
+       GroupPoints->PushButton2->click();
       break;
     }
   case 1: // Translate double
@@ -255,19 +261,28 @@ void TransformationGUI_MultiTranslationDlg::ConstructorsClicked (int constructor
       GroupPoints->hide();
       GroupDimensions->show();
 
-      GroupDimensions->LineEdit1->setText("");
-      GroupDimensions->LineEdit2->setText("");
-      GroupDimensions->LineEdit3->setText("");
-      myBase.nullify();
-      myVectorU.nullify();
-      myVectorV.nullify();
+      //GroupDimensions->LineEdit1->setText("");
+      //GroupDimensions->LineEdit2->setText("");
+      //GroupDimensions->LineEdit3->setText("");
+      //myBase.nullify();
+      //myVectorU.nullify();
+      //myVectorV.nullify();
+
+      if ( myBase ) GroupDimensions->LineEdit1->setText( GEOMBase::GetName( myBase.get() ) );
+      if ( myVectorU ) GroupDimensions->LineEdit2->setText( GEOMBase::GetName( myVectorU.get() ) );
+      if ( myVectorV ) GroupDimensions->LineEdit3->setText( GEOMBase::GetName( myVectorV.get() ) );
 
       GroupDimensions->SpinBox_DX1->setValue(myStepU);
       GroupDimensions->SpinBox_DY1->setValue(myNbTimesU);
       GroupDimensions->SpinBox_DX2->setValue(myStepV);
       GroupDimensions->SpinBox_DY2->setValue(myNbTimesV);
 
-      GroupDimensions->PushButton1->click();
+      if ( !myBase )
+       GroupDimensions->PushButton1->click();
+      else if ( !myVectorU )
+       GroupDimensions->PushButton2->click();
+      else if ( !myVectorV )
+       GroupDimensions->PushButton3->click();
       break;
     }
   }
@@ -329,7 +344,7 @@ void TransformationGUI_MultiTranslationDlg::SelectionIntoArgument()
     QString aName = GEOMBase::GetName( aSelectedObject.get() );
     myEditCurrentArgument->setText( aName );
 
-    if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) {
+    if ( myEditCurrentArgument == GroupPoints->LineEdit1 || myEditCurrentArgument == GroupDimensions->LineEdit1 ) {
       myBase = aSelectedObject;
 
       // recompute myStepU (Mantis issue 0021718)
@@ -338,36 +353,26 @@ void TransformationGUI_MultiTranslationDlg::SelectionIntoArgument()
       anOper->GetBoundingBox(myBase.get(), true, Xmin, Xmax, Ymin, Ymax, Zmin, Zmax);
       if (anOper->IsDone()) {
         myStepU = floor(1.5 * (Xmax - Xmin));
+        myStepV = floor(1.5 * (Ymax - Ymin));
         GroupPoints->SpinBox_DX->setValue(myStepU);
+        GroupDimensions->SpinBox_DX1->setValue(myStepU);
+        GroupDimensions->SpinBox_DX2->setValue(myStepV);
       }
 
-      if (!myVectorU)
+      if ( myEditCurrentArgument == GroupPoints->LineEdit1 && !myVectorU )
         GroupPoints->PushButton2->click();
+      if ( myEditCurrentArgument == GroupDimensions->LineEdit1 ) {
+       if ( !myVectorU )
+         GroupDimensions->PushButton2->click();
+       else if ( !myVectorV )
+         GroupDimensions->PushButton3->click();
+      }
     }
     else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) {
       myVectorU = aSelectedObject;
       if ( !myBase )
         GroupPoints->PushButton1->click();
     }
-    else if ( myEditCurrentArgument == GroupDimensions->LineEdit1 ) {
-      myBase = aSelectedObject;
-
-      // recompute myStepU and myStepV (Mantis issue 0021718)
-      GEOM::GEOM_IMeasureOperations_var anOper = getGeomEngine()->GetIMeasureOperations(getStudyId());
-      double Xmin, Xmax, Ymin, Ymax, Zmin, Zmax;
-      anOper->GetBoundingBox(myBase.get(), true, Xmin, Xmax, Ymin, Ymax, Zmin, Zmax);
-      if (anOper->IsDone()) {
-        myStepU = floor(1.5 * (Xmax - Xmin));
-        myStepV = floor(1.5 * (Ymax - Ymin));
-        GroupDimensions->SpinBox_DX1->setValue(myStepU);
-        GroupDimensions->SpinBox_DX2->setValue(myStepV);
-      }
-
-      if ( !myVectorU )
-        GroupDimensions->PushButton2->click();
-      else if ( !myVectorV )
-        GroupDimensions->PushButton3->click();
-    }
     else if ( myEditCurrentArgument == GroupDimensions->LineEdit2 ) {
       myVectorU = aSelectedObject;
       if ( !myVectorV )
@@ -384,10 +389,10 @@ void TransformationGUI_MultiTranslationDlg::SelectionIntoArgument()
     }
 
     // clear selection
-    disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
-    myGeomGUI->getApp()->selectionMgr()->clearSelected();
-    connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
-            this, SLOT(SelectionIntoArgument()));
+    // disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
+    // myGeomGUI->getApp()->selectionMgr()->clearSelected();
+    // connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+    //         this, SLOT(SelectionIntoArgument()));
   }
   else {
     if ( myEditCurrentArgument == GroupPoints->LineEdit1 ||
@@ -668,8 +673,8 @@ bool TransformationGUI_MultiTranslationDlg::execute (ObjectList& objects)
     createPathPreview(myVectorU.get());
     createPathPreview(myVectorV.get());
     anObj = anOper->MultiTranslate2D(myBase.get(),
-                                     myVectorU.get(), myStepU, myNbTimesU,
-                                     myVectorV.get(), myStepV, myNbTimesV);
+                                    myVectorU.get(), myStepU, myNbTimesU,
+                                    myVectorV.get(), myStepV, myNbTimesV);
     if (!IsPreview()) {
       aParameters << GroupDimensions->SpinBox_DX1->text();
       aParameters << GroupDimensions->SpinBox_DY1->text();
@@ -743,10 +748,11 @@ void TransformationGUI_MultiTranslationDlg::createPathPreview ( GEOM::GEOM_Objec
     ShapeAnalysis_Edge aShapeAnal;
     TopoDS_Vertex aFirst = aShapeAnal.FirstVertex( anEdge );
     TopoDS_Vertex aLast = aShapeAnal.LastVertex( anEdge );
+    if ( BRep_Tool::Pnt(aFirst).IsEqual( BRep_Tool::Pnt(aLast), Precision::Confusion() ) ) return;
     TopoDS_Shape aVector = BRepBuilderAPI_MakeEdge(BRep_Tool::Pnt(aFirst), BRep_Tool::Pnt(aLast)).Shape();
     const char* aName = "tmpVector";
     Handle(GEOM_AISVector) anIO = new GEOM_AISVector( aVector, aName );
-
+    
     // add Prs to preview
     SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
     SOCC_Prs* aPrs = dynamic_cast<SOCC_Prs*>(((SOCC_Viewer*)(vw->getViewManager()->getViewModel()))->CreatePrs(0));