Salome HOME
A fix for a refs #266 - Point insertion in a polyline with type spline
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Widget.cxx
index 42bbaf6cc909fe516c7a3a812c1ba1fa7df01f37..dc2aff372fe74bc9bd5d2cb5350693d558321b81 100644 (file)
@@ -665,13 +665,26 @@ void CurveCreator_Widget::onJoin()
   }
   stopActionMode();
 
-  int aMainSect = aSections[0];
-  int aMainSectSize = myCurve->getNbPoints(aMainSect);
-  for( int i = 1 ; i < aSections.size() ; i++ ){
-    int aSectNum = aSections[i] - (i-1);
-    myCurve->join( aMainSect, aSectNum );
-    mySectionView->sectionsRemoved( aSectNum );
+  std::list<int> aSectionsToJoin;
+  for( int i = 0; i < aSections.size() ; i++ ){
+    aSectionsToJoin.push_back( aSections[i] );
+  }
+  //int aMainSect = aSectionsToJoin.front();
+  //int aMainSectSize = myCurve->getNbPoints(aMainSect);
+  if ( myCurve->join( aSectionsToJoin ) )
+  {
+    std::list<int>::const_iterator anIt = aSectionsToJoin.begin(),
+                                   aLast = aSectionsToJoin.end();
+    // the first section should be skipped. It is not removed, but is modified
+    anIt++;
+    for ( ; anIt != aLast; anIt++ )
+      mySectionView->sectionsRemoved( *anIt );
   }
+
+  /* The update for the points of the main section
+  int aNewSectSize = myCurve->getNbPoints(aMainSect);
+  if( aNewSectSize != aMainSectSize )
+    mySectionView->pointsAdded( aMainSect, aMainSectSize, aNewSectSize-aMainSectSize );*/
   updateUndoRedo();
 }
 
@@ -708,7 +721,13 @@ void CurveCreator_Widget::onJoinAll()
   if( !myCurve )
     return;
   stopActionMode();
-  myCurve->join( 0, myCurve->getNbSections()-1 );
+
+  std::list<int> aSectionsToJoin;
+  for( int i = 0, aNb = myCurve->getNbSections(); i < aNb ; i++ ){
+    aSectionsToJoin.push_back( i );
+  }
+  bool aRes = myCurve->join( aSectionsToJoin );
+
   mySectionView->reset();
   updateActionsStates();
   updateUndoRedo();
@@ -1032,6 +1051,7 @@ void CurveCreator_Widget::onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEven
 
   // updates the input panel table to show the selected point coordinates
   updateLocalPointView();
+  updateUndoRedo();
 }
 
 /**
@@ -1145,6 +1165,7 @@ void CurveCreator_Widget::addNewPoint(const CurveCreator::Coordinates& theCoords
   }
   int aSection = aSections[0];
   myCurve->addPoints(theCoords, aSection); // add to the end of section
+  mySectionView->pointsAdded( aSection, myCurve->getNbPoints( aSection ) );
   updateActionsStates();
   updateUndoRedo();
 }
@@ -1183,6 +1204,7 @@ void CurveCreator_Widget::insertPointToSelectedSegment( const int theX,
   CurveCreator_ICurve::SectionToPointList::const_iterator anIt = aPoints1.begin(),
                                                           aLast = aPoints1.end();
   int aSectionId = -1;
+  // find the indices of the neighbour point
   // there can be a case when a new point is added into two sections
   int aPoint1Id = -1, aPoint2Id = -1;
   for ( ; anIt != aLast && aSectionId < 0; anIt++ ) {
@@ -1207,6 +1229,7 @@ void CurveCreator_Widget::insertPointToSelectedSegment( const int theX,
     anInsertPos = aPoint1Id < aPoint2Id ? aPoint1Id + 1 : aPoint2Id + 1;
 
   myCurve->addPoints( aCoords, aSectionId, anInsertPos );
+  mySectionView->pointsAdded( aSectionId, myCurve->getNbPoints( aSectionId ) );
 
   finishCurveModification( aSelPoints );