MCPcopy Create free account
hub / github.com/BIMCoderLiang/LNLib / TEST

Function TEST

tests/T_Clamp.cpp:10–112  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8using namespace LNLib;
9
10TEST(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.

Callers

nothing calls this directly

Calls 3

GetPointOnCurveFunction · 0.85
XYZWClass · 0.50
IsAlmostEqualToMethod · 0.45

Tested by

no test coverage detected