| 8 | using namespace LNLib; |
| 9 | |
| 10 | TEST(Test_Clamp, All) |
| 11 | { |
| 12 | int degree = 2; |
| 13 | std::vector<double> kv = { 0,0,0,1.0 / 4,1.0 / 4,1.0 / 2,1.0 / 2,3.0 / 4,3.0 / 4,1,1,1 }; |
| 14 | XYZW P0 = XYZW(10, 0, 0, 1); |
| 15 | XYZW P1 = XYZW(10, 10, 0, 1); |
| 16 | XYZW P2 = XYZW(0, 10, 0, 1); |
| 17 | XYZW P3 = XYZW(-10, 10, 0, 1); |
| 18 | XYZW P4 = XYZW(-10, 0, 0, 1); |
| 19 | XYZW P5 = XYZW(-10, -10, 0, 1); |
| 20 | XYZW P6 = XYZW(0, -10, 0, 1); |
| 21 | XYZW P7 = XYZW(10, -10, 0, 1); |
| 22 | XYZW P8 = XYZW(10, 0, 0, 1); |
| 23 | std::vector<XYZW> cps = { P0,P1,P2,P3,P4,P5,P6,P7,P8 }; |
| 24 | |
| 25 | LN_NurbsCurve curve; |
| 26 | curve.Degree = degree; |
| 27 | curve.KnotVector = kv; |
| 28 | curve.ControlPoints = cps; |
| 29 | EXPECT_TRUE(NurbsCurve::IsClamp(curve)); |
| 30 | EXPECT_TRUE(NurbsCurve::IsClosed(curve)); |
| 31 | XYZ checkP = NurbsCurve::GetPointOnCurve(curve, 0.5); |
| 32 | |
| 33 | LN_NurbsCurve result; |
| 34 | NurbsCurve::ToUnclampCurve(curve, result); |
| 35 | EXPECT_TRUE(NurbsCurve::IsClosed(result)); |
| 36 | curve = result; |
| 37 | EXPECT_FALSE(NurbsCurve::IsClamp(curve)); |
| 38 | XYZ newP = NurbsCurve::GetPointOnCurve(curve, 0.5); |
| 39 | EXPECT_TRUE(checkP.IsAlmostEqualTo(newP)); |
| 40 | |
| 41 | auto kvCopy = curve.KnotVector; |
| 42 | EXPECT_TRUE(MathUtils::IsAlmostEqualTo(kvCopy[0], -1.0 / 4)); |
| 43 | EXPECT_TRUE(MathUtils::IsAlmostEqualTo(kvCopy[1], -1.0 / 4)); |
| 44 | EXPECT_TRUE(MathUtils::IsAlmostEqualTo(kvCopy[2], 0)); |
| 45 | EXPECT_TRUE(MathUtils::IsAlmostEqualTo(kvCopy[3], 1.0 / 4)); |
| 46 | EXPECT_TRUE(MathUtils::IsAlmostEqualTo(kvCopy[4], 1.0 / 4)); |
| 47 | EXPECT_TRUE(MathUtils::IsAlmostEqualTo(kvCopy[5], 1.0 / 2)); |
| 48 | EXPECT_TRUE(MathUtils::IsAlmostEqualTo(kvCopy[6], 1.0 / 2)); |
| 49 | EXPECT_TRUE(MathUtils::IsAlmostEqualTo(kvCopy[7], 3.0 / 4)); |
| 50 | EXPECT_TRUE(MathUtils::IsAlmostEqualTo(kvCopy[8], 3.0 / 4)); |
| 51 | EXPECT_TRUE(MathUtils::IsAlmostEqualTo(kvCopy[9], 1)); |
| 52 | EXPECT_TRUE(MathUtils::IsAlmostEqualTo(kvCopy[10], 5.0 / 4)); |
| 53 | EXPECT_TRUE(MathUtils::IsAlmostEqualTo(kvCopy[11], 5.0 / 4)); |
| 54 | |
| 55 | NurbsCurve::ToClampCurve(curve, result); |
| 56 | EXPECT_TRUE(NurbsCurve::IsClamp(result)); |
| 57 | EXPECT_TRUE(NurbsCurve::IsClosed(result)); |
| 58 | XYZ reCheckP = NurbsCurve::GetPointOnCurve(result, 0.5); |
| 59 | EXPECT_TRUE(checkP.IsAlmostEqualTo(reCheckP)); |
| 60 | |
| 61 | std::vector<double> k1 = { 0,0,0,0,1,2,3,4,4,4,4 }; |
| 62 | std::vector<double> k2 = { -0.5,-0.5,-0.5,1,2.5,4,4,4 }; |
| 63 | EXPECT_TRUE(KnotVectorUtils::IsUniform(k1)); |
| 64 | EXPECT_TRUE(KnotVectorUtils::IsUniform(k2)); |
| 65 | LN_NurbsCurve curveK1; |
| 66 | curveK1.Degree = 3; |
| 67 | curveK1.KnotVector = k1;// ignore control points. |
nothing calls this directly
no test coverage detected