diff --git a/cpp/splinepy/explicit/CMakeLists.txt b/cpp/splinepy/explicit/CMakeLists.txt index 0fa5f3a69..a96292bf2 100644 --- a/cpp/splinepy/explicit/CMakeLists.txt +++ b/cpp/splinepy/explicit/CMakeLists.txt @@ -1,26 +1,6 @@ set(SPLINELIB_SOURCES - splinelib/b_spline_explicit1.cpp - splinelib/b_spline_explicit2.cpp - splinelib/b_spline_explicit3.cpp - splinelib/nurbs_explicit1.cpp - splinelib/nurbs_explicit2.cpp - splinelib/nurbs_explicit3.cpp -) -set(SPLINELIB_MORE_SOURCES - splinelib/b_spline_explicit4.cpp - splinelib/b_spline_explicit5.cpp - splinelib/b_spline_explicit6.cpp - splinelib/b_spline_explicit7.cpp - splinelib/b_spline_explicit8.cpp - splinelib/b_spline_explicit9.cpp - splinelib/b_spline_explicit10.cpp - splinelib/nurbs_explicit4.cpp - splinelib/nurbs_explicit5.cpp - splinelib/nurbs_explicit6.cpp - splinelib/nurbs_explicit7.cpp - splinelib/nurbs_explicit8.cpp - splinelib/nurbs_explicit9.cpp - splinelib/nurbs_explicit10.cpp + splinelib/b_spline_explicit.cpp + splinelib/nurbs_explicit.cpp ) set(BEZMAN_SOURCES @@ -55,12 +35,8 @@ set(SPLINEPY_SOURCES splinepy/rational_bezier_explicit1.cpp splinepy/rational_bezier_explicit2.cpp splinepy/rational_bezier_explicit3.cpp - splinepy/bspline_explicit1.cpp - splinepy/bspline_explicit2.cpp - splinepy/bspline_explicit3.cpp - splinepy/nurbs_explicit1.cpp - splinepy/nurbs_explicit2.cpp - splinepy/nurbs_explicit3.cpp + splinepy/bspline_explicit.cpp + splinepy/nurbs_explicit.cpp ) set(SPLINEPY_MORE_SOURCES splinepy/bezier_explicit4.cpp @@ -77,20 +53,6 @@ set(SPLINEPY_MORE_SOURCES splinepy/rational_bezier_explicit8.cpp splinepy/rational_bezier_explicit9.cpp splinepy/rational_bezier_explicit10.cpp - splinepy/bspline_explicit4.cpp - splinepy/bspline_explicit5.cpp - splinepy/bspline_explicit6.cpp - splinepy/bspline_explicit7.cpp - splinepy/bspline_explicit8.cpp - splinepy/bspline_explicit9.cpp - splinepy/bspline_explicit10.cpp - splinepy/nurbs_explicit4.cpp - splinepy/nurbs_explicit5.cpp - splinepy/nurbs_explicit6.cpp - splinepy/nurbs_explicit7.cpp - splinepy/nurbs_explicit8.cpp - splinepy/nurbs_explicit9.cpp - splinepy/nurbs_explicit10.cpp ) set(EXPLICIT_SOURCES diff --git a/cpp/splinepy/explicit/splinelib/b_spline_explicit.cpp b/cpp/splinepy/explicit/splinelib/b_spline_explicit.cpp new file mode 100644 index 000000000..b7f965c37 --- /dev/null +++ b/cpp/splinepy/explicit/splinelib/b_spline_explicit.cpp @@ -0,0 +1,13 @@ +#include "BSplineLib/Splines/b_spline.hpp" +template class bsplinelib::splines::BSpline<1>; +template class bsplinelib::splines::BSpline<2>; +template class bsplinelib::splines::BSpline<3>; +#ifdef SPLINEPY_MORE +template class bsplinelib::splines::BSpline<4>; +template class bsplinelib::splines::BSpline<5>; +template class bsplinelib::splines::BSpline<6>; +template class bsplinelib::splines::BSpline<7>; +template class bsplinelib::splines::BSpline<8>; +template class bsplinelib::splines::BSpline<9>; +template class bsplinelib::splines::BSpline<10>; +#endif diff --git a/cpp/splinepy/explicit/splinelib/b_spline_explicit1.cpp b/cpp/splinepy/explicit/splinelib/b_spline_explicit1.cpp deleted file mode 100644 index 8771ab041..000000000 --- a/cpp/splinepy/explicit/splinelib/b_spline_explicit1.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/b_spline.hpp" -template class bsplinelib::splines::BSpline<1, 1>; -template class bsplinelib::splines::BSpline<1, 2>; -template class bsplinelib::splines::BSpline<1, 3>; -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::BSpline<1, 4>; -template class bsplinelib::splines::BSpline<1, 5>; -template class bsplinelib::splines::BSpline<1, 6>; -template class bsplinelib::splines::BSpline<1, 7>; -template class bsplinelib::splines::BSpline<1, 8>; -template class bsplinelib::splines::BSpline<1, 9>; -template class bsplinelib::splines::BSpline<1, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/b_spline_explicit10.cpp b/cpp/splinepy/explicit/splinelib/b_spline_explicit10.cpp deleted file mode 100644 index 95d913d6a..000000000 --- a/cpp/splinepy/explicit/splinelib/b_spline_explicit10.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/b_spline.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::BSpline<10, 1>; -template class bsplinelib::splines::BSpline<10, 2>; -template class bsplinelib::splines::BSpline<10, 3>; -template class bsplinelib::splines::BSpline<10, 4>; -template class bsplinelib::splines::BSpline<10, 5>; -template class bsplinelib::splines::BSpline<10, 6>; -template class bsplinelib::splines::BSpline<10, 7>; -template class bsplinelib::splines::BSpline<10, 8>; -template class bsplinelib::splines::BSpline<10, 9>; -template class bsplinelib::splines::BSpline<10, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/b_spline_explicit2.cpp b/cpp/splinepy/explicit/splinelib/b_spline_explicit2.cpp deleted file mode 100644 index b82ccb285..000000000 --- a/cpp/splinepy/explicit/splinelib/b_spline_explicit2.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/b_spline.hpp" -template class bsplinelib::splines::BSpline<2, 1>; -template class bsplinelib::splines::BSpline<2, 2>; -template class bsplinelib::splines::BSpline<2, 3>; -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::BSpline<2, 4>; -template class bsplinelib::splines::BSpline<2, 5>; -template class bsplinelib::splines::BSpline<2, 6>; -template class bsplinelib::splines::BSpline<2, 7>; -template class bsplinelib::splines::BSpline<2, 8>; -template class bsplinelib::splines::BSpline<2, 9>; -template class bsplinelib::splines::BSpline<2, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/b_spline_explicit3.cpp b/cpp/splinepy/explicit/splinelib/b_spline_explicit3.cpp deleted file mode 100644 index 6801e1165..000000000 --- a/cpp/splinepy/explicit/splinelib/b_spline_explicit3.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/b_spline.hpp" -template class bsplinelib::splines::BSpline<3, 1>; -template class bsplinelib::splines::BSpline<3, 2>; -template class bsplinelib::splines::BSpline<3, 3>; -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::BSpline<3, 4>; -template class bsplinelib::splines::BSpline<3, 5>; -template class bsplinelib::splines::BSpline<3, 6>; -template class bsplinelib::splines::BSpline<3, 7>; -template class bsplinelib::splines::BSpline<3, 8>; -template class bsplinelib::splines::BSpline<3, 9>; -template class bsplinelib::splines::BSpline<3, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/b_spline_explicit4.cpp b/cpp/splinepy/explicit/splinelib/b_spline_explicit4.cpp deleted file mode 100644 index 4526b8059..000000000 --- a/cpp/splinepy/explicit/splinelib/b_spline_explicit4.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/b_spline.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::BSpline<4, 1>; -template class bsplinelib::splines::BSpline<4, 2>; -template class bsplinelib::splines::BSpline<4, 3>; -template class bsplinelib::splines::BSpline<4, 4>; -template class bsplinelib::splines::BSpline<4, 5>; -template class bsplinelib::splines::BSpline<4, 6>; -template class bsplinelib::splines::BSpline<4, 7>; -template class bsplinelib::splines::BSpline<4, 8>; -template class bsplinelib::splines::BSpline<4, 9>; -template class bsplinelib::splines::BSpline<4, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/b_spline_explicit5.cpp b/cpp/splinepy/explicit/splinelib/b_spline_explicit5.cpp deleted file mode 100644 index 83336bb6c..000000000 --- a/cpp/splinepy/explicit/splinelib/b_spline_explicit5.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/b_spline.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::BSpline<5, 1>; -template class bsplinelib::splines::BSpline<5, 2>; -template class bsplinelib::splines::BSpline<5, 3>; -template class bsplinelib::splines::BSpline<5, 4>; -template class bsplinelib::splines::BSpline<5, 5>; -template class bsplinelib::splines::BSpline<5, 6>; -template class bsplinelib::splines::BSpline<5, 7>; -template class bsplinelib::splines::BSpline<5, 8>; -template class bsplinelib::splines::BSpline<5, 9>; -template class bsplinelib::splines::BSpline<5, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/b_spline_explicit6.cpp b/cpp/splinepy/explicit/splinelib/b_spline_explicit6.cpp deleted file mode 100644 index aab02b9a0..000000000 --- a/cpp/splinepy/explicit/splinelib/b_spline_explicit6.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/b_spline.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::BSpline<6, 1>; -template class bsplinelib::splines::BSpline<6, 2>; -template class bsplinelib::splines::BSpline<6, 3>; -template class bsplinelib::splines::BSpline<6, 4>; -template class bsplinelib::splines::BSpline<6, 5>; -template class bsplinelib::splines::BSpline<6, 6>; -template class bsplinelib::splines::BSpline<6, 7>; -template class bsplinelib::splines::BSpline<6, 8>; -template class bsplinelib::splines::BSpline<6, 9>; -template class bsplinelib::splines::BSpline<6, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/b_spline_explicit7.cpp b/cpp/splinepy/explicit/splinelib/b_spline_explicit7.cpp deleted file mode 100644 index a2c58e9fe..000000000 --- a/cpp/splinepy/explicit/splinelib/b_spline_explicit7.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/b_spline.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::BSpline<7, 1>; -template class bsplinelib::splines::BSpline<7, 2>; -template class bsplinelib::splines::BSpline<7, 3>; -template class bsplinelib::splines::BSpline<7, 4>; -template class bsplinelib::splines::BSpline<7, 5>; -template class bsplinelib::splines::BSpline<7, 6>; -template class bsplinelib::splines::BSpline<7, 7>; -template class bsplinelib::splines::BSpline<7, 8>; -template class bsplinelib::splines::BSpline<7, 9>; -template class bsplinelib::splines::BSpline<7, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/b_spline_explicit8.cpp b/cpp/splinepy/explicit/splinelib/b_spline_explicit8.cpp deleted file mode 100644 index 94d98f235..000000000 --- a/cpp/splinepy/explicit/splinelib/b_spline_explicit8.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/b_spline.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::BSpline<8, 1>; -template class bsplinelib::splines::BSpline<8, 2>; -template class bsplinelib::splines::BSpline<8, 3>; -template class bsplinelib::splines::BSpline<8, 4>; -template class bsplinelib::splines::BSpline<8, 5>; -template class bsplinelib::splines::BSpline<8, 6>; -template class bsplinelib::splines::BSpline<8, 7>; -template class bsplinelib::splines::BSpline<8, 8>; -template class bsplinelib::splines::BSpline<8, 9>; -template class bsplinelib::splines::BSpline<8, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/b_spline_explicit9.cpp b/cpp/splinepy/explicit/splinelib/b_spline_explicit9.cpp deleted file mode 100644 index a44a242fc..000000000 --- a/cpp/splinepy/explicit/splinelib/b_spline_explicit9.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/b_spline.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::BSpline<9, 1>; -template class bsplinelib::splines::BSpline<9, 2>; -template class bsplinelib::splines::BSpline<9, 3>; -template class bsplinelib::splines::BSpline<9, 4>; -template class bsplinelib::splines::BSpline<9, 5>; -template class bsplinelib::splines::BSpline<9, 6>; -template class bsplinelib::splines::BSpline<9, 7>; -template class bsplinelib::splines::BSpline<9, 8>; -template class bsplinelib::splines::BSpline<9, 9>; -template class bsplinelib::splines::BSpline<9, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/b_spline_extern.hpp b/cpp/splinepy/explicit/splinelib/b_spline_extern.hpp index 79cbca213..f286e0c76 100644 --- a/cpp/splinepy/explicit/splinelib/b_spline_extern.hpp +++ b/cpp/splinepy/explicit/splinelib/b_spline_extern.hpp @@ -2,120 +2,17 @@ #include "BSplineLib/Splines/b_spline.hpp" #ifdef SPLINEPY_BUILD_EXPLICIT -extern template class bsplinelib::splines::BSpline<1, 1>; -extern template class bsplinelib::splines::BSpline<1, 2>; -extern template class bsplinelib::splines::BSpline<1, 3>; +extern template class bsplinelib::splines::BSpline<1>; +extern template class bsplinelib::splines::BSpline<2>; +extern template class bsplinelib::splines::BSpline<3>; #ifdef SPLINEPY_MORE -extern template class bsplinelib::splines::BSpline<1, 4>; -extern template class bsplinelib::splines::BSpline<1, 5>; -extern template class bsplinelib::splines::BSpline<1, 6>; -extern template class bsplinelib::splines::BSpline<1, 7>; -extern template class bsplinelib::splines::BSpline<1, 8>; -extern template class bsplinelib::splines::BSpline<1, 9>; -extern template class bsplinelib::splines::BSpline<1, 10>; -#endif - -extern template class bsplinelib::splines::BSpline<2, 1>; -extern template class bsplinelib::splines::BSpline<2, 2>; -extern template class bsplinelib::splines::BSpline<2, 3>; -#ifdef SPLINEPY_MORE -extern template class bsplinelib::splines::BSpline<2, 4>; -extern template class bsplinelib::splines::BSpline<2, 5>; -extern template class bsplinelib::splines::BSpline<2, 6>; -extern template class bsplinelib::splines::BSpline<2, 7>; -extern template class bsplinelib::splines::BSpline<2, 8>; -extern template class bsplinelib::splines::BSpline<2, 9>; -extern template class bsplinelib::splines::BSpline<2, 10>; -#endif - -extern template class bsplinelib::splines::BSpline<3, 1>; -extern template class bsplinelib::splines::BSpline<3, 2>; -extern template class bsplinelib::splines::BSpline<3, 3>; -#ifdef SPLINEPY_MORE -extern template class bsplinelib::splines::BSpline<3, 4>; -extern template class bsplinelib::splines::BSpline<3, 5>; -extern template class bsplinelib::splines::BSpline<3, 6>; -extern template class bsplinelib::splines::BSpline<3, 7>; -extern template class bsplinelib::splines::BSpline<3, 8>; -extern template class bsplinelib::splines::BSpline<3, 9>; -extern template class bsplinelib::splines::BSpline<3, 10>; - -extern template class bsplinelib::splines::BSpline<4, 1>; -extern template class bsplinelib::splines::BSpline<4, 2>; -extern template class bsplinelib::splines::BSpline<4, 3>; -extern template class bsplinelib::splines::BSpline<4, 4>; -extern template class bsplinelib::splines::BSpline<4, 5>; -extern template class bsplinelib::splines::BSpline<4, 6>; -extern template class bsplinelib::splines::BSpline<4, 7>; -extern template class bsplinelib::splines::BSpline<4, 8>; -extern template class bsplinelib::splines::BSpline<4, 9>; -extern template class bsplinelib::splines::BSpline<4, 10>; - -extern template class bsplinelib::splines::BSpline<5, 1>; -extern template class bsplinelib::splines::BSpline<5, 2>; -extern template class bsplinelib::splines::BSpline<5, 3>; -extern template class bsplinelib::splines::BSpline<5, 4>; -extern template class bsplinelib::splines::BSpline<5, 5>; -extern template class bsplinelib::splines::BSpline<5, 6>; -extern template class bsplinelib::splines::BSpline<5, 7>; -extern template class bsplinelib::splines::BSpline<5, 8>; -extern template class bsplinelib::splines::BSpline<5, 9>; -extern template class bsplinelib::splines::BSpline<5, 10>; - -extern template class bsplinelib::splines::BSpline<6, 1>; -extern template class bsplinelib::splines::BSpline<6, 2>; -extern template class bsplinelib::splines::BSpline<6, 3>; -extern template class bsplinelib::splines::BSpline<6, 4>; -extern template class bsplinelib::splines::BSpline<6, 5>; -extern template class bsplinelib::splines::BSpline<6, 6>; -extern template class bsplinelib::splines::BSpline<6, 7>; -extern template class bsplinelib::splines::BSpline<6, 8>; -extern template class bsplinelib::splines::BSpline<6, 9>; -extern template class bsplinelib::splines::BSpline<6, 10>; - -extern template class bsplinelib::splines::BSpline<7, 1>; -extern template class bsplinelib::splines::BSpline<7, 2>; -extern template class bsplinelib::splines::BSpline<7, 3>; -extern template class bsplinelib::splines::BSpline<7, 4>; -extern template class bsplinelib::splines::BSpline<7, 5>; -extern template class bsplinelib::splines::BSpline<7, 6>; -extern template class bsplinelib::splines::BSpline<7, 7>; -extern template class bsplinelib::splines::BSpline<7, 8>; -extern template class bsplinelib::splines::BSpline<7, 9>; -extern template class bsplinelib::splines::BSpline<7, 10>; - -extern template class bsplinelib::splines::BSpline<8, 1>; -extern template class bsplinelib::splines::BSpline<8, 2>; -extern template class bsplinelib::splines::BSpline<8, 3>; -extern template class bsplinelib::splines::BSpline<8, 4>; -extern template class bsplinelib::splines::BSpline<8, 5>; -extern template class bsplinelib::splines::BSpline<8, 6>; -extern template class bsplinelib::splines::BSpline<8, 7>; -extern template class bsplinelib::splines::BSpline<8, 8>; -extern template class bsplinelib::splines::BSpline<8, 9>; -extern template class bsplinelib::splines::BSpline<8, 10>; - -extern template class bsplinelib::splines::BSpline<9, 1>; -extern template class bsplinelib::splines::BSpline<9, 2>; -extern template class bsplinelib::splines::BSpline<9, 3>; -extern template class bsplinelib::splines::BSpline<9, 4>; -extern template class bsplinelib::splines::BSpline<9, 5>; -extern template class bsplinelib::splines::BSpline<9, 6>; -extern template class bsplinelib::splines::BSpline<9, 7>; -extern template class bsplinelib::splines::BSpline<9, 8>; -extern template class bsplinelib::splines::BSpline<9, 9>; -extern template class bsplinelib::splines::BSpline<9, 10>; - -extern template class bsplinelib::splines::BSpline<10, 1>; -extern template class bsplinelib::splines::BSpline<10, 2>; -extern template class bsplinelib::splines::BSpline<10, 3>; -extern template class bsplinelib::splines::BSpline<10, 4>; -extern template class bsplinelib::splines::BSpline<10, 5>; -extern template class bsplinelib::splines::BSpline<10, 6>; -extern template class bsplinelib::splines::BSpline<10, 7>; -extern template class bsplinelib::splines::BSpline<10, 8>; -extern template class bsplinelib::splines::BSpline<10, 9>; -extern template class bsplinelib::splines::BSpline<10, 10>; +extern template class bsplinelib::splines::BSpline<4>; +extern template class bsplinelib::splines::BSpline<5>; +extern template class bsplinelib::splines::BSpline<6>; +extern template class bsplinelib::splines::BSpline<7>; +extern template class bsplinelib::splines::BSpline<8>; +extern template class bsplinelib::splines::BSpline<9>; +extern template class bsplinelib::splines::BSpline<10>; #endif #endif diff --git a/cpp/splinepy/explicit/splinelib/nurbs_explicit.cpp b/cpp/splinepy/explicit/splinelib/nurbs_explicit.cpp new file mode 100644 index 000000000..26dcc8619 --- /dev/null +++ b/cpp/splinepy/explicit/splinelib/nurbs_explicit.cpp @@ -0,0 +1,13 @@ +#include "BSplineLib/Splines/nurbs.hpp" +template class bsplinelib::splines::Nurbs<1>; +template class bsplinelib::splines::Nurbs<2>; +template class bsplinelib::splines::Nurbs<3>; +#ifdef SPLINEPY_MORE +template class bsplinelib::splines::Nurbs<4>; +template class bsplinelib::splines::Nurbs<5>; +template class bsplinelib::splines::Nurbs<6>; +template class bsplinelib::splines::Nurbs<7>; +template class bsplinelib::splines::Nurbs<8>; +template class bsplinelib::splines::Nurbs<9>; +template class bsplinelib::splines::Nurbs<10>; +#endif diff --git a/cpp/splinepy/explicit/splinelib/nurbs_explicit1.cpp b/cpp/splinepy/explicit/splinelib/nurbs_explicit1.cpp deleted file mode 100644 index 940b46a77..000000000 --- a/cpp/splinepy/explicit/splinelib/nurbs_explicit1.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/nurbs.hpp" -template class bsplinelib::splines::Nurbs<1, 1>; -template class bsplinelib::splines::Nurbs<1, 2>; -template class bsplinelib::splines::Nurbs<1, 3>; -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::Nurbs<1, 4>; -template class bsplinelib::splines::Nurbs<1, 5>; -template class bsplinelib::splines::Nurbs<1, 6>; -template class bsplinelib::splines::Nurbs<1, 7>; -template class bsplinelib::splines::Nurbs<1, 8>; -template class bsplinelib::splines::Nurbs<1, 9>; -template class bsplinelib::splines::Nurbs<1, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/nurbs_explicit10.cpp b/cpp/splinepy/explicit/splinelib/nurbs_explicit10.cpp deleted file mode 100644 index 97d5ff750..000000000 --- a/cpp/splinepy/explicit/splinelib/nurbs_explicit10.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/nurbs.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::Nurbs<10, 1>; -template class bsplinelib::splines::Nurbs<10, 2>; -template class bsplinelib::splines::Nurbs<10, 3>; -template class bsplinelib::splines::Nurbs<10, 4>; -template class bsplinelib::splines::Nurbs<10, 5>; -template class bsplinelib::splines::Nurbs<10, 6>; -template class bsplinelib::splines::Nurbs<10, 7>; -template class bsplinelib::splines::Nurbs<10, 8>; -template class bsplinelib::splines::Nurbs<10, 9>; -template class bsplinelib::splines::Nurbs<10, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/nurbs_explicit2.cpp b/cpp/splinepy/explicit/splinelib/nurbs_explicit2.cpp deleted file mode 100644 index 1402bc40a..000000000 --- a/cpp/splinepy/explicit/splinelib/nurbs_explicit2.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/nurbs.hpp" -template class bsplinelib::splines::Nurbs<2, 1>; -template class bsplinelib::splines::Nurbs<2, 2>; -template class bsplinelib::splines::Nurbs<2, 3>; -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::Nurbs<2, 4>; -template class bsplinelib::splines::Nurbs<2, 5>; -template class bsplinelib::splines::Nurbs<2, 6>; -template class bsplinelib::splines::Nurbs<2, 7>; -template class bsplinelib::splines::Nurbs<2, 8>; -template class bsplinelib::splines::Nurbs<2, 9>; -template class bsplinelib::splines::Nurbs<2, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/nurbs_explicit3.cpp b/cpp/splinepy/explicit/splinelib/nurbs_explicit3.cpp deleted file mode 100644 index 570c6e184..000000000 --- a/cpp/splinepy/explicit/splinelib/nurbs_explicit3.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/nurbs.hpp" -template class bsplinelib::splines::Nurbs<3, 1>; -template class bsplinelib::splines::Nurbs<3, 2>; -template class bsplinelib::splines::Nurbs<3, 3>; -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::Nurbs<3, 4>; -template class bsplinelib::splines::Nurbs<3, 5>; -template class bsplinelib::splines::Nurbs<3, 6>; -template class bsplinelib::splines::Nurbs<3, 7>; -template class bsplinelib::splines::Nurbs<3, 8>; -template class bsplinelib::splines::Nurbs<3, 9>; -template class bsplinelib::splines::Nurbs<3, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/nurbs_explicit4.cpp b/cpp/splinepy/explicit/splinelib/nurbs_explicit4.cpp deleted file mode 100644 index 7a629d77b..000000000 --- a/cpp/splinepy/explicit/splinelib/nurbs_explicit4.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/nurbs.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::Nurbs<4, 1>; -template class bsplinelib::splines::Nurbs<4, 2>; -template class bsplinelib::splines::Nurbs<4, 3>; -template class bsplinelib::splines::Nurbs<4, 4>; -template class bsplinelib::splines::Nurbs<4, 5>; -template class bsplinelib::splines::Nurbs<4, 6>; -template class bsplinelib::splines::Nurbs<4, 7>; -template class bsplinelib::splines::Nurbs<4, 8>; -template class bsplinelib::splines::Nurbs<4, 9>; -template class bsplinelib::splines::Nurbs<4, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/nurbs_explicit5.cpp b/cpp/splinepy/explicit/splinelib/nurbs_explicit5.cpp deleted file mode 100644 index 059a2050e..000000000 --- a/cpp/splinepy/explicit/splinelib/nurbs_explicit5.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/nurbs.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::Nurbs<5, 1>; -template class bsplinelib::splines::Nurbs<5, 2>; -template class bsplinelib::splines::Nurbs<5, 3>; -template class bsplinelib::splines::Nurbs<5, 4>; -template class bsplinelib::splines::Nurbs<5, 5>; -template class bsplinelib::splines::Nurbs<5, 6>; -template class bsplinelib::splines::Nurbs<5, 7>; -template class bsplinelib::splines::Nurbs<5, 8>; -template class bsplinelib::splines::Nurbs<5, 9>; -template class bsplinelib::splines::Nurbs<5, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/nurbs_explicit6.cpp b/cpp/splinepy/explicit/splinelib/nurbs_explicit6.cpp deleted file mode 100644 index 56356418e..000000000 --- a/cpp/splinepy/explicit/splinelib/nurbs_explicit6.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/nurbs.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::Nurbs<6, 1>; -template class bsplinelib::splines::Nurbs<6, 2>; -template class bsplinelib::splines::Nurbs<6, 3>; -template class bsplinelib::splines::Nurbs<6, 4>; -template class bsplinelib::splines::Nurbs<6, 5>; -template class bsplinelib::splines::Nurbs<6, 6>; -template class bsplinelib::splines::Nurbs<6, 7>; -template class bsplinelib::splines::Nurbs<6, 8>; -template class bsplinelib::splines::Nurbs<6, 9>; -template class bsplinelib::splines::Nurbs<6, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/nurbs_explicit7.cpp b/cpp/splinepy/explicit/splinelib/nurbs_explicit7.cpp deleted file mode 100644 index 6efd1ccbc..000000000 --- a/cpp/splinepy/explicit/splinelib/nurbs_explicit7.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/nurbs.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::Nurbs<7, 1>; -template class bsplinelib::splines::Nurbs<7, 2>; -template class bsplinelib::splines::Nurbs<7, 3>; -template class bsplinelib::splines::Nurbs<7, 4>; -template class bsplinelib::splines::Nurbs<7, 5>; -template class bsplinelib::splines::Nurbs<7, 6>; -template class bsplinelib::splines::Nurbs<7, 7>; -template class bsplinelib::splines::Nurbs<7, 8>; -template class bsplinelib::splines::Nurbs<7, 9>; -template class bsplinelib::splines::Nurbs<7, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/nurbs_explicit8.cpp b/cpp/splinepy/explicit/splinelib/nurbs_explicit8.cpp deleted file mode 100644 index 845e666b1..000000000 --- a/cpp/splinepy/explicit/splinelib/nurbs_explicit8.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/nurbs.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::Nurbs<8, 1>; -template class bsplinelib::splines::Nurbs<8, 2>; -template class bsplinelib::splines::Nurbs<8, 3>; -template class bsplinelib::splines::Nurbs<8, 4>; -template class bsplinelib::splines::Nurbs<8, 5>; -template class bsplinelib::splines::Nurbs<8, 6>; -template class bsplinelib::splines::Nurbs<8, 7>; -template class bsplinelib::splines::Nurbs<8, 8>; -template class bsplinelib::splines::Nurbs<8, 9>; -template class bsplinelib::splines::Nurbs<8, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/nurbs_explicit9.cpp b/cpp/splinepy/explicit/splinelib/nurbs_explicit9.cpp deleted file mode 100644 index fd7f898c0..000000000 --- a/cpp/splinepy/explicit/splinelib/nurbs_explicit9.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BSplineLib/Splines/nurbs.hpp" -#ifdef SPLINEPY_MORE -template class bsplinelib::splines::Nurbs<9, 1>; -template class bsplinelib::splines::Nurbs<9, 2>; -template class bsplinelib::splines::Nurbs<9, 3>; -template class bsplinelib::splines::Nurbs<9, 4>; -template class bsplinelib::splines::Nurbs<9, 5>; -template class bsplinelib::splines::Nurbs<9, 6>; -template class bsplinelib::splines::Nurbs<9, 7>; -template class bsplinelib::splines::Nurbs<9, 8>; -template class bsplinelib::splines::Nurbs<9, 9>; -template class bsplinelib::splines::Nurbs<9, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinelib/nurbs_extern.hpp b/cpp/splinepy/explicit/splinelib/nurbs_extern.hpp index e80bcb895..d78e3e7e2 100644 --- a/cpp/splinepy/explicit/splinelib/nurbs_extern.hpp +++ b/cpp/splinepy/explicit/splinelib/nurbs_extern.hpp @@ -2,118 +2,17 @@ #include "BSplineLib/Splines/nurbs.hpp" #ifdef SPLINEPY_BUILD_EXPLICIT -extern template class bsplinelib::splines::Nurbs<1, 1>; -extern template class bsplinelib::splines::Nurbs<1, 2>; -extern template class bsplinelib::splines::Nurbs<1, 3>; +extern template class bsplinelib::splines::Nurbs<1>; +extern template class bsplinelib::splines::Nurbs<2>; +extern template class bsplinelib::splines::Nurbs<3>; #ifdef SPLINEPY_MORE -extern template class bsplinelib::splines::Nurbs<1, 4>; -extern template class bsplinelib::splines::Nurbs<1, 5>; -extern template class bsplinelib::splines::Nurbs<1, 6>; -extern template class bsplinelib::splines::Nurbs<1, 7>; -extern template class bsplinelib::splines::Nurbs<1, 8>; -extern template class bsplinelib::splines::Nurbs<1, 9>; -extern template class bsplinelib::splines::Nurbs<1, 10>; -#endif -extern template class bsplinelib::splines::Nurbs<2, 1>; -extern template class bsplinelib::splines::Nurbs<2, 2>; -extern template class bsplinelib::splines::Nurbs<2, 3>; -#ifdef SPLINEPY_MORE -extern template class bsplinelib::splines::Nurbs<2, 4>; -extern template class bsplinelib::splines::Nurbs<2, 5>; -extern template class bsplinelib::splines::Nurbs<2, 6>; -extern template class bsplinelib::splines::Nurbs<2, 7>; -extern template class bsplinelib::splines::Nurbs<2, 8>; -extern template class bsplinelib::splines::Nurbs<2, 9>; -extern template class bsplinelib::splines::Nurbs<2, 10>; -#endif -extern template class bsplinelib::splines::Nurbs<3, 1>; -extern template class bsplinelib::splines::Nurbs<3, 2>; -extern template class bsplinelib::splines::Nurbs<3, 3>; -#ifdef SPLINEPY_MORE -extern template class bsplinelib::splines::Nurbs<3, 4>; -extern template class bsplinelib::splines::Nurbs<3, 5>; -extern template class bsplinelib::splines::Nurbs<3, 6>; -extern template class bsplinelib::splines::Nurbs<3, 7>; -extern template class bsplinelib::splines::Nurbs<3, 8>; -extern template class bsplinelib::splines::Nurbs<3, 9>; -extern template class bsplinelib::splines::Nurbs<3, 10>; - -extern template class bsplinelib::splines::Nurbs<4, 1>; -extern template class bsplinelib::splines::Nurbs<4, 2>; -extern template class bsplinelib::splines::Nurbs<4, 3>; -extern template class bsplinelib::splines::Nurbs<4, 4>; -extern template class bsplinelib::splines::Nurbs<4, 5>; -extern template class bsplinelib::splines::Nurbs<4, 6>; -extern template class bsplinelib::splines::Nurbs<4, 7>; -extern template class bsplinelib::splines::Nurbs<4, 8>; -extern template class bsplinelib::splines::Nurbs<4, 9>; -extern template class bsplinelib::splines::Nurbs<4, 10>; - -extern template class bsplinelib::splines::Nurbs<5, 1>; -extern template class bsplinelib::splines::Nurbs<5, 2>; -extern template class bsplinelib::splines::Nurbs<5, 3>; -extern template class bsplinelib::splines::Nurbs<5, 4>; -extern template class bsplinelib::splines::Nurbs<5, 5>; -extern template class bsplinelib::splines::Nurbs<5, 6>; -extern template class bsplinelib::splines::Nurbs<5, 7>; -extern template class bsplinelib::splines::Nurbs<5, 8>; -extern template class bsplinelib::splines::Nurbs<5, 9>; -extern template class bsplinelib::splines::Nurbs<5, 10>; - -extern template class bsplinelib::splines::Nurbs<6, 1>; -extern template class bsplinelib::splines::Nurbs<6, 2>; -extern template class bsplinelib::splines::Nurbs<6, 3>; -extern template class bsplinelib::splines::Nurbs<6, 4>; -extern template class bsplinelib::splines::Nurbs<6, 5>; -extern template class bsplinelib::splines::Nurbs<6, 6>; -extern template class bsplinelib::splines::Nurbs<6, 7>; -extern template class bsplinelib::splines::Nurbs<6, 8>; -extern template class bsplinelib::splines::Nurbs<6, 9>; -extern template class bsplinelib::splines::Nurbs<6, 10>; - -extern template class bsplinelib::splines::Nurbs<7, 1>; -extern template class bsplinelib::splines::Nurbs<7, 2>; -extern template class bsplinelib::splines::Nurbs<7, 3>; -extern template class bsplinelib::splines::Nurbs<7, 4>; -extern template class bsplinelib::splines::Nurbs<7, 5>; -extern template class bsplinelib::splines::Nurbs<7, 6>; -extern template class bsplinelib::splines::Nurbs<7, 7>; -extern template class bsplinelib::splines::Nurbs<7, 8>; -extern template class bsplinelib::splines::Nurbs<7, 9>; -extern template class bsplinelib::splines::Nurbs<7, 10>; - -extern template class bsplinelib::splines::Nurbs<8, 1>; -extern template class bsplinelib::splines::Nurbs<8, 2>; -extern template class bsplinelib::splines::Nurbs<8, 3>; -extern template class bsplinelib::splines::Nurbs<8, 4>; -extern template class bsplinelib::splines::Nurbs<8, 5>; -extern template class bsplinelib::splines::Nurbs<8, 6>; -extern template class bsplinelib::splines::Nurbs<8, 7>; -extern template class bsplinelib::splines::Nurbs<8, 8>; -extern template class bsplinelib::splines::Nurbs<8, 9>; -extern template class bsplinelib::splines::Nurbs<8, 10>; - -extern template class bsplinelib::splines::Nurbs<9, 1>; -extern template class bsplinelib::splines::Nurbs<9, 2>; -extern template class bsplinelib::splines::Nurbs<9, 3>; -extern template class bsplinelib::splines::Nurbs<9, 4>; -extern template class bsplinelib::splines::Nurbs<9, 5>; -extern template class bsplinelib::splines::Nurbs<9, 6>; -extern template class bsplinelib::splines::Nurbs<9, 7>; -extern template class bsplinelib::splines::Nurbs<9, 8>; -extern template class bsplinelib::splines::Nurbs<9, 9>; -extern template class bsplinelib::splines::Nurbs<9, 10>; - -extern template class bsplinelib::splines::Nurbs<10, 1>; -extern template class bsplinelib::splines::Nurbs<10, 2>; -extern template class bsplinelib::splines::Nurbs<10, 3>; -extern template class bsplinelib::splines::Nurbs<10, 4>; -extern template class bsplinelib::splines::Nurbs<10, 5>; -extern template class bsplinelib::splines::Nurbs<10, 6>; -extern template class bsplinelib::splines::Nurbs<10, 7>; -extern template class bsplinelib::splines::Nurbs<10, 8>; -extern template class bsplinelib::splines::Nurbs<10, 9>; -extern template class bsplinelib::splines::Nurbs<10, 10>; +extern template class bsplinelib::splines::Nurbs<4>; +extern template class bsplinelib::splines::Nurbs<5>; +extern template class bsplinelib::splines::Nurbs<6>; +extern template class bsplinelib::splines::Nurbs<7>; +extern template class bsplinelib::splines::Nurbs<8>; +extern template class bsplinelib::splines::Nurbs<9>; +extern template class bsplinelib::splines::Nurbs<10>; #endif #endif diff --git a/cpp/splinepy/explicit/splinepy/bspline_explicit.cpp b/cpp/splinepy/explicit/splinepy/bspline_explicit.cpp new file mode 100644 index 000000000..b2a13b499 --- /dev/null +++ b/cpp/splinepy/explicit/splinepy/bspline_explicit.cpp @@ -0,0 +1,13 @@ +#include +template class splinepy::splines::BSpline<1>; +template class splinepy::splines::BSpline<2>; +template class splinepy::splines::BSpline<3>; +#ifdef SPLINEPY_MORE +template class splinepy::splines::BSpline<4>; +template class splinepy::splines::BSpline<5>; +template class splinepy::splines::BSpline<6>; +template class splinepy::splines::BSpline<7>; +template class splinepy::splines::BSpline<8>; +template class splinepy::splines::BSpline<9>; +template class splinepy::splines::BSpline<10>; +#endif diff --git a/cpp/splinepy/explicit/splinepy/bspline_explicit1.cpp b/cpp/splinepy/explicit/splinepy/bspline_explicit1.cpp deleted file mode 100644 index fae28cd51..000000000 --- a/cpp/splinepy/explicit/splinepy/bspline_explicit1.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -template class splinepy::splines::BSpline<1, 1>; -template class splinepy::splines::BSpline<1, 2>; -template class splinepy::splines::BSpline<1, 3>; -#ifdef SPLINEPY_MORE -template class splinepy::splines::BSpline<1, 4>; -template class splinepy::splines::BSpline<1, 5>; -template class splinepy::splines::BSpline<1, 6>; -template class splinepy::splines::BSpline<1, 7>; -template class splinepy::splines::BSpline<1, 8>; -template class splinepy::splines::BSpline<1, 9>; -template class splinepy::splines::BSpline<1, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/bspline_explicit10.cpp b/cpp/splinepy/explicit/splinepy/bspline_explicit10.cpp deleted file mode 100644 index fe7a3911a..000000000 --- a/cpp/splinepy/explicit/splinepy/bspline_explicit10.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::BSpline<10, 1>; -template class splinepy::splines::BSpline<10, 2>; -template class splinepy::splines::BSpline<10, 3>; -template class splinepy::splines::BSpline<10, 4>; -template class splinepy::splines::BSpline<10, 5>; -template class splinepy::splines::BSpline<10, 6>; -template class splinepy::splines::BSpline<10, 7>; -template class splinepy::splines::BSpline<10, 8>; -template class splinepy::splines::BSpline<10, 9>; -template class splinepy::splines::BSpline<10, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/bspline_explicit2.cpp b/cpp/splinepy/explicit/splinepy/bspline_explicit2.cpp deleted file mode 100644 index 7ac3ee3c3..000000000 --- a/cpp/splinepy/explicit/splinepy/bspline_explicit2.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -template class splinepy::splines::BSpline<2, 1>; -template class splinepy::splines::BSpline<2, 2>; -template class splinepy::splines::BSpline<2, 3>; -#ifdef SPLINEPY_MORE -template class splinepy::splines::BSpline<2, 4>; -template class splinepy::splines::BSpline<2, 5>; -template class splinepy::splines::BSpline<2, 6>; -template class splinepy::splines::BSpline<2, 7>; -template class splinepy::splines::BSpline<2, 8>; -template class splinepy::splines::BSpline<2, 9>; -template class splinepy::splines::BSpline<2, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/bspline_explicit3.cpp b/cpp/splinepy/explicit/splinepy/bspline_explicit3.cpp deleted file mode 100644 index 9c2447faa..000000000 --- a/cpp/splinepy/explicit/splinepy/bspline_explicit3.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -template class splinepy::splines::BSpline<3, 1>; -template class splinepy::splines::BSpline<3, 2>; -template class splinepy::splines::BSpline<3, 3>; -#ifdef SPLINEPY_MORE -template class splinepy::splines::BSpline<3, 4>; -template class splinepy::splines::BSpline<3, 5>; -template class splinepy::splines::BSpline<3, 6>; -template class splinepy::splines::BSpline<3, 7>; -template class splinepy::splines::BSpline<3, 8>; -template class splinepy::splines::BSpline<3, 9>; -template class splinepy::splines::BSpline<3, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/bspline_explicit4.cpp b/cpp/splinepy/explicit/splinepy/bspline_explicit4.cpp deleted file mode 100644 index 142070319..000000000 --- a/cpp/splinepy/explicit/splinepy/bspline_explicit4.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::BSpline<4, 1>; -template class splinepy::splines::BSpline<4, 2>; -template class splinepy::splines::BSpline<4, 3>; -template class splinepy::splines::BSpline<4, 4>; -template class splinepy::splines::BSpline<4, 5>; -template class splinepy::splines::BSpline<4, 6>; -template class splinepy::splines::BSpline<4, 7>; -template class splinepy::splines::BSpline<4, 8>; -template class splinepy::splines::BSpline<4, 9>; -template class splinepy::splines::BSpline<4, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/bspline_explicit5.cpp b/cpp/splinepy/explicit/splinepy/bspline_explicit5.cpp deleted file mode 100644 index c63698a00..000000000 --- a/cpp/splinepy/explicit/splinepy/bspline_explicit5.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::BSpline<5, 1>; -template class splinepy::splines::BSpline<5, 2>; -template class splinepy::splines::BSpline<5, 3>; -template class splinepy::splines::BSpline<5, 4>; -template class splinepy::splines::BSpline<5, 5>; -template class splinepy::splines::BSpline<5, 6>; -template class splinepy::splines::BSpline<5, 7>; -template class splinepy::splines::BSpline<5, 8>; -template class splinepy::splines::BSpline<5, 9>; -template class splinepy::splines::BSpline<5, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/bspline_explicit6.cpp b/cpp/splinepy/explicit/splinepy/bspline_explicit6.cpp deleted file mode 100644 index 958c23be0..000000000 --- a/cpp/splinepy/explicit/splinepy/bspline_explicit6.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::BSpline<6, 1>; -template class splinepy::splines::BSpline<6, 2>; -template class splinepy::splines::BSpline<6, 3>; -template class splinepy::splines::BSpline<6, 4>; -template class splinepy::splines::BSpline<6, 5>; -template class splinepy::splines::BSpline<6, 6>; -template class splinepy::splines::BSpline<6, 7>; -template class splinepy::splines::BSpline<6, 8>; -template class splinepy::splines::BSpline<6, 9>; -template class splinepy::splines::BSpline<6, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/bspline_explicit7.cpp b/cpp/splinepy/explicit/splinepy/bspline_explicit7.cpp deleted file mode 100644 index ad179e10f..000000000 --- a/cpp/splinepy/explicit/splinepy/bspline_explicit7.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::BSpline<7, 1>; -template class splinepy::splines::BSpline<7, 2>; -template class splinepy::splines::BSpline<7, 3>; -template class splinepy::splines::BSpline<7, 4>; -template class splinepy::splines::BSpline<7, 5>; -template class splinepy::splines::BSpline<7, 6>; -template class splinepy::splines::BSpline<7, 7>; -template class splinepy::splines::BSpline<7, 8>; -template class splinepy::splines::BSpline<7, 9>; -template class splinepy::splines::BSpline<7, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/bspline_explicit8.cpp b/cpp/splinepy/explicit/splinepy/bspline_explicit8.cpp deleted file mode 100644 index b41f60f4d..000000000 --- a/cpp/splinepy/explicit/splinepy/bspline_explicit8.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::BSpline<8, 1>; -template class splinepy::splines::BSpline<8, 2>; -template class splinepy::splines::BSpline<8, 3>; -template class splinepy::splines::BSpline<8, 4>; -template class splinepy::splines::BSpline<8, 5>; -template class splinepy::splines::BSpline<8, 6>; -template class splinepy::splines::BSpline<8, 7>; -template class splinepy::splines::BSpline<8, 8>; -template class splinepy::splines::BSpline<8, 9>; -template class splinepy::splines::BSpline<8, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/bspline_explicit9.cpp b/cpp/splinepy/explicit/splinepy/bspline_explicit9.cpp deleted file mode 100644 index 6935b3f47..000000000 --- a/cpp/splinepy/explicit/splinepy/bspline_explicit9.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::BSpline<9, 1>; -template class splinepy::splines::BSpline<9, 2>; -template class splinepy::splines::BSpline<9, 3>; -template class splinepy::splines::BSpline<9, 4>; -template class splinepy::splines::BSpline<9, 5>; -template class splinepy::splines::BSpline<9, 6>; -template class splinepy::splines::BSpline<9, 7>; -template class splinepy::splines::BSpline<9, 8>; -template class splinepy::splines::BSpline<9, 9>; -template class splinepy::splines::BSpline<9, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/bspline_extern.hpp b/cpp/splinepy/explicit/splinepy/bspline_extern.hpp index 373566e42..f1de250c7 100644 --- a/cpp/splinepy/explicit/splinepy/bspline_extern.hpp +++ b/cpp/splinepy/explicit/splinepy/bspline_extern.hpp @@ -2,117 +2,17 @@ #include #ifdef SPLINEPY_BUILD_EXPLICIT -extern template class splinepy::splines::BSpline<1, 1>; -extern template class splinepy::splines::BSpline<1, 2>; -extern template class splinepy::splines::BSpline<1, 3>; +extern template class splinepy::splines::BSpline<1>; +extern template class splinepy::splines::BSpline<2>; +extern template class splinepy::splines::BSpline<3>; #ifdef SPLINEPY_MORE -extern template class splinepy::splines::BSpline<1, 4>; -extern template class splinepy::splines::BSpline<1, 5>; -extern template class splinepy::splines::BSpline<1, 6>; -extern template class splinepy::splines::BSpline<1, 7>; -extern template class splinepy::splines::BSpline<1, 8>; -extern template class splinepy::splines::BSpline<1, 9>; -extern template class splinepy::splines::BSpline<1, 10>; +extern template class splinepy::splines::BSpline<4>; +extern template class splinepy::splines::BSpline<5>; +extern template class splinepy::splines::BSpline<6>; +extern template class splinepy::splines::BSpline<7>; +extern template class splinepy::splines::BSpline<8>; +extern template class splinepy::splines::BSpline<9>; +extern template class splinepy::splines::BSpline<10>; #endif -extern template class splinepy::splines::BSpline<2, 1>; -extern template class splinepy::splines::BSpline<2, 2>; -extern template class splinepy::splines::BSpline<2, 3>; -#ifdef SPLINEPY_MORE -extern template class splinepy::splines::BSpline<2, 4>; -extern template class splinepy::splines::BSpline<2, 5>; -extern template class splinepy::splines::BSpline<2, 6>; -extern template class splinepy::splines::BSpline<2, 7>; -extern template class splinepy::splines::BSpline<2, 8>; -extern template class splinepy::splines::BSpline<2, 9>; -extern template class splinepy::splines::BSpline<2, 10>; -#endif -extern template class splinepy::splines::BSpline<3, 1>; -extern template class splinepy::splines::BSpline<3, 2>; -extern template class splinepy::splines::BSpline<3, 3>; -#ifdef SPLINEPY_MORE -extern template class splinepy::splines::BSpline<3, 4>; -extern template class splinepy::splines::BSpline<3, 5>; -extern template class splinepy::splines::BSpline<3, 6>; -extern template class splinepy::splines::BSpline<3, 7>; -extern template class splinepy::splines::BSpline<3, 8>; -extern template class splinepy::splines::BSpline<3, 9>; -extern template class splinepy::splines::BSpline<3, 10>; - -extern template class splinepy::splines::BSpline<4, 1>; -extern template class splinepy::splines::BSpline<4, 2>; -extern template class splinepy::splines::BSpline<4, 3>; -extern template class splinepy::splines::BSpline<4, 4>; -extern template class splinepy::splines::BSpline<4, 5>; -extern template class splinepy::splines::BSpline<4, 6>; -extern template class splinepy::splines::BSpline<4, 7>; -extern template class splinepy::splines::BSpline<4, 8>; -extern template class splinepy::splines::BSpline<4, 9>; -extern template class splinepy::splines::BSpline<4, 10>; - -extern template class splinepy::splines::BSpline<5, 1>; -extern template class splinepy::splines::BSpline<5, 2>; -extern template class splinepy::splines::BSpline<5, 3>; -extern template class splinepy::splines::BSpline<5, 4>; -extern template class splinepy::splines::BSpline<5, 5>; -extern template class splinepy::splines::BSpline<5, 6>; -extern template class splinepy::splines::BSpline<5, 7>; -extern template class splinepy::splines::BSpline<5, 8>; -extern template class splinepy::splines::BSpline<5, 9>; -extern template class splinepy::splines::BSpline<5, 10>; -extern template class splinepy::splines::BSpline<6, 1>; -extern template class splinepy::splines::BSpline<6, 2>; -extern template class splinepy::splines::BSpline<6, 3>; -extern template class splinepy::splines::BSpline<6, 4>; -extern template class splinepy::splines::BSpline<6, 5>; -extern template class splinepy::splines::BSpline<6, 6>; -extern template class splinepy::splines::BSpline<6, 7>; -extern template class splinepy::splines::BSpline<6, 8>; -extern template class splinepy::splines::BSpline<6, 9>; -extern template class splinepy::splines::BSpline<6, 10>; - -extern template class splinepy::splines::BSpline<7, 1>; -extern template class splinepy::splines::BSpline<7, 2>; -extern template class splinepy::splines::BSpline<7, 3>; -extern template class splinepy::splines::BSpline<7, 4>; -extern template class splinepy::splines::BSpline<7, 5>; -extern template class splinepy::splines::BSpline<7, 6>; -extern template class splinepy::splines::BSpline<7, 7>; -extern template class splinepy::splines::BSpline<7, 8>; -extern template class splinepy::splines::BSpline<7, 9>; -extern template class splinepy::splines::BSpline<7, 10>; - -extern template class splinepy::splines::BSpline<8, 1>; -extern template class splinepy::splines::BSpline<8, 2>; -extern template class splinepy::splines::BSpline<8, 3>; -extern template class splinepy::splines::BSpline<8, 4>; -extern template class splinepy::splines::BSpline<8, 5>; -extern template class splinepy::splines::BSpline<8, 6>; -extern template class splinepy::splines::BSpline<8, 7>; -extern template class splinepy::splines::BSpline<8, 8>; -extern template class splinepy::splines::BSpline<8, 9>; -extern template class splinepy::splines::BSpline<8, 10>; - -extern template class splinepy::splines::BSpline<9, 1>; -extern template class splinepy::splines::BSpline<9, 2>; -extern template class splinepy::splines::BSpline<9, 3>; -extern template class splinepy::splines::BSpline<9, 4>; -extern template class splinepy::splines::BSpline<9, 5>; -extern template class splinepy::splines::BSpline<9, 6>; -extern template class splinepy::splines::BSpline<9, 7>; -extern template class splinepy::splines::BSpline<9, 8>; -extern template class splinepy::splines::BSpline<9, 9>; -extern template class splinepy::splines::BSpline<9, 10>; - -extern template class splinepy::splines::BSpline<10, 1>; -extern template class splinepy::splines::BSpline<10, 2>; -extern template class splinepy::splines::BSpline<10, 3>; -extern template class splinepy::splines::BSpline<10, 4>; -extern template class splinepy::splines::BSpline<10, 5>; -extern template class splinepy::splines::BSpline<10, 6>; -extern template class splinepy::splines::BSpline<10, 7>; -extern template class splinepy::splines::BSpline<10, 8>; -extern template class splinepy::splines::BSpline<10, 9>; -extern template class splinepy::splines::BSpline<10, 10>; -#endif #endif diff --git a/cpp/splinepy/explicit/splinepy/nurbs_explicit.cpp b/cpp/splinepy/explicit/splinepy/nurbs_explicit.cpp new file mode 100644 index 000000000..8b0afb228 --- /dev/null +++ b/cpp/splinepy/explicit/splinepy/nurbs_explicit.cpp @@ -0,0 +1,13 @@ +#include +template class splinepy::splines::Nurbs<1>; +template class splinepy::splines::Nurbs<2>; +template class splinepy::splines::Nurbs<3>; +#ifdef SPLINEPY_MORE +template class splinepy::splines::Nurbs<4>; +template class splinepy::splines::Nurbs<5>; +template class splinepy::splines::Nurbs<6>; +template class splinepy::splines::Nurbs<7>; +template class splinepy::splines::Nurbs<8>; +template class splinepy::splines::Nurbs<9>; +template class splinepy::splines::Nurbs<10>; +#endif diff --git a/cpp/splinepy/explicit/splinepy/nurbs_explicit1.cpp b/cpp/splinepy/explicit/splinepy/nurbs_explicit1.cpp deleted file mode 100644 index 713de9bd1..000000000 --- a/cpp/splinepy/explicit/splinepy/nurbs_explicit1.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -template class splinepy::splines::Nurbs<1, 1>; -template class splinepy::splines::Nurbs<1, 2>; -template class splinepy::splines::Nurbs<1, 3>; -#ifdef SPLINEPY_MORE -template class splinepy::splines::Nurbs<1, 4>; -template class splinepy::splines::Nurbs<1, 5>; -template class splinepy::splines::Nurbs<1, 6>; -template class splinepy::splines::Nurbs<1, 7>; -template class splinepy::splines::Nurbs<1, 8>; -template class splinepy::splines::Nurbs<1, 9>; -template class splinepy::splines::Nurbs<1, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/nurbs_explicit10.cpp b/cpp/splinepy/explicit/splinepy/nurbs_explicit10.cpp deleted file mode 100644 index d6c738d86..000000000 --- a/cpp/splinepy/explicit/splinepy/nurbs_explicit10.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::Nurbs<10, 1>; -template class splinepy::splines::Nurbs<10, 2>; -template class splinepy::splines::Nurbs<10, 3>; -template class splinepy::splines::Nurbs<10, 4>; -template class splinepy::splines::Nurbs<10, 5>; -template class splinepy::splines::Nurbs<10, 6>; -template class splinepy::splines::Nurbs<10, 7>; -template class splinepy::splines::Nurbs<10, 8>; -template class splinepy::splines::Nurbs<10, 9>; -template class splinepy::splines::Nurbs<10, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/nurbs_explicit2.cpp b/cpp/splinepy/explicit/splinepy/nurbs_explicit2.cpp deleted file mode 100644 index 784cb18e8..000000000 --- a/cpp/splinepy/explicit/splinepy/nurbs_explicit2.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -template class splinepy::splines::Nurbs<2, 1>; -template class splinepy::splines::Nurbs<2, 2>; -template class splinepy::splines::Nurbs<2, 3>; -#ifdef SPLINEPY_MORE -template class splinepy::splines::Nurbs<2, 4>; -template class splinepy::splines::Nurbs<2, 5>; -template class splinepy::splines::Nurbs<2, 6>; -template class splinepy::splines::Nurbs<2, 7>; -template class splinepy::splines::Nurbs<2, 8>; -template class splinepy::splines::Nurbs<2, 9>; -template class splinepy::splines::Nurbs<2, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/nurbs_explicit3.cpp b/cpp/splinepy/explicit/splinepy/nurbs_explicit3.cpp deleted file mode 100644 index 7bd517931..000000000 --- a/cpp/splinepy/explicit/splinepy/nurbs_explicit3.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -template class splinepy::splines::Nurbs<3, 1>; -template class splinepy::splines::Nurbs<3, 2>; -template class splinepy::splines::Nurbs<3, 3>; -#ifdef SPLINEPY_MORE -template class splinepy::splines::Nurbs<3, 4>; -template class splinepy::splines::Nurbs<3, 5>; -template class splinepy::splines::Nurbs<3, 6>; -template class splinepy::splines::Nurbs<3, 7>; -template class splinepy::splines::Nurbs<3, 8>; -template class splinepy::splines::Nurbs<3, 9>; -template class splinepy::splines::Nurbs<3, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/nurbs_explicit4.cpp b/cpp/splinepy/explicit/splinepy/nurbs_explicit4.cpp deleted file mode 100644 index 137798e90..000000000 --- a/cpp/splinepy/explicit/splinepy/nurbs_explicit4.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::Nurbs<4, 1>; -template class splinepy::splines::Nurbs<4, 2>; -template class splinepy::splines::Nurbs<4, 3>; -template class splinepy::splines::Nurbs<4, 4>; -template class splinepy::splines::Nurbs<4, 5>; -template class splinepy::splines::Nurbs<4, 6>; -template class splinepy::splines::Nurbs<4, 7>; -template class splinepy::splines::Nurbs<4, 8>; -template class splinepy::splines::Nurbs<4, 9>; -template class splinepy::splines::Nurbs<4, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/nurbs_explicit5.cpp b/cpp/splinepy/explicit/splinepy/nurbs_explicit5.cpp deleted file mode 100644 index ea175c0da..000000000 --- a/cpp/splinepy/explicit/splinepy/nurbs_explicit5.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::Nurbs<5, 1>; -template class splinepy::splines::Nurbs<5, 2>; -template class splinepy::splines::Nurbs<5, 3>; -template class splinepy::splines::Nurbs<5, 4>; -template class splinepy::splines::Nurbs<5, 5>; -template class splinepy::splines::Nurbs<5, 6>; -template class splinepy::splines::Nurbs<5, 7>; -template class splinepy::splines::Nurbs<5, 8>; -template class splinepy::splines::Nurbs<5, 9>; -template class splinepy::splines::Nurbs<5, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/nurbs_explicit6.cpp b/cpp/splinepy/explicit/splinepy/nurbs_explicit6.cpp deleted file mode 100644 index 3c9637e82..000000000 --- a/cpp/splinepy/explicit/splinepy/nurbs_explicit6.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::Nurbs<6, 1>; -template class splinepy::splines::Nurbs<6, 2>; -template class splinepy::splines::Nurbs<6, 3>; -template class splinepy::splines::Nurbs<6, 4>; -template class splinepy::splines::Nurbs<6, 5>; -template class splinepy::splines::Nurbs<6, 6>; -template class splinepy::splines::Nurbs<6, 7>; -template class splinepy::splines::Nurbs<6, 8>; -template class splinepy::splines::Nurbs<6, 9>; -template class splinepy::splines::Nurbs<6, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/nurbs_explicit7.cpp b/cpp/splinepy/explicit/splinepy/nurbs_explicit7.cpp deleted file mode 100644 index 6ec69fc72..000000000 --- a/cpp/splinepy/explicit/splinepy/nurbs_explicit7.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::Nurbs<7, 1>; -template class splinepy::splines::Nurbs<7, 2>; -template class splinepy::splines::Nurbs<7, 3>; -template class splinepy::splines::Nurbs<7, 4>; -template class splinepy::splines::Nurbs<7, 5>; -template class splinepy::splines::Nurbs<7, 6>; -template class splinepy::splines::Nurbs<7, 7>; -template class splinepy::splines::Nurbs<7, 8>; -template class splinepy::splines::Nurbs<7, 9>; -template class splinepy::splines::Nurbs<7, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/nurbs_explicit8.cpp b/cpp/splinepy/explicit/splinepy/nurbs_explicit8.cpp deleted file mode 100644 index 515ea5608..000000000 --- a/cpp/splinepy/explicit/splinepy/nurbs_explicit8.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::Nurbs<8, 1>; -template class splinepy::splines::Nurbs<8, 2>; -template class splinepy::splines::Nurbs<8, 3>; -template class splinepy::splines::Nurbs<8, 4>; -template class splinepy::splines::Nurbs<8, 5>; -template class splinepy::splines::Nurbs<8, 6>; -template class splinepy::splines::Nurbs<8, 7>; -template class splinepy::splines::Nurbs<8, 8>; -template class splinepy::splines::Nurbs<8, 9>; -template class splinepy::splines::Nurbs<8, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/nurbs_explicit9.cpp b/cpp/splinepy/explicit/splinepy/nurbs_explicit9.cpp deleted file mode 100644 index 63cebb99c..000000000 --- a/cpp/splinepy/explicit/splinepy/nurbs_explicit9.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#ifdef SPLINEPY_MORE -template class splinepy::splines::Nurbs<9, 1>; -template class splinepy::splines::Nurbs<9, 2>; -template class splinepy::splines::Nurbs<9, 3>; -template class splinepy::splines::Nurbs<9, 4>; -template class splinepy::splines::Nurbs<9, 5>; -template class splinepy::splines::Nurbs<9, 6>; -template class splinepy::splines::Nurbs<9, 7>; -template class splinepy::splines::Nurbs<9, 8>; -template class splinepy::splines::Nurbs<9, 9>; -template class splinepy::splines::Nurbs<9, 10>; -#endif diff --git a/cpp/splinepy/explicit/splinepy/nurbs_extern.hpp b/cpp/splinepy/explicit/splinepy/nurbs_extern.hpp index c71245891..69c4aa348 100644 --- a/cpp/splinepy/explicit/splinepy/nurbs_extern.hpp +++ b/cpp/splinepy/explicit/splinepy/nurbs_extern.hpp @@ -2,116 +2,16 @@ #include #ifdef SPLINEPY_BUILD_EXPLICIT -extern template class splinepy::splines::Nurbs<1, 1>; -extern template class splinepy::splines::Nurbs<1, 2>; -extern template class splinepy::splines::Nurbs<1, 3>; +extern template class splinepy::splines::Nurbs<1>; +extern template class splinepy::splines::Nurbs<2>; +extern template class splinepy::splines::Nurbs<3>; #ifdef SPLINEPY_MORE -extern template class splinepy::splines::Nurbs<1, 4>; -extern template class splinepy::splines::Nurbs<1, 5>; -extern template class splinepy::splines::Nurbs<1, 6>; -extern template class splinepy::splines::Nurbs<1, 7>; -extern template class splinepy::splines::Nurbs<1, 8>; -extern template class splinepy::splines::Nurbs<1, 9>; -extern template class splinepy::splines::Nurbs<1, 10>; -#endif -extern template class splinepy::splines::Nurbs<2, 1>; -extern template class splinepy::splines::Nurbs<2, 2>; -extern template class splinepy::splines::Nurbs<2, 3>; -#ifdef SPLINEPY_MORE -extern template class splinepy::splines::Nurbs<2, 4>; -extern template class splinepy::splines::Nurbs<2, 5>; -extern template class splinepy::splines::Nurbs<2, 6>; -extern template class splinepy::splines::Nurbs<2, 7>; -extern template class splinepy::splines::Nurbs<2, 8>; -extern template class splinepy::splines::Nurbs<2, 9>; -extern template class splinepy::splines::Nurbs<2, 10>; -#endif -extern template class splinepy::splines::Nurbs<3, 1>; -extern template class splinepy::splines::Nurbs<3, 2>; -extern template class splinepy::splines::Nurbs<3, 3>; -#ifdef SPLINEPY_MORE -extern template class splinepy::splines::Nurbs<3, 4>; -extern template class splinepy::splines::Nurbs<3, 5>; -extern template class splinepy::splines::Nurbs<3, 6>; -extern template class splinepy::splines::Nurbs<3, 7>; -extern template class splinepy::splines::Nurbs<3, 8>; -extern template class splinepy::splines::Nurbs<3, 9>; -extern template class splinepy::splines::Nurbs<3, 10>; -extern template class splinepy::splines::Nurbs<4, 1>; -extern template class splinepy::splines::Nurbs<4, 2>; -extern template class splinepy::splines::Nurbs<4, 3>; -extern template class splinepy::splines::Nurbs<4, 4>; -extern template class splinepy::splines::Nurbs<4, 5>; -extern template class splinepy::splines::Nurbs<4, 6>; -extern template class splinepy::splines::Nurbs<4, 7>; -extern template class splinepy::splines::Nurbs<4, 8>; -extern template class splinepy::splines::Nurbs<4, 9>; -extern template class splinepy::splines::Nurbs<4, 10>; - -extern template class splinepy::splines::Nurbs<5, 1>; -extern template class splinepy::splines::Nurbs<5, 2>; -extern template class splinepy::splines::Nurbs<5, 3>; -extern template class splinepy::splines::Nurbs<5, 4>; -extern template class splinepy::splines::Nurbs<5, 5>; -extern template class splinepy::splines::Nurbs<5, 6>; -extern template class splinepy::splines::Nurbs<5, 7>; -extern template class splinepy::splines::Nurbs<5, 8>; -extern template class splinepy::splines::Nurbs<5, 9>; -extern template class splinepy::splines::Nurbs<5, 10>; - -extern template class splinepy::splines::Nurbs<6, 1>; -extern template class splinepy::splines::Nurbs<6, 2>; -extern template class splinepy::splines::Nurbs<6, 3>; -extern template class splinepy::splines::Nurbs<6, 4>; -extern template class splinepy::splines::Nurbs<6, 5>; -extern template class splinepy::splines::Nurbs<6, 6>; -extern template class splinepy::splines::Nurbs<6, 7>; -extern template class splinepy::splines::Nurbs<6, 8>; -extern template class splinepy::splines::Nurbs<6, 9>; -extern template class splinepy::splines::Nurbs<6, 10>; - -extern template class splinepy::splines::Nurbs<7, 1>; -extern template class splinepy::splines::Nurbs<7, 2>; -extern template class splinepy::splines::Nurbs<7, 3>; -extern template class splinepy::splines::Nurbs<7, 4>; -extern template class splinepy::splines::Nurbs<7, 5>; -extern template class splinepy::splines::Nurbs<7, 6>; -extern template class splinepy::splines::Nurbs<7, 7>; -extern template class splinepy::splines::Nurbs<7, 8>; -extern template class splinepy::splines::Nurbs<7, 9>; -extern template class splinepy::splines::Nurbs<7, 10>; - -extern template class splinepy::splines::Nurbs<8, 1>; -extern template class splinepy::splines::Nurbs<8, 2>; -extern template class splinepy::splines::Nurbs<8, 3>; -extern template class splinepy::splines::Nurbs<8, 4>; -extern template class splinepy::splines::Nurbs<8, 5>; -extern template class splinepy::splines::Nurbs<8, 6>; -extern template class splinepy::splines::Nurbs<8, 7>; -extern template class splinepy::splines::Nurbs<8, 8>; -extern template class splinepy::splines::Nurbs<8, 9>; -extern template class splinepy::splines::Nurbs<8, 10>; - -extern template class splinepy::splines::Nurbs<9, 1>; -extern template class splinepy::splines::Nurbs<9, 2>; -extern template class splinepy::splines::Nurbs<9, 3>; -extern template class splinepy::splines::Nurbs<9, 4>; -extern template class splinepy::splines::Nurbs<9, 5>; -extern template class splinepy::splines::Nurbs<9, 6>; -extern template class splinepy::splines::Nurbs<9, 7>; -extern template class splinepy::splines::Nurbs<9, 8>; -extern template class splinepy::splines::Nurbs<9, 9>; -extern template class splinepy::splines::Nurbs<9, 10>; - -extern template class splinepy::splines::Nurbs<10, 1>; -extern template class splinepy::splines::Nurbs<10, 2>; -extern template class splinepy::splines::Nurbs<10, 3>; -extern template class splinepy::splines::Nurbs<10, 4>; -extern template class splinepy::splines::Nurbs<10, 5>; -extern template class splinepy::splines::Nurbs<10, 6>; -extern template class splinepy::splines::Nurbs<10, 7>; -extern template class splinepy::splines::Nurbs<10, 8>; -extern template class splinepy::splines::Nurbs<10, 9>; -extern template class splinepy::splines::Nurbs<10, 10>; +extern template class splinepy::splines::Nurbs<4>; +extern template class splinepy::splines::Nurbs<5>; +extern template class splinepy::splines::Nurbs<6>; +extern template class splinepy::splines::Nurbs<7>; +extern template class splinepy::splines::Nurbs<8>; +extern template class splinepy::splines::Nurbs<9>; +extern template class splinepy::splines::Nurbs<10>; #endif #endif diff --git a/cpp/splinepy/proximity/proximity.hpp b/cpp/splinepy/proximity/proximity.hpp index 48d52c274..443f70443 100644 --- a/cpp/splinepy/proximity/proximity.hpp +++ b/cpp/splinepy/proximity/proximity.hpp @@ -10,6 +10,25 @@ namespace splinepy::proximity { +class ProximityBase { +public: + virtual ~ProximityBase() = default; + + virtual void PlantNewKdTree(const int* resolutions, const int n_thread) = 0; + virtual void + VerboseQuery(const double* query, + const double& tolerance, + const int& max_iterations, + const bool aggressive_bounds, + double* final_guess, + double* nearest /* spline(final_guess) */, + double* nearest_minus_query /* difference */, + double& distance, + double& convergence_norm, + double* first_derivatives /* spline jacobian */, + double* second_derivatives /* spline hessian */) const = 0; +}; + /*! * A helper class to perform proximity operations for splines. * @@ -20,42 +39,37 @@ namespace splinepy::proximity { * For detailed information, please take a look at splinepy python * documentation. */ -template -class Proximity { +template +class Proximity : public ProximityBase { public: + using Base_ = ProximityBase; /// Options for initial guess enum class InitialGuess : int { MidPoint = 0, KdTree = 1 }; // Frequently used array alias - using DArrayD_ = std::array; + using DArrayD_ = std::array; using PArrayD_ = std::array; - using DArrayI_ = std::array; + using DArrayI_ = std::array; using PArrayI_ = std::array; using PxPMatrixD_ = std::array, SplineType::kParaDim>; - using PxDMatrixD_ = - std::array, SplineType::kParaDim>; + using PxDMatrixD_ = std::array, SplineType::kParaDim>; // kdtree related alias // C-Array instead of vector to avoid default init using Coordinates_ = typename SplineType::Coordinate_[]; - using Cloud_ = typename napf:: - CoordinatesCloud, int, SplineType::kDim>; + using Cloud_ = + typename napf::CoordinatesCloud, int, dim>; // metric is L2 and returned distance will be squared. - using Tree_ = - typename std::conditional<(SplineType::kDim < 4), - napf::CoordinatesTree, /* Cloud T */ - napf::CoordinatesHighDimTree>::type; + using Tree_ = typename std::conditional< + (dim < 4), + napf::CoordinatesTree, /* Cloud T */ + napf::CoordinatesHighDimTree>::type; using GridPoints_ = splinepy::utils::GridPoints; @@ -88,8 +102,12 @@ class Proximity { * @param resolutions parameter space sampling resolution * @param n_thread number of threads to be used for sampling */ - void PlantNewKdTree(const PArrayI_& resolutions, const int n_thread = 1) { + virtual void PlantNewKdTree(const int* resolutions_, const int n_thread = 1) { // skip early, if requested resolutions are the as existing kdtree + PArrayI_ resolutions; + for (int i{}; i < dim; ++i) { + resolutions[i] = resolutions_[i]; + } if (kdtree_planted_ && sampled_resolutions_ == resolutions) { return; } @@ -117,7 +135,7 @@ class Proximity { // plant a new tree coordinates_cloud_ = std::make_unique(coordinates_, grid_points_.Size()); - kdtree_ = std::make_unique(SplineType::kDim, *coordinates_cloud_); + kdtree_ = std::make_unique(dim, *coordinates_cloud_); kdtree_planted_ = true; } @@ -197,7 +215,7 @@ class Proximity { auto const derivative = spline_(guess, derivative_query); df_dxi_i = 0.; - for (int j{}; j < SplineType::kDim; ++j) { + for (int j{}; j < dim; ++j) { // cast, since d may be a NamedType. double d_value; if constexpr (std::is_scalar::value) { @@ -220,10 +238,10 @@ class Proximity { * @param[in] spline_gradient * @param[out] lhs */ - void FillLhs(const typename SplineType::ParametricCoordinate_& guess, - const DArrayD_& difference, - const PxDMatrixD_& spline_gradient, - PxPMatrixD_& lhs) const { + virtual void FillLhs(const typename SplineType::ParametricCoordinate_& guess, + const DArrayD_& difference, + const PxDMatrixD_& spline_gradient, + PxPMatrixD_& lhs) const { const PxPMatrixD_ spline_gradientAAt = splinepy::utils::AAt(spline_gradient); @@ -343,7 +361,7 @@ class Proximity { } /// @brief First order fall back - void FirstOrderFallBack() {} + virtual void FirstOrderFallBack() {} /// @brief Given physical coordinate, finds closest parametric coordinate. /// Always takes initial guess based on kdtree. @@ -359,17 +377,18 @@ class Proximity { /// @param[out] convergence_norm /// @param[out] first_derivatives (para_dim x dim) /// @param[out] second_derivatives (para_dim x para_dim x dim) - void VerboseQuery(const double* query, - const double& tolerance, - const int& max_iterations, - const bool aggressive_bounds, - double* final_guess, - double* nearest /* spline(final_guess) */, - double* nearest_minus_query /* difference */, - double& distance, - double& convergence_norm, - double* first_derivatives /* spline jacobian */, - double* second_derivatives /* spline hessian */) const { + virtual void + VerboseQuery(const double* query, + const double& tolerance, + const int& max_iterations, + const bool aggressive_bounds, + double* final_guess, + double* nearest /* spline(final_guess) */, + double* nearest_minus_query /* difference */, + double& distance, + double& convergence_norm, + double* first_derivatives /* spline jacobian */, + double* second_derivatives /* spline hessian */) const { PxPMatrixD_ lhs; PArrayD_ rhs; @@ -480,25 +499,24 @@ class Proximity { ++derivative_query[i]; ++derivative_query[j]; const auto derivative = spline_(current_guess, derivative_query); - for (int k{}; k < SplineType::kDim; ++k) { + for (int k{}; k < dim; ++k) { if constexpr (std::is_scalar::value) { der = derivative; } else { der = static_cast(derivative[k]); } // spline hessian - second_derivatives[(i * SplineType::kParaDim * SplineType::kDim) - + (j * SplineType::kDim) + k] = der; /* 4 */ + second_derivatives[(i * SplineType::kParaDim * dim) + (j * dim) + k] = + der; /* 4 */ // symmetric part if (i != j) { - second_derivatives[(j * SplineType::kParaDim * SplineType::kDim) - + (i * SplineType::kDim) + k] = der; + second_derivatives[(j * SplineType::kParaDim * dim) + (i * dim) + + k] = der; } // ones that don't need extra para_dim loop if (i == 0 /* j starts with 0 */) { - first_derivatives[j * SplineType::kDim + k] = - spline_gradient[j][k]; /* 5 */ + first_derivatives[j * dim + k] = spline_gradient[j][k]; /* 5 */ // ones that don't need extra extra para_dim loop // => pure dim loop if (j == 0) { diff --git a/cpp/splinepy/splines/bezier.hpp b/cpp/splinepy/splines/bezier.hpp index c211eea5b..fbc16d873 100644 --- a/cpp/splinepy/splines/bezier.hpp +++ b/cpp/splinepy/splines/bezier.hpp @@ -51,6 +51,7 @@ class Bezier : public splinepy::splines::SplinepyBase, using SplinepyBase_ = splinepy::splines::SplinepyBase; template using SelfTemplate_ = Bezier; + using SelfBoundary_ = Bezier; using Base_ = BezierSplineType; template using BaseTemplate_ = BezierSplineType; @@ -61,7 +62,8 @@ class Bezier : public splinepy::splines::SplinepyBase, using Coordinates_ = typename std::vector; using Derivative_ = typename std::array; using Dimension_ = std::size_t; - using Proximity_ = splinepy::proximity::Proximity>; + using ProximityBase_ = splinepy::proximity::ProximityBase; + using Proximity_ = splinepy::proximity::Proximity, dim>; /// @brief Creates Base for Bezier /// @param degrees @@ -233,10 +235,7 @@ class Bezier : public splinepy::splines::SplinepyBase, virtual void SplinepyPlantNewKdTreeForProximity(const int* resolutions, const int& nthreads) { - splinepy::splines::helpers::ScalarTypePlantNewKdTreeForProximity( - *this, - resolutions, - nthreads); + GetProximity().PlantNewKdTree(resolutions, nthreads); } /// Verbose proximity query - make sure to plant a kdtree first. virtual void SplinepyVerboseProximity(const double* query, @@ -713,13 +712,14 @@ class Bezier : public splinepy::splines::SplinepyBase, } /// @brief Gets proximity - constexpr Proximity_& GetProximity() { return *proximity_; } + constexpr ProximityBase_& GetProximity() { return *proximity_; } /// @brief Gets proximity - constexpr const Proximity_& GetProximity() const { return *proximity_; } + constexpr const ProximityBase_& GetProximity() const { return *proximity_; } protected: /// @brief Proximity - std::shared_ptr proximity_ = std::make_shared(*this); + std::shared_ptr proximity_ = + std::make_shared(*this); }; /* class Bezier */ } // namespace splinepy::splines diff --git a/cpp/splinepy/splines/bspline.hpp b/cpp/splinepy/splines/bspline.hpp index 4285f29c9..3f2b0e8f1 100644 --- a/cpp/splinepy/splines/bspline.hpp +++ b/cpp/splinepy/splines/bspline.hpp @@ -18,36 +18,29 @@ namespace splinepy::splines { /// @brief BSpline class /// @tparam para_dim Dimension of parametric space /// @tparam dim Dimension of physical space -template +template class BSpline : public splinepy::splines::SplinepyBase, - public bsplinelib::splines::BSpline { + public bsplinelib::splines::BSpline { public: /// @brief Dimension of parametric space static constexpr int kParaDim = para_dim; - /// @brief Dimension of physical space - static constexpr int kDim = dim; /// @brief It is not a rational spline static constexpr bool kIsRational = false; /// @brief It has knot vectors static constexpr bool kHasKnotVectors = true; - // TODO remove afterwards - /// @brief Dimension of parameter space - constexpr static int para_dim_ = para_dim; - /// @brief Dimension of physical space - constexpr static int dim_ = dim; - // self - template - using SelfTemplate_ = BSpline; + template + using SelfTemplate_ = BSpline; + using SelfBoundary_ = BSpline; // splinepy using SplinepyBase_ = splinepy::splines::SplinepyBase; // splinelib - using Base_ = bsplinelib::splines::BSpline; - template - using BaseTemplate_ = bsplinelib::splines::BSpline; + using Base_ = bsplinelib::splines::BSpline; + template + using BaseTemplate_ = bsplinelib::splines::BSpline; // parameter space /// Parameter space using ParameterSpace_ = typename Base_::ParameterSpace_; @@ -90,7 +83,9 @@ class BSpline : public splinepy::splines::SplinepyBase, using BinomialRatios_ = typename Base_::ParameterSpace_::BinomialRatios_; using BinomialRatio_ = typename BinomialRatios_::value_type; // Advanced use - using Proximity_ = splinepy::proximity::Proximity>; + using ProximityBase_ = splinepy::proximity::ProximityBase; + template + using Proximity_ = splinepy::proximity::Proximity, dim>; /** raw ptr based inithelper. * degrees should have same size as parametric dimension @@ -99,7 +94,8 @@ class BSpline : public splinepy::splines::SplinepyBase, */ static Base_ CreateBase(const int* degrees, const std::vector>& knot_vectors, - const double* control_points) { + const double* control_points, + const int dim) { // process all the info and turn them into SplineLib types to initialize // Base_. @@ -135,11 +131,12 @@ class BSpline : public splinepy::splines::SplinepyBase, std::make_shared(sl_knot_vectors, sl_degrees); // Form VectorSpace - sl_control_points.reserve(ncps * dim_); - for (std::size_t i{}; i < ncps * dim_; ++i) { + sl_control_points.reserve(ncps * dim); + for (std::size_t i{}; i < ncps * dim; ++i) { sl_control_points.push_back(control_points[i]); } - auto sl_vector_space = std::make_shared(sl_control_points); + auto sl_vector_space = + std::make_shared(sl_control_points, dim); // return init return Base_(sl_parameter_space, sl_vector_space); @@ -151,8 +148,9 @@ class BSpline : public splinepy::splines::SplinepyBase, /// @param control_points BSpline(const int* degrees, const std::vector>& knot_vectors, - const double* control_points) - : Base_(CreateBase(degrees, knot_vectors, control_points)) {} + const double* control_points, + const int dim) + : Base_(CreateBase(degrees, knot_vectors, control_points, dim)) {} /// Inherited constructor using Base_::Base_; @@ -176,7 +174,9 @@ class BSpline : public splinepy::splines::SplinepyBase, virtual int SplinepyParaDim() const { return kParaDim; } /// @copydoc splinepy::splines::SplinepyBase::SplinepyDim - virtual int SplinepyDim() const { return kDim; } + virtual int SplinepyDim() const { + return GetVectorSpace().GetDimensionality(); + } /// @copydoc splinepy::splines::SplinepyBase::SplinepySplineName virtual std::string SplinepySplineName() const { return "BSpline"; } @@ -242,11 +242,12 @@ class BSpline : public splinepy::splines::SplinepyBase, if (control_points) { std::size_t ncps = vector_space.GetNumberOfCoordinates(); // fill it up, phil! + const int dim = SplinepyDim(); for (std::size_t i{}; i < ncps; ++i) { auto const& coord_named_phil = vector_space[bsplinelib::Index{ static_cast(i)}]; - for (std::size_t j{}; j < kDim; ++j) { - control_points[i * kDim + j] = + for (std::size_t j{}; j < dim; ++j) { + control_points[i * dim + j] = static_cast(coord_named_phil[j]); } } @@ -340,10 +341,7 @@ class BSpline : public splinepy::splines::SplinepyBase, virtual void SplinepyPlantNewKdTreeForProximity(const int* resolutions, const int& nthreads) { - splinepy::splines::helpers::ScalarTypePlantNewKdTreeForProximity( - *this, - resolutions, - nthreads); + GetProximity().PlantNewKdTree(resolutions, nthreads); } /// Verbose proximity query - make sure to plant a kdtree first. @@ -416,14 +414,47 @@ class BSpline : public splinepy::splines::SplinepyBase, return *Base_::vector_space_; } + /// @brief Gets proximity temporary + constexpr ProximityBase_& GetProximity() { + if (!proximity_) { + switch (SplinepyDim()) { + case 1: + proximity_ = std::make_unique>(*this); + case 2: + proximity_ = std::make_unique>(*this); + case 3: + proximity_ = std::make_unique>(*this); + case 4: + proximity_ = std::make_unique>(*this); + case 5: + proximity_ = std::make_unique>(*this); + case 6: + proximity_ = std::make_unique>(*this); + case 7: + proximity_ = std::make_unique>(*this); + case 8: + proximity_ = std::make_unique>(*this); + case 9: + proximity_ = std::make_unique>(*this); + case 10: + proximity_ = std::make_unique>(*this); + default: + splinepy::utils::PrintAndThrowError( + "Something went wrong during Proximity. Please help us by writing " + "an " + "issue about this case at [ github.com/tataratat/splinepy ]"); + } + } + return *proximity_; + } /// @brief Gets proximity - constexpr Proximity_& GetProximity() { return *proximity_; } - /// @brief Gets proximity - constexpr const Proximity_& GetProximity() const { return *proximity_; } + constexpr const ProximityBase_& GetProximity() const { + return GetProximity(); + } protected: /// @brief Unique pointer to proximity - std::unique_ptr proximity_ = std::make_unique(*this); + std::unique_ptr proximity_ = nullptr; }; } /* namespace splinepy::splines */ diff --git a/cpp/splinepy/splines/helpers/basis_functions.hpp b/cpp/splinepy/splines/helpers/basis_functions.hpp index a5c2460c2..ec52ad224 100644 --- a/cpp/splinepy/splines/helpers/basis_functions.hpp +++ b/cpp/splinepy/splines/helpers/basis_functions.hpp @@ -161,6 +161,7 @@ RationalBSplineBasis(const SplineType& spline, const auto bspline_basis = NonRationalBSplineBasis(spline, para_coord); const auto& homogeneous_coords = spline.GetWeightedVectorSpace(); const auto n_basis = support.size(); + const int dim = spline.SplinepyDim(); // prepare output std::vector rational_basis; @@ -169,7 +170,7 @@ RationalBSplineBasis(const SplineType& spline, double W{0.}; for (std::size_t i{}; i < n_basis; ++i) { // get weight - const auto& w = homogeneous_coords[support[i]][SplineType::kDim]; + const auto& w = homogeneous_coords[support[i]][dim]; const auto N_times_w = bspline_basis[i] * w; W += N_times_w; @@ -253,14 +254,16 @@ RationalBSplineBasisDerivative(const SplineType& spline, // we will do everything with OrderType constexpr auto para_dim = static_cast(SplineType::kParaDim); + const int dim = spline.SplinepyDim(); // prepare const auto& weighted_vector_space = spline.GetWeightedVectorSpace(); const auto& homogeneous_coords = spline.GetCoordinates(); // weight getter shortcut - auto get_weight_ = [&weighted_vector_space](const OrderType id) -> QueryType { - return static_cast(weighted_vector_space[id][SplineType::kDim]); + auto get_weight_ = [&dim, + &weighted_vector_space](const OrderType id) -> QueryType { + return static_cast(weighted_vector_space[id][dim]); }; // Define lambdas to switch between local indexing with diff --git a/cpp/splinepy/splines/helpers/extract.hpp b/cpp/splinepy/splines/helpers/extract.hpp index dacd844a5..6326cc0dd 100644 --- a/cpp/splinepy/splines/helpers/extract.hpp +++ b/cpp/splinepy/splines/helpers/extract.hpp @@ -24,14 +24,11 @@ ExtractControlMeshSliceFromIDs(const SplineType& spline, splinepy::utils::PrintWarning( "Sorry, we don't support control mesh slicing" "of 1-Parametric Dim splines. Returning empty spline."); - return std::shared_ptr< - typename SplineType::template SelfTemplate_>{}; + return std::shared_ptr{}; } else { // boundary spline type - using SelfBoundary = - typename SplineType::template SelfTemplate_; + using SelfBoundary = typename SplineType::SelfBoundary_; + // prepare return std::shared_ptr boundary_spline; @@ -58,10 +55,10 @@ ExtractControlMeshSliceFromIDs(const SplineType& spline, const VSpace& from_vspace = [&spline, &indices, &coords]() { // reserves and returns appropriate physical space if constexpr (SplineType::kIsRational) { - coords.reserve(indices.size() * (SplineType::kDim + 1)); + coords.reserve(indices.size() * (spline.SplinepyDim() + 1)); return spline.GetWeightedVectorSpace(); } else { - coords.reserve(indices.size() * SplineType::kDim); + coords.reserve(indices.size() * spline.SplinepyDim()); return spline.GetVectorSpace(); } }(); @@ -133,9 +130,7 @@ ExtractBoundaryMeshSlice(const SplineType& spline, const int& boundary_id) { splinepy::utils::PrintWarning( "Sorry, we don't support control mesh slicing" "of 1-Parametric Dim splines. Returning empty spline."); - return std::shared_ptr< - typename SplineType::template SelfTemplate_>{}; + return std::shared_ptr{}; } else { // get ids on boundary @@ -167,9 +162,7 @@ ExtractControlMeshSlice(const SplineType& spline, splinepy::utils::PrintWarning( "Sorry, we don't support control mesh slicing" "of 1-Parametric Dim splines. Returning empty spline."); - return std::shared_ptr< - typename SplineType::template SelfTemplate_>{}; + return std::shared_ptr{}; } else { // get ids on boundary const auto cmr = diff --git a/cpp/splinepy/splines/helpers/extract_bezier_patches.hpp b/cpp/splinepy/splines/helpers/extract_bezier_patches.hpp index 7be2481ed..bfaf7b81d 100644 --- a/cpp/splinepy/splines/helpers/extract_bezier_patches.hpp +++ b/cpp/splinepy/splines/helpers/extract_bezier_patches.hpp @@ -106,23 +106,20 @@ template auto ExtractBezierPatches(SplineType& input) { // Start by identifying types constexpr int para_dim = SplineType::kParaDim; - constexpr int dim = SplineType::kDim; + const int dim = input.SplinepyDim(); constexpr bool is_rational = SplineType::kIsRational; - using ReturnType = - std::conditional_t, - splinepy::splines::Bezier>; + static_assert(as_base, "as_base=false has no effect."); + + using ReturnType = splinepy::splines::SplinepyBase; using ReturnVectorValueType = std::conditional_t; - using PointType = typename ReturnType::Coordinate_; // Predetermine some auxiliary values // Access spline degrees and determine offsets - std::array degrees{}; + std::array degrees{}; for (int i_p{}; i_p < para_dim; i_p++) { - degrees[i_p] = static_cast( - input.GetParameterSpace().GetDegrees()[i_p].Get()); + degrees[i_p] = input.GetParameterSpace().GetDegrees()[i_p].Get(); } std::array n_patches_per_para_dim{}; std::array n_ctps_per_para_dim{}; @@ -146,12 +143,12 @@ auto ExtractBezierPatches(SplineType& input) { input.InsertKnot(bsplinelib::Dimension{i_p_dim}, knot_vector_ref[i_knot]); } } - // Auxiliary function + // Auxiliary function that returns coordinate view const auto& ControlPointVector = [&](const int& id) { if constexpr (is_rational) { - return input.GetWeightedVectorSpace()[bsplinelib::Index{id}]; + return input.GetWeightedVectorSpace()[id]; } else { - return input.GetVectorSpace()[bsplinelib::Index{id}]; + return input.GetVectorSpace()[id]; } }; @@ -173,8 +170,8 @@ auto ExtractBezierPatches(SplineType& input) { for (int i_patch{}; i_patch < n_total_patches; i_patch++) { // Init vectors required for initialization - std::vector ctps; - ctps.reserve(n_ctps_per_patch); + std::vector ctps; + ctps.reserve(n_ctps_per_patch * dim); std::vector weights; if constexpr (is_rational) { weights.reserve(n_ctps_per_patch); @@ -184,42 +181,38 @@ auto ExtractBezierPatches(SplineType& input) { // Extract relevant coordinates for (int i_local_id{}; i_local_id < n_ctps_per_patch; i_local_id++) { const std::size_t global_id = local_ids[i_local_id]; - // Retrieve Control Point - PointType point{}; - // Check if scalar (double instead of array) - if constexpr (dim == 1) { - point = ControlPointVector(global_id)[0]; - } else { - for (int i_dim{}; i_dim < dim; i_dim++) { - point[i_dim] = ControlPointVector(global_id)[i_dim]; - } - } + + // prepare coordinate for this loop + const auto this_coordinate_view = ControlPointVector(global_id); + double unweighing_factor{1.0}; if constexpr (is_rational) { - const double weight = ControlPointVector(global_id)[dim]; - weights.push_back(weight); - // control points are weighted in non-rational splines to facilitate - // calculations. They therefore need to be divided by the weight to get - // the true control point positions - point /= weight; + // set weight + const auto& this_weight = this_coordinate_view[dim]; + weights.push_back(this_weight); + // get factor + unweighing_factor = 1 / this_weight; + } + + for (int i_coord{}; i_coord < dim; ++i_coord) { + ctps.push_back(this_coordinate_view[i_coord] * unweighing_factor); } - ctps.push_back(point); } // Create Spline and add it to list if constexpr (is_rational) { - bezier_list.push_back(std::make_shared( - // degrees - degrees, - // CTPS non-weighted - ctps, - // weights - weights)); + bezier_list.push_back( + splinepy::splines::SplinepyBase::SplinepyCreateRationalBezier( + para_dim, + dim, + degrees.data(), + ctps.data(), + weights.data())); } else { - bezier_list.push_back(std::make_shared( - // degrees - degrees, - // ctps - ctps)); + bezier_list.push_back( + splinepy::splines::SplinepyBase::SplinepyCreateBezier(para_dim, + dim, + degrees.data(), + ctps.data())); } } return bezier_list; diff --git a/cpp/splinepy/splines/helpers/scalar_type_wrapper.hpp b/cpp/splinepy/splines/helpers/scalar_type_wrapper.hpp index 1424c2628..49bf115ae 100644 --- a/cpp/splinepy/splines/helpers/scalar_type_wrapper.hpp +++ b/cpp/splinepy/splines/helpers/scalar_type_wrapper.hpp @@ -27,7 +27,7 @@ void ScalarTypeEvaluate(const SplineType& spline, if constexpr (std::is_scalar::value) { output[0] = static_cast(core_evaluated); } else { - for (std::size_t i{}; i < SplineType::kDim; ++i) { + for (std::size_t i{}; i < spline.SplinepyDim(); ++i) { output[i] = static_cast(core_evaluated[i]); } } @@ -120,7 +120,7 @@ void ScalarTypeDerivative(const SplineType& spline, if constexpr (std::is_scalar::value) { output[0] = static_cast(core_derived); } else { - for (std::size_t i{}; i < SplineType::kDim; ++i) { + for (std::size_t i{}; i < spline.SplinepyDim(); ++i) { output[i] = static_cast(core_derived[i]); } } @@ -165,7 +165,7 @@ void ScalarTypeJacobian(const SplineType& spline, if constexpr (std::is_scalar::value) { output[i] = static_cast(core_derived); } else { - for (std::size_t j{}; j < SplineType::kDim; ++j) { + for (std::size_t j{}; j < spline.SplinepyDim(); ++j) { output[j * SplineType::kParaDim + i] = static_cast(core_derived[j]); } diff --git a/cpp/splinepy/splines/nurbs.hpp b/cpp/splinepy/splines/nurbs.hpp index 78f7952c2..52c9954db 100644 --- a/cpp/splinepy/splines/nurbs.hpp +++ b/cpp/splinepy/splines/nurbs.hpp @@ -16,34 +16,27 @@ namespace splinepy::splines { /// @brief Non-uniform rational B-spline (NURBS) class /// @tparam para_dim Dimension of parametric space /// @tparam dim Dimension of physical space -template +template class Nurbs : public splinepy::splines::SplinepyBase, - public bsplinelib::splines::Nurbs { + public bsplinelib::splines::Nurbs { public: /// @brief Dimension of parametric space static constexpr int kParaDim = para_dim; - /// @brief Dimension of physical space - static constexpr int kDim = dim; /// @brief It is a rational spline static constexpr bool kIsRational = true; /// @brief It has knot vectors static constexpr bool kHasKnotVectors = true; - // TODO remove after test - /// @brief Dimension of parameter space - constexpr static int para_dim_ = para_dim; - /// @brief Dimension of physical space - constexpr static int dim_ = dim; - // self - template - using SelfTemplate_ = Nurbs; + template + using SelfTemplate_ = Nurbs; + using SelfBoundary_ = Nurbs; // splinepy using SplinepyBase_ = splinepy::splines::SplinepyBase; // splinelib - using Base_ = bsplinelib::splines::Nurbs; + using Base_ = bsplinelib::splines::Nurbs; // Parameter space using ParameterSpace_ = typename Base_::ParameterSpace_; using Degrees_ = typename ParameterSpace_::Degrees_; @@ -76,7 +69,9 @@ class Nurbs : public splinepy::splines::SplinepyBase, using IndexValue_ = typename Index_::Value_; // Advanced use using HomogeneousBSpline_ = typename Base_::HomogeneousBSpline_; - using Proximity_ = splinepy::proximity::Proximity>; + using ProximityBase_ = splinepy::proximity::ProximityBase; + template + using Proximity_ = splinepy::proximity::Proximity, dim>; /// @brief raw ptr based inithelper. /// @param degrees should have same size as parametric dimension @@ -87,7 +82,8 @@ class Nurbs : public splinepy::splines::SplinepyBase, static Base_ CreateBase(const int* degrees, const std::vector>& knot_vectors, const double* control_points, - const double* weights) { + const double* weights, + const int dim) { // process all the info and turn them into SplineLib types to initialize // Base_. @@ -124,11 +120,11 @@ class Nurbs : public splinepy::splines::SplinepyBase, std::make_shared(sl_knot_vectors, sl_degrees); // Formulate control_points and weights - sl_control_points.reserve(ncps * dim_); + sl_control_points.reserve(ncps * dim); sl_weights.reserve(ncps); for (std::size_t i{}; i < ncps; ++i) { - for (std::size_t j{}; j < kDim; ++j) { - sl_control_points.push_back(control_points[i * kDim + j]); + for (std::size_t j{}; j < dim; ++j) { + sl_control_points.push_back(control_points[i * dim + j]); } // weights @@ -136,7 +132,9 @@ class Nurbs : public splinepy::splines::SplinepyBase, } auto sl_weighted_space = - std::make_shared(sl_control_points, sl_weights); + std::make_shared(sl_control_points, + sl_weights, + dim); // return init return Base_(sl_parameter_space, sl_weighted_space); @@ -150,8 +148,10 @@ class Nurbs : public splinepy::splines::SplinepyBase, Nurbs(const int* degrees, const std::vector>& knot_vectors, const double* control_points, - const double* weights) - : Base_(CreateBase(degrees, knot_vectors, control_points, weights)) {} + const double* weights, + const int dim) + : Base_(CreateBase(degrees, knot_vectors, control_points, weights, dim)) { + } // inherit ctor using Base_::Base_; @@ -175,7 +175,9 @@ class Nurbs : public splinepy::splines::SplinepyBase, virtual int SplinepyParaDim() const { return kParaDim; } /// @copydoc splinepy::splines::SplinepyBase::SplinepyDim - virtual int SplinepyDim() const { return kDim; } + virtual int SplinepyDim() const { + return GetWeightedVectorSpace().GetProjectedDimensionality(); + } /// @copydoc splinepy::splines::SplinepyBase::SplinepySplineName virtual std::string SplinepySplineName() const { return "NURBS"; } @@ -239,16 +241,15 @@ class Nurbs : public splinepy::splines::SplinepyBase, // control_points and weights if (control_points || weights) { std::size_t ncps = vector_space.GetNumberOfCoordinates(); - // fill it up, phil! - for (std::size_t i{}; i < ncps; ++i) { - auto const& coord_named_phil = vector_space[bsplinelib::Index{ - static_cast(i)}]; + const int dim = SplinepyDim(); + for (int i{}; i < ncps; ++i) { + auto const coord_named_phil = vector_space[i]; // unweight - phil needs to first project before filling. if (control_points) { const auto projected_phil = WeightedVectorSpace_::Project(coord_named_phil); - for (std::size_t j{}; j < kDim; ++j) { - control_points[i * kDim + j] = + for (std::size_t j{}; j < dim; ++j) { + control_points[i * dim + j] = static_cast(projected_phil[j]); } } @@ -347,10 +348,7 @@ class Nurbs : public splinepy::splines::SplinepyBase, virtual void SplinepyPlantNewKdTreeForProximity(const int* resolutions, const int& nthreads) { - splinepy::splines::helpers::ScalarTypePlantNewKdTreeForProximity( - *this, - resolutions, - nthreads); + GetProximity().PlantNewKdTree(resolutions, nthreads); } /// Verbose proximity query - make sure to plant a kdtree first. @@ -424,13 +422,46 @@ class Nurbs : public splinepy::splines::SplinepyBase, } /// @brief Gets proximity - constexpr Proximity_& GetProximity() { return *proximity_; } + constexpr ProximityBase_& GetProximity() { + if (!proximity_) { + switch (SplinepyDim()) { + case 1: + proximity_ = std::make_unique>(*this); + case 2: + proximity_ = std::make_unique>(*this); + case 3: + proximity_ = std::make_unique>(*this); + case 4: + proximity_ = std::make_unique>(*this); + case 5: + proximity_ = std::make_unique>(*this); + case 6: + proximity_ = std::make_unique>(*this); + case 7: + proximity_ = std::make_unique>(*this); + case 8: + proximity_ = std::make_unique>(*this); + case 9: + proximity_ = std::make_unique>(*this); + case 10: + proximity_ = std::make_unique>(*this); + default: + splinepy::utils::PrintAndThrowError( + "Something went wrong during Proximity. Please help us by writing " + "an " + "issue about this case at [ github.com/tataratat/splinepy ]"); + } + } + return *proximity_; + } /// @brief Gets proximity - constexpr const Proximity_& GetProximity() const { return *proximity_; } + constexpr const ProximityBase_& GetProximity() const { + return GetProximity(); + } protected: /// @brief Unique pointer to proximity - std::unique_ptr proximity_ = std::make_unique(*this); + std::unique_ptr proximity_ = nullptr; }; /* class Nurbs */ diff --git a/cpp/splinepy/splines/rational_bezier.hpp b/cpp/splinepy/splines/rational_bezier.hpp index 7756fe68b..5e513a609 100644 --- a/cpp/splinepy/splines/rational_bezier.hpp +++ b/cpp/splinepy/splines/rational_bezier.hpp @@ -46,6 +46,7 @@ class RationalBezier : public splinepy::splines::SplinepyBase, // self template using SelfTemplate_ = RationalBezier; + using SelfBoundary_ = RationalBezier; // bezman using Base_ = RationalBezierSplineType; @@ -58,8 +59,9 @@ class RationalBezier : public splinepy::splines::SplinepyBase, using Derivative_ = typename std::array; using Dimension_ = std::size_t; // advanced use + using ProximityBase_ = splinepy::proximity::ProximityBase; using Proximity_ = - splinepy::proximity::Proximity>; + splinepy::proximity::Proximity, dim>; /// @brief Create base /// @param degrees @@ -296,10 +298,7 @@ class RationalBezier : public splinepy::splines::SplinepyBase, virtual void SplinepyPlantNewKdTreeForProximity(const int* resolutions, const int& nthreads) { - splinepy::splines::helpers::ScalarTypePlantNewKdTreeForProximity( - *this, - resolutions, - nthreads); + GetProximity().PlantNewKdTree(resolutions, nthreads); } /// Verbose proximity query - make sure to plant a kdtree first. @@ -740,13 +739,14 @@ class RationalBezier : public splinepy::splines::SplinepyBase, } /// @brief Get proximity - constexpr Proximity_& GetProximity() { return *proximity_; } + constexpr ProximityBase_& GetProximity() { return *proximity_; } /// @brief Get proximity - constexpr const Proximity_& GetProximity() const { return *proximity_; } + constexpr const ProximityBase_& GetProximity() const { return *proximity_; } protected: /// @brief Shared pointer to proximity - std::shared_ptr proximity_ = std::make_shared(*this); + std::shared_ptr proximity_ = + std::make_shared(*this); }; /* class RationalBezier */ diff --git a/third_party/BSplineLib b/third_party/BSplineLib index ffb376bfc..6b2a15b5d 160000 --- a/third_party/BSplineLib +++ b/third_party/BSplineLib @@ -1 +1 @@ -Subproject commit ffb376bfcc1bd743e321586e72368212f76f5838 +Subproject commit 6b2a15b5d983e0fd85893edee422a781f7f1563d