Salome HOME
Double editor in table
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Curve.cxx
index a07b1316bc2513426da5b0d1869e00d70e07daf5..824338b29055919aa2f048b9efc3a97e2ef0724e 100644 (file)
@@ -525,12 +525,15 @@ bool CurveCreator_Curve::join( const int theISectionTo,
                                const int theISectionFrom )
 {
   bool res = false;
-  if (theISectionTo != theISectionFrom) {
+  if (mySections.size() >= 2 && 
+    ( theISectionTo != theISectionFrom || (theISectionTo == -1 && theISectionFrom == -1) )) {
     startOperation();
+    int aISectionTo = getNbSections()-1;
+    int aISectionFrom = 0;
     if (addEmptyDiff())
-      myListDiffs.back().init(this, CurveCreator_Operation::Join, theISectionTo, theISectionFrom);
+      myListDiffs.back().init(this, CurveCreator_Operation::Join, aISectionTo, aISectionFrom);
 
-    res = joinInternal( theISectionTo, theISectionFrom );
+    res = joinInternal( aISectionTo, aISectionFrom );
 
     finishOperation();
   }
@@ -874,7 +877,8 @@ bool CurveCreator_Curve::setPointInternal( const CurveCreator::SectionsMap &theS
       for( ; aPntIt != aSectionPoints.end(); aPntIt++ ){
         int anIPnt = (*aPntIt)->myID;
         CurveCreator::Coordinates aCoords = (*aPntIt)->myCoords;
-        aSection->myPoints.assign(aCoords.begin(), aCoords.end());
+        for ( int i = 0; i < myDimension; i++)
+          aSection->myPoints.at(toICoord(anIPnt) + i) = aCoords[i];
       }
       res = true;
     }
@@ -905,7 +909,10 @@ bool CurveCreator_Curve::setPoint( const int theISection,
   aPoints.push_back( aPosPoint );
   aSectionsMap[theISection] = aPoints;
 
+  int aSize1 = getNbPoints( theISection );
   res = setPointInternal( aSectionsMap );
+  int aSize2 = getNbPoints( theISection );
+
   finishOperation();
 
   return res; 
@@ -914,7 +921,35 @@ bool CurveCreator_Curve::setPoint( const int theISection,
 //! Set coordinates of specified points from different sections
 bool CurveCreator_Curve::setSeveralPoints( const SectionToPointCoordsList &theSectionToPntCoords)
 {
-  return false;
+  bool res = false;
+  // Set the difference.
+  startOperation();
+  if (addEmptyDiff()) {
+    myListDiffs.back().init(this, CurveCreator_Operation::SetCoordinates,
+                            theSectionToPntCoords);
+  }
+  CurveCreator::SectionsMap aSectionsMap;
+  CurveCreator::PosPointsList aPosPoints;
+  CurveCreator_ICurve::SectionToPointCoordsList::const_iterator anIt = 
+    theSectionToPntCoords.begin(), aLast = theSectionToPntCoords.end();
+  int aSectionId, aPointId;
+  for ( ; anIt != aLast; anIt++ ) {
+    aPosPoints.clear();
+    aSectionId = anIt->first.first;
+    aPointId = anIt->first.second;
+    CurveCreator::Coordinates aNewCoords = anIt->second;
+    CurveCreator_PosPoint* aPosPoint = 
+      new CurveCreator_PosPoint( aPointId, aNewCoords );
+    if( aSectionsMap.find(aSectionId) != aSectionsMap.end() )
+      aPosPoints = aSectionsMap[aSectionId];
+    aPosPoints.push_back( aPosPoint );
+    aSectionsMap[aSectionId] = aPosPoints;
+    
+  }
+  res = setPointInternal( aSectionsMap );
+  finishOperation();
+
+  return res; 
 }
 
 //! For internal use only! Undo/Redo are not used here.