| 9 | using namespace LNLib; |
| 10 | |
| 11 | TEST(Test_Fundamental, All) |
| 12 | { |
| 13 | { |
| 14 | int degree = 3; |
| 15 | std::vector<double> kv = { 0,0,0,0,1,2,3,4,5,5,5,5 }; |
| 16 | double insertKnot = 2.0; |
| 17 | |
| 18 | XYZW P0 = XYZW(XYZ(0, 0, 0), 1); |
| 19 | XYZW P1 = XYZW(XYZ(1, 5, 0), 1); |
| 20 | XYZW P2 = XYZW(XYZ(2, 10, 0), 1); |
| 21 | XYZW P3 = XYZW(XYZ(3, 15, 0), 1); |
| 22 | XYZW P4 = XYZW(XYZ(4, 20, 0), 1); |
| 23 | XYZW P5 = XYZW(XYZ(5, 15, 0), 1); |
| 24 | XYZW P6 = XYZW(XYZ(6, 10, 0), 1); |
| 25 | XYZW P7 = XYZW(XYZ(7, 5, 0), 1); |
| 26 | |
| 27 | std::vector<XYZW> cp = { P0,P1,P2,P3,P4,P5,P6,P7 }; |
| 28 | |
| 29 | LN_NurbsCurve curve; |
| 30 | curve.Degree = degree; |
| 31 | curve.KnotVector = kv; |
| 32 | curve.ControlPoints = cp; |
| 33 | |
| 34 | LN_NurbsCurve newCurve; |
| 35 | NurbsCurve::InsertKnot(curve, insertKnot, 1, newCurve); |
| 36 | |
| 37 | auto newKv = newCurve.KnotVector; |
| 38 | auto newCp = newCurve.ControlPoints; |
| 39 | |
| 40 | EXPECT_TRUE(newKv.size() == kv.size() + 1 && |
| 41 | MathUtils::IsAlmostEqualTo(newKv[5], newKv[6]) && |
| 42 | MathUtils::IsAlmostEqualTo(newKv[5], 2.0)); |
| 43 | EXPECT_TRUE(newCp[3].IsAlmostEqualTo(2.0 / 3 * P3 + 1.0 / 3 * P2)); |
| 44 | EXPECT_TRUE(newCp[4].IsAlmostEqualTo(1.0 / 3 * P4 + 2.0 / 3 * P3)); |
| 45 | EXPECT_TRUE(newCp[5].IsAlmostEqualTo(P4)); |
| 46 | } |
| 47 | |
| 48 | { |
| 49 | int degree = 2; |
| 50 | std::vector<double> kv = { 0,0,0,1,2,3,3,3 }; |
| 51 | std::vector<XYZW> cps = { XYZW(XYZ(0,0,0),1), XYZW(XYZ(1,1,0),4), XYZW(XYZ(3,2,0),1), XYZW(XYZ(4,1,0),1), XYZW(XYZ(5,-1,0),1) }; |
| 52 | |
| 53 | LN_NurbsCurve curve; |
| 54 | curve.Degree = degree; |
| 55 | curve.KnotVector = kv; |
| 56 | curve.ControlPoints = cps; |
| 57 | XYZ result = NurbsCurve::GetPointOnCurveByCornerCut(curve, 1.0); |
| 58 | EXPECT_TRUE(result.IsAlmostEqualTo(XYZ(7.0 / 5, 6.0 / 5, 0))); |
| 59 | } |
| 60 | |
| 61 | { |
| 62 | int degree = 3; |
| 63 | std::vector<double> kvU = { 0,0,0,0,1,2,3,4,5,5,5,5 }; |
| 64 | std::vector<double> kvV = { 0,0,0,1,1,1 }; |
| 65 | double insertKnot = 2.0; |
| 66 | |
| 67 | XYZW P00 = XYZW(XYZ(0, 0, 0), 1); |
| 68 | XYZW P10 = XYZW(XYZ(1, 5, 0), 1); |
nothing calls this directly
no test coverage detected