-#include<HYDROData_BSplineOperation.h>
-#include<TColgp_HArray1OfPnt.hxx>
-#include<GeomAPI_Interpolate.hxx>
-#include<GeomConvert_BSplineCurveToBezierCurve.hxx>
-#include<Geom_BezierCurve.hxx>
+#include <HYDROData_BSplineOperation.h>
+
+#include <TColgp_HArray1OfPnt.hxx>
+
+#include <GeomAPI_Interpolate.hxx>
+#include <GeomConvert_BSplineCurveToBezierCurve.hxx>
+#include <Geom_BezierCurve.hxx>
+
+#include <QPainterPath>
HYDROData_BSplineOperation::HYDROData_BSplineOperation(
- const QList<double>& thePoints,
- const double theZValue,
- const bool theIsClosed)
+ const NCollection_Sequence<gp_XYZ>& thePoints,
+ const bool theIsClosed )
{
// fill array for algorithm by the received coordinates
- int aLen = thePoints.size() / 2;
- Handle(TColgp_HArray1OfPnt) aHCurvePoints = new TColgp_HArray1OfPnt (1, aLen);
- QList<double>::const_iterator aListIter = thePoints.begin();
- for (int ind = 1; ind <= aLen; ind++) {
- gp_Pnt aPnt(gp::Origin());
- aPnt.SetX(*aListIter);
- aListIter++;
- aPnt.SetY(*aListIter);
- aListIter++;
- aPnt.SetZ(theZValue);
- aHCurvePoints->SetValue(ind, aPnt);
+ int aNbPoints = thePoints.Size();
+
+ Handle(TColgp_HArray1OfPnt) aHCurvePoints = new TColgp_HArray1OfPnt( 1, aNbPoints );
+ for ( int i = 1; i <= aNbPoints; i++ )
+ {
+ gp_Pnt aPnt( thePoints.Value( i ) );
+ aHCurvePoints->SetValue( i, aPnt );
}
+
// compute BSpline
- GeomAPI_Interpolate aGBC(aHCurvePoints, theIsClosed, gp::Resolution());
+ GeomAPI_Interpolate aGBC( aHCurvePoints, theIsClosed, gp::Resolution() );
aGBC.Perform();
- if (aGBC.IsDone()) {
+ if ( aGBC.IsDone() )
myCurve = aGBC.Curve();
- }
}
QPainterPath HYDROData_BSplineOperation::ComputePath() const
{
QPainterPath aResult;
- if (myCurve.IsNull()) // returns an empty Path if original curve is invalid
+ if ( myCurve.IsNull() ) // returns an empty Path if original curve is invalid
return aResult;
+
GeomConvert_BSplineCurveToBezierCurve aConverter(myCurve);
int a, aNumArcs = aConverter.NbArcs();
for(a = 1; a <= aNumArcs; a++) {