From 79b53a9c6ca22835d37deae4b335af63071c5c28 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@Germany>
Date: Fri, 4 Dec 2009 12:54:15 +0100
Subject: [PATCH] rename BSplineTest to splineTest and add Catmull-Rom to it

- the current B-Splines deliver rubbish
---
 applications/test/BSpline/Make/files          |  3 -
 applications/test/spline/Make/files           |  3 +
 .../test/{BSpline => spline}/Make/options     |  0
 .../BSplineTest.C => spline/splineTest.C}     | 68 ++++++++++++++++---
 .../test/{BSpline => spline}/test-splines     |  0
 5 files changed, 63 insertions(+), 11 deletions(-)
 delete mode 100644 applications/test/BSpline/Make/files
 create mode 100644 applications/test/spline/Make/files
 rename applications/test/{BSpline => spline}/Make/options (100%)
 rename applications/test/{BSpline/BSplineTest.C => spline/splineTest.C} (50%)
 rename applications/test/{BSpline => spline}/test-splines (100%)

diff --git a/applications/test/BSpline/Make/files b/applications/test/BSpline/Make/files
deleted file mode 100644
index be66810067f..00000000000
--- a/applications/test/BSpline/Make/files
+++ /dev/null
@@ -1,3 +0,0 @@
-BSplineTest.C
-
-EXE = $(FOAM_USER_APPBIN)/BSplineTest
diff --git a/applications/test/spline/Make/files b/applications/test/spline/Make/files
new file mode 100644
index 00000000000..68f1cca9942
--- /dev/null
+++ b/applications/test/spline/Make/files
@@ -0,0 +1,3 @@
+splineTest.C
+
+EXE = $(FOAM_USER_APPBIN)/splineTest
diff --git a/applications/test/BSpline/Make/options b/applications/test/spline/Make/options
similarity index 100%
rename from applications/test/BSpline/Make/options
rename to applications/test/spline/Make/options
diff --git a/applications/test/BSpline/BSplineTest.C b/applications/test/spline/splineTest.C
similarity index 50%
rename from applications/test/BSpline/BSplineTest.C
rename to applications/test/spline/splineTest.C
index 91f3efad238..c4c8f1434db 100644
--- a/applications/test/BSpline/BSplineTest.C
+++ b/applications/test/spline/splineTest.C
@@ -28,6 +28,7 @@ License
 #include "vector.H"
 #include "IFstream.H"
 #include "BSpline.H"
+#include "CatmullRomSpline.H"
 
 using namespace Foam;
 
@@ -38,28 +39,79 @@ int main(int argc, char *argv[])
 {
     argList::noParallel();
     argList::validArgs.insert("file .. fileN");
+    argList::addBoolOption("B", "B-Spline");
+    argList::addBoolOption("cmr", "catmull-rom spline (default)");
+    argList::addOption
+    (
+        "n",
+        "INT",
+        "number of segments for evaluation - default 20"
+    );
 
     argList args(argc, argv, false, true);
 
+    if (args.additionalArgs().empty())
+    {
+        args.printUsage();
+    }
+
+    bool useBSpline    = args.optionFound("B");
+    bool useCatmullRom = args.optionFound("cmr");
+    label nSeg = args.optionLookupOrDefault<label>("n", 20);
+
+    if (!useBSpline && !useCatmullRom)
+    {
+        Info<<"defaulting to Catmull-Rom spline" << endl;
+        useCatmullRom = true;
+    }
+
     forAll(args.additionalArgs(), argI)
     {
         const string& srcFile = args.additionalArgs()[argI];
         Info<< nl << "reading " << srcFile << nl;
         IFstream ifs(srcFile);
 
-        List<pointField> splinePointFields(ifs);
+        List<pointField> pointFields(ifs);
 
-        forAll(splinePointFields, splineI)
+        forAll(pointFields, splineI)
         {
-            Info<<"convert " << splinePointFields[splineI] << " to bspline" << endl;
-
-            BSpline spl(splinePointFields[splineI], vector::zero, vector::zero);
-
-            Info<< "1/2 = " << spl.position(0.5) << endl;
+            Info<<"\noriginal points: " << pointFields[splineI] << nl;
+
+            if (useBSpline)
+            {
+                BSpline spl(pointFields[splineI], vector::zero, vector::zero);
+
+                Info<< nl
+                    << "B-Spline interpolation:" << nl
+                    << "----------------------" << endl;
+
+                for (label segI = 0; segI <= nSeg; ++segI)
+                {
+                    scalar lambda = scalar(segI)/scalar(nSeg);
+                    Info<< spl.position(lambda) << "    // " << lambda << endl;
+                }
+            }
+
+            if (useCatmullRom)
+            {
+                CatmullRomSpline spl
+                (
+                    pointFields[splineI]
+                );
+
+                Info<< nl
+                    <<"Catmull-Rom interpolation:" << nl
+                    << "-------------------------" << endl;
+
+                for (label segI = 0; segI <= nSeg; ++segI)
+                {
+                    scalar lambda = scalar(segI)/scalar(nSeg);
+                    Info<< spl.position(lambda) << "    // " << lambda << endl;
+                }
+            }
         }
     }
 
-
     return 0;
 }
 
diff --git a/applications/test/BSpline/test-splines b/applications/test/spline/test-splines
similarity index 100%
rename from applications/test/BSpline/test-splines
rename to applications/test/spline/test-splines
-- 
GitLab