]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
The building of path for Graphics view corrected (Bug #139).
authoradv <adv@opencascade.com>
Tue, 3 Dec 2013 08:34:42 +0000 (08:34 +0000)
committeradv <adv@opencascade.com>
Tue, 3 Dec 2013 08:34:42 +0000 (08:34 +0000)
src/HYDROData/HYDROData_BSplineOperation.cxx
src/HYDROData/HYDROData_BSplineOperation.h
src/HYDROData/HYDROData_PolylineXY.cxx
src/HYDROData/HYDROData_PolylineXY.h
src/HYDROData/test_HYDROData_BSplineOperation.cxx

index 128f4aec593a9fe7f293f13afe2af93464f503ef..293dbd442b6c6032e802982bbf1b17e46f87ffca 100644 (file)
@@ -30,32 +30,31 @@ HYDROData_BSplineOperation::HYDROData_BSplineOperation(
     myCurve = aGBC.Curve();
 }
 
-QPainterPath HYDROData_BSplineOperation::ComputePath() const
+void HYDROData_BSplineOperation::ComputePath( QPainterPath& thePath ) const
 {
-  QPainterPath aResult;
   if ( myCurve.IsNull() ) // returns an empty Path if original curve is invalid
-    return aResult;
+    return;
 
   GeomConvert_BSplineCurveToBezierCurve aConverter(myCurve);
   int a, aNumArcs = aConverter.NbArcs();
-  for(a = 1; a <= aNumArcs; a++) {
+  for(a = 1; a <= aNumArcs; a++)
+  {
     Handle(Geom_BezierCurve) anArc = aConverter.Arc(a);
     if (a == 1) { // set a start point
       gp_Pnt aStart = anArc->StartPoint();
-      aResult.moveTo(aStart.X(), aStart.Y());
+      thePath.moveTo(aStart.X(), aStart.Y());
     }
     gp_Pnt anEnd = anArc->EndPoint();
     if (anArc->NbPoles() == 3) { // quadric segment in the path (pole 1 is start, pole 3 is end)
       gp_Pnt aPole = anArc->Pole(2);
-      aResult.quadTo(aPole.X(), aPole.Y(), anEnd.X(), anEnd.Y());
+      thePath.quadTo(aPole.X(), aPole.Y(), anEnd.X(), anEnd.Y());
     } else if (anArc->NbPoles() == 4) { // cubic segment (usually this is used)
       gp_Pnt aPole1 = anArc->Pole(2);
       gp_Pnt aPole2 = anArc->Pole(3);
-      aResult.cubicTo(
+      thePath.cubicTo(
         aPole1.X(), aPole1.Y(), aPole2.X(), aPole2.Y(), anEnd.X(), anEnd.Y());
     } else { // error, another number of poles is not supported
-      return QPainterPath();
+      continue;
     }
   }
-  return aResult;
 }
index 6c91bf864bc0a74e9b20c90b4ee6e718e1bc727d..640f85bce001fe1809884191a7aadece7b7c8849 100644 (file)
@@ -35,7 +35,7 @@ public:
   
   //! Performs conversion from BSpline curve to QPainterPath made from Bezier curves
   //! \returns computed PainterPath, not stored in this class, so calling of this method is not fast
-  QPainterPath ComputePath() const;
+  void ComputePath( QPainterPath& thePath ) const;
 
 private:
   Handle(Geom_BSplineCurve) myCurve; ///< resulting BSpline, null if something is wrong
index 0d79dd238678eeb86abac756dc34ea566189eda2..b20f1bd8717e1fce598ba5a731723a7ba67f1342 100755 (executable)
@@ -158,35 +158,34 @@ TopoDS_Wire HYDROData_PolylineXY::BuildWire( const SectionType&
   return aWire;
 }
 
-QPainterPath HYDROData_PolylineXY::BuildPainterPath( const SectionType&                  theType,
-                                                     const bool&                         theIsClosed,
-                                                     const NCollection_Sequence<gp_XYZ>& thePoints )
+void HYDROData_PolylineXY::BuildPainterPath( QPainterPath&                       thePath,
+                                             const SectionType&                  theType,
+                                             const bool&                         theIsClosed,
+                                             const NCollection_Sequence<gp_XYZ>& thePoints )
 {
-  QPainterPath aPath;
   if ( thePoints.IsEmpty() )
-    return aPath;
+    return;
 
   if ( theType == SECTION_POLYLINE )
   {
-    aPath.moveTo( thePoints.Value( 1 ).X(), thePoints.Value( 1 ).Y() );
+    const gp_XYZ& aFirstPoint = thePoints.Value( 1 );
+    thePath.moveTo( aFirstPoint.X(), aFirstPoint.Y() );
 
     for( int i = 2, n = thePoints.Size(); i <= n; ++i )
     {
       const gp_XYZ& aSectPoint = thePoints.Value( i );
 
-      aPath.lineTo( aSectPoint.X(), aSectPoint.Y() );
+      thePath.lineTo( aSectPoint.X(), aSectPoint.Y() );
     }
 
     if( theIsClosed )
-      aPath.closeSubpath();
+      thePath.closeSubpath();
   }
   else
   {
     HYDROData_BSplineOperation aBSpline( thePoints, theIsClosed );
-    aPath = aBSpline.ComputePath();
+    aBSpline.ComputePath( thePath );
   }
-
-  return aPath;
 }
 
 void HYDROData_PolylineXY::Update()
@@ -741,29 +740,30 @@ QPainterPath HYDROData_PolylineXY::GetPainterPath() const
   NCollection_Sequence<HYDROData_PolylineXY::SectionType> aSectTypes;
   NCollection_Sequence<bool>                              aSectClosures;
   GetSections( aSectNames, aSectTypes, aSectClosures );
-  if( aSectNames.IsEmpty() )
-    return aPath;
 
-  PointsList aSectPointsList = GetPoints( 0 );
-  if( aSectPointsList.IsEmpty() )
-    return aPath;
+  for ( int aSectionId = 1, aNbSects = aSectNames.Size(); aSectionId <= aNbSects; aSectionId++ )
+  {
+    TCollection_AsciiString aSectName = aSectNames.Value( aSectionId );
+    SectionType aSectionType = aSectTypes.Value( aSectionId );
+    bool anIsSectionClosed = aSectClosures.Value( aSectionId );
+
+    PointsList aSectPointsList = GetPoints( aSectionId - 1 );
+    if ( aSectPointsList.IsEmpty() )
+      continue;
 
-  SectionType aSectionType = aSectTypes.Value( 1 );
-  bool anIsSectionClosed = aSectClosures.Value( 1 );
+    NCollection_Sequence<gp_XYZ> aPoints;
+    for( int i = 1, n = aSectPointsList.Size(); i <= n; ++i )
+    {
+      const Point& aSectPoint = aSectPointsList.Value( i );
 
-  NCollection_Sequence<gp_XYZ> aPoints;
-  for( int i = 1, n = aSectPointsList.Size(); i <= n; ++i )
-  {
-    const Point& aSectPoint = aSectPointsList.Value( i );
+      gp_XYZ aPoint( aSectPoint.X(), aSectPoint.Y(), 0.0 );
+      aPoints.Append( aPoint );
+    }
 
-    gp_XYZ aPoint( aSectPoint.X(), aSectPoint.Y(), 0.0 );
-    aPoints.Append( aPoint );
+    BuildPainterPath( aPath, aSectionType, anIsSectionClosed, aPoints );
   }
 
-  aPath = BuildPainterPath( aSectionType, anIsSectionClosed, aPoints );
-
   return aPath;
-
 }
 
 
index 45ea7459654e8800e7663b331f880341c2389481..5ce65a94cb72fa52920917ca99db967fb3b65191 100644 (file)
@@ -57,9 +57,10 @@ public:
   /**
    * Returns the presentation of polyline section in Qt maner.
    */
-  HYDRODATA_EXPORT static QPainterPath BuildPainterPath( const SectionType&                  theType,
-                                                         const bool&                         theIsClosed,
-                                                         const NCollection_Sequence<gp_XYZ>& thePoints );
+  HYDRODATA_EXPORT static void BuildPainterPath( QPainterPath&                       thePath,
+                                                 const SectionType&                  theType,
+                                                 const bool&                         theIsClosed,
+                                                 const NCollection_Sequence<gp_XYZ>& thePoints );
 
 public:
 
index f5310176fb5bfbf9d1a1a895e71f6e809f0d821a..10dbb4360a160fea17f45cd0363d728edc268d8f 100644 (file)
@@ -48,7 +48,8 @@ void test_HYDROData_BSplineOperation::testPath()
 
   CPPUNIT_ASSERT( !aBSpline.Curve().IsNull() );
 
-  QPainterPath aPath = aBSpline.ComputePath();
+  QPainterPath aPath;
+  aBSpline.ComputePath( aPath );
   CPPUNIT_ASSERT( !aPath.isEmpty() );
   
   /*