#include <gp_Pnt.hxx>
#include <QTransform>
+const double LOCAL_SELECTION_TOLERANCE = 0.0001;
+
void test_HYDROData_BSplineOperation::testCurve()
{
// prepare points: function of sin(x)
- QList<double> aPoints;
- double x;
- for(x = 0; x < 6.28; x += 0.1)
- aPoints<<x<<sin(x);
+ NCollection_Sequence<gp_XYZ> aPoints;
+ for ( double x = 0; x < 6.28; x += 0.1 )
+ {
+ gp_XYZ aPoint( x, sin( x ), 0.0 );
+ aPoints.Append( aPoint );
+ }
// compute BSpline
- HYDROData_BSplineOperation aBSpline(aPoints, 0, false);
+ HYDROData_BSplineOperation aBSpline( aPoints, false, LOCAL_SELECTION_TOLERANCE );
+
Handle(Geom_BSplineCurve) aBS = aBSpline.Curve();
- CPPUNIT_ASSERT(!aBS.IsNull());
- CPPUNIT_ASSERT(!aBS->IsClosed());
- CPPUNIT_ASSERT_EQUAL(aBS->Continuity(), GeomAbs_C2);
+ CPPUNIT_ASSERT( !aBS.IsNull() );
+ CPPUNIT_ASSERT( !aBS->IsClosed() );
+ CPPUNIT_ASSERT_EQUAL( aBS->Continuity(), GeomAbs_C2 );
+
// check that values of BSpline are not far from original "sin" function
// in all points of the curve
- for(x = 0; x < 6.29; x += 0.001) {
- double aDiff = aBS->Value(x).Y() - sin(aBS->Value(x).X());
- if (aDiff < 0) aDiff = -aDiff;
- CPPUNIT_ASSERT(aDiff < 3.e-6); // this number is found manually
+ for ( double x = 0; x < 6.29; x += 0.001 )
+ {
+ double aDiff = aBS->Value( x ).Y() - sin( aBS->Value( x ).X() );
+ if ( aDiff < 0 ) aDiff = -aDiff;
+ CPPUNIT_ASSERT( aDiff < 3.e-6 ); // this number is found manually
}
}
{
// prepare points: function of sin(x)
static const double aScale = 10000000.;
- QList<double> aPoints;
- double x;
- for(x = 0; x < 6.28; x += 0.1)
- aPoints<<x*aScale<<sin(x) * aScale;
+
+ NCollection_Sequence<gp_XYZ> aPoints;
+ for ( double x = 0; x < 6.28; x += 0.1 )
+ {
+ gp_XYZ aPoint( x * aScale, sin( x ) * aScale, 0.0 );
+ aPoints.Append( aPoint );
+ }
+
// convert to QPainterPath
- HYDROData_BSplineOperation aBSpline(aPoints, 0, false);
- CPPUNIT_ASSERT(!aBSpline.Curve().IsNull());
- QPainterPath aPath = aBSpline.ComputePath();
- CPPUNIT_ASSERT(!aPath.isEmpty());
+ HYDROData_BSplineOperation aBSpline( aPoints, false, LOCAL_SELECTION_TOLERANCE );
+
+ CPPUNIT_ASSERT( !aBSpline.Curve().IsNull() );
+
+ QPainterPath aPath;
+ aBSpline.ComputePath( aPath );
+ CPPUNIT_ASSERT( !aPath.isEmpty() );
/*
QImage aPic(1300, 600, QImage::Format_RGB32);
// check that values of Path are not far from original "sin" function
// in all points of the curve
- QList<QPolygonF> aPolyF = aPath.toSubpathPolygons(QTransform());
+ QList<QPolygonF> aPolyF = aPath.toSubpathPolygons( QTransform() );
QList<QPolygonF>::iterator aFIter = aPolyF.begin();
for(; aFIter != aPolyF.end();aFIter++) {
QPolygon aPoly = aFIter->toPolygon();