Salome HOME
another z layer for hilight presentation
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Profile.cxx
index 28cccbe9418ad7daa39ef004b29a149ae7a10a29..bcfc8fb0f816e884bc5ab8e63daa6fd24a4b7228 100644 (file)
@@ -71,19 +71,19 @@ bool CurveCreator_Profile::clearInternal()
     myDisplayer->eraseAll( true );
 
   // Delete all allocated data.
-  mySections[ 0 ]->myPoints.clear();
+  CurveCreator_Section* aSection = getSection( 0 );
+  if ( aSection )
+    aSection->myPoints.clear();
 
   return true;
 }
 
-bool CurveCreator_Profile::joinInternal( const int theISectionTo, 
-                                         const int theISectionFrom )
+bool CurveCreator_Profile::joinInternal( const std::list<int>& theSections )
 {
   return false;
 }
 
-bool CurveCreator_Profile::join( const int theISectionTo, 
-                                 const int theISectionFrom )
+bool CurveCreator_Profile::join( const std::list<int>& theSections )
 {
   return false;
 }
@@ -133,23 +133,11 @@ bool CurveCreator_Profile::setClosed( const int theISection,
   return false;
 }
 
-bool CurveCreator_Profile::setSectionTypeInternal( const int theISection, 
-                                                   const CurveCreator::SectionType theType )
-{
-  return CurveCreator_Curve::setSectionTypeInternal( theISection, theType );
-}
-
-bool CurveCreator_Profile::setSectionType( const int theISection, 
-                                           const CurveCreator::SectionType theType )
-{
-  return CurveCreator_Curve::setSectionType( theISection, theType );
-}
-
 bool CurveCreator_Profile::addPointsInternal( const CurveCreator::SectionsMap &theSectionsMap )
 {
   bool res = false;
 
-  CurveCreator_Section* aSection = mySections.at( 0 );
+  CurveCreator_Section* aSection = getSection( 0 );
   if( !aSection )
     return res;
 
@@ -179,7 +167,7 @@ bool CurveCreator_Profile::addPointsInternal( const CurveCreator::SectionsMap &t
         if ( !aSection->myPoints.empty() )
           aC = *(aSection->myPoints.end() - 2);
 
-        if ( aSection->myPoints.empty() || aCoordU > aC )
+        if ( aSection->myPoints.empty() || aCoordU >= aC )
         {
           aSection->myPoints.push_back( aCoordU );
           aSection->myPoints.push_back( aCoordZ );
@@ -223,7 +211,7 @@ bool CurveCreator_Profile::setPointInternal( const CurveCreator::SectionsMap &th
   }
 
   int anISection = 0;
-  CurveCreator_Section* aSection = mySections.at( anISection );
+  CurveCreator_Section* aSection = getSection( anISection );
   if( !aSection )
     return aRes;
 
@@ -261,4 +249,32 @@ void CurveCreator_Profile::convert( const CurveCreator::PosPointsList& thePoints
 bool CurveCreator_Profile::canPointsBeSorted()
 {
   return true;
+}
+
+/**
+ *  Add one point to the specified section starting from the given theIPnt index
+ *  (or at the end of points if \a theIPnt is -1).
+ */
+bool CurveCreator_Profile::addPoints( const CurveCreator::Coordinates& theCoords,
+                                      const int theISection,
+                                      const int theIPnt )
+{
+  int anIPnt = theIPnt;
+
+  if ( anIPnt == - 1 && theCoords.size() > 1 ) {
+    CurveCreator::Coordinates aCoords;
+    for ( int i = 0, aNb = getNbPoints( theISection ); i < aNb; i++ ) {
+      aCoords = getPoint( theISection, i );
+      if ( aCoords.size() < 2 ) {
+        continue;
+      }
+
+      if ( theCoords[0] < aCoords[0] ) {
+        anIPnt = i;
+        break;
+      }
+    }
+  }
+  
+  return CurveCreator_Curve::addPoints( theCoords, theISection, anIPnt );
 }
\ No newline at end of file