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;
}