]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
refs #1331: first implementation of the new sorting for profiles
authorasl <asl@opencascade.com>
Fri, 22 Sep 2017 06:34:59 +0000 (09:34 +0300)
committerasl <asl@opencascade.com>
Fri, 22 Sep 2017 06:34:59 +0000 (09:34 +0300)
src/HYDROGUI/HYDROGUI_CurveCreatorProfile.cxx
src/HYDROGUI/HYDROGUI_CurveCreatorProfile.h
src/HYDROGUI/HYDROGUI_PolylineOp.cxx
src/HYDROGUI/HYDROGUI_ProfileOp.cxx

index 072567cfc67edd471c99f5c822fa7949fa4dcae9..8ea0425935f15f77409397104cffd02be36995eb 100644 (file)
@@ -19,6 +19,7 @@
 #include <HYDROGUI_CurveCreatorProfile.h>
 #include <CurveCreator_Displayer.hxx>
 #include <CurveCreator_Section.hxx>
+#include <QVector>
 
 HYDROGUI_CurveCreatorProfile::HYDROGUI_CurveCreatorProfile()
 : CurveCreator_Curve( CurveCreator::Dim2d )
@@ -29,6 +30,7 @@ HYDROGUI_CurveCreatorProfile::HYDROGUI_CurveCreatorProfile()
   aSection->myIsClosed = false;
 
   mySections.push_back( aSection );
+  mySkipSorting = true;
 }
 
 HYDROGUI_CurveCreatorProfile::~HYDROGUI_CurveCreatorProfile()
@@ -229,7 +231,7 @@ void HYDROGUI_CurveCreatorProfile::convert( const CurveCreator::PosPointsList& t
 
 bool HYDROGUI_CurveCreatorProfile::canPointsBeSorted()
 {
-  return true;
+  return false;
 }
 
 /**
@@ -259,3 +261,26 @@ bool HYDROGUI_CurveCreatorProfile::addPoints( const CurveCreator::Coordinates& t
   
   return CurveCreator_Curve::addPoints( theCoords, theISection, anIPnt );
 }
+
+bool ULess( const gp_Pnt& p1, const gp_Pnt& p2 )
+{
+  return p1.X() < p2.X();
+}
+
+Handle(TColgp_HArray1OfPnt) HYDROGUI_CurveCreatorProfile::GetDifferentPoints( int theISection ) const
+{
+  Handle(TColgp_HArray1OfPnt) points = CurveCreator_Curve::GetDifferentPoints( theISection );
+  if( points.IsNull() )
+    return points;
+
+  QVector<gp_Pnt> vpoints( points->Size() );
+  for( int i=points->Lower(), j=0, n=points->Upper(); i<=n; i++, j++ )
+    vpoints[j] = points->Value( i );
+
+  qSort( vpoints.begin(), vpoints.end(), ULess );
+
+  for( int i=points->Lower(), j=0, n=points->Upper(); i<=n; i++, j++ )
+    points->SetValue( i, vpoints[j] );
+
+  return points;
+}
index c70dd7f03386422b83dc478fd23d001d6addf2ce..58fd7152b30bba1cb11090d165af2c56b365b45c 100644 (file)
@@ -121,6 +121,8 @@ public:
    */
   virtual bool canPointsBeSorted();
 
+  virtual Handle(TColgp_HArray1OfPnt) GetDifferentPoints( int theISection = -1 ) const;
+
 protected:
   /**
    * Converts the list of custom point position objects into a list of point indices
index da94fccf784b8a0d0807626a8d326dd573904f61..a59af02da79c5366e2075e689443812b797250a9 100755 (executable)
@@ -353,8 +353,8 @@ bool HYDROGUI_PolylineOp::processApply( int& theUpdateFlags,
 
     aPolylineObj->AddSection( aSectName, aSectType, aSectClosure );
 
-    // Add the points fro section
-    CurveCreator::Coordinates aCurveCoords = myCurve->getPoints( i );
+    // Add the points from section
+    CurveCreator::Coordinates aCurveCoords = myCurve->getCoords( i );
 
     if ( aCurveCoords.size() <= 2 )
     {
index ab8f669b1de4579113c5cdbc1b4e589003b7d793..732637ac6fff4743b91d5caf9b0efed484960130 100644 (file)
@@ -202,20 +202,19 @@ bool HYDROGUI_ProfileOp::processApply( int& theUpdateFlags,
 
   HYDROData_ProfileUZ::PointsList aProfileParamPoints;
 
-  CurveCreator::Coordinates aCurveCoords = myProfile->getPoints( 0 );
-  if ( aCurveCoords.size() <= 2 )
+  Handle(TColgp_HArray1OfPnt) aCurveCoords = myProfile->GetDifferentPoints( 0 );
+  if ( aCurveCoords.IsNull() || aCurveCoords->Size() <= 2 )
   {
     theErrorMsg = tr( "NUMBER_OF_PROFILE_POINTS_INCORRECT" );
     return false;
   }
 
-  for ( int k = 0 ; k + 1 < aCurveCoords.size() ; k++ )
+  for ( int k = aCurveCoords->Lower(); k <= aCurveCoords->Upper() ; k++ )
   {
     HYDROData_ProfileUZ::Point aProfileParamPoint;
 
-    aProfileParamPoint.SetX( aCurveCoords.at( k ) );
-    k++;
-    aProfileParamPoint.SetY( aCurveCoords.at( k ) );
+    aProfileParamPoint.SetX( aCurveCoords->Value( k ).X() );
+    aProfileParamPoint.SetY( aCurveCoords->Value( k ).Y() );
 
     aProfileParamPoints.Append( aProfileParamPoint );
   }