| | |
| |
|
| | #include <gtest/gtest.h> |
| |
|
| | #include <boost/core/ignore_unused.hpp> |
| | #include "Mod/Part/App/Geometry.h" |
| | #include <src/App/InitApplication.h> |
| | #include <BRepBuilderAPI_MakeVertex.hxx> |
| | #include "PartTestHelpers.h" |
| | #include "App/MappedElement.h" |
| |
|
| | |
| | |
| |
|
| | class GeometryTest: public ::testing::Test, public PartTestHelpers::PartTestHelperClass |
| | { |
| | protected: |
| | static void SetUpTestSuite() |
| | { |
| | tests::initApplication(); |
| | } |
| |
|
| | void SetUp() override |
| | { |
| | createTestDoc(); |
| | } |
| |
|
| | void TearDown() override |
| | {} |
| | }; |
| |
|
| | TEST_F(GeometryTest, testTrimBSpline) |
| | { |
| | |
| | |
| | |
| | int degree = 3; |
| | std::vector<Base::Vector3d> poles; |
| | poles.emplace_back(1, 0, 0); |
| | poles.emplace_back(1, 1, 0); |
| | poles.emplace_back(1, 0.5, 0); |
| | poles.emplace_back(0, 1, 0); |
| | poles.emplace_back(0, 0, 0); |
| | std::vector<double> weights(5, 1.0); |
| | std::vector<double> knotsNonPeriodic = {0.0, 1.0, 2.0}; |
| | std::vector<int> multiplicitiesNonPeriodic = {degree + 1, 1, degree + 1}; |
| | Part::GeomBSplineCurve nonPeriodicBSpline1( |
| | poles, |
| | weights, |
| | knotsNonPeriodic, |
| | multiplicitiesNonPeriodic, |
| | degree, |
| | false |
| | ); |
| | Part::GeomBSplineCurve nonPeriodicBSpline2( |
| | poles, |
| | weights, |
| | knotsNonPeriodic, |
| | multiplicitiesNonPeriodic, |
| | degree, |
| | false |
| | ); |
| | std::vector<double> knotsPeriodic = {0.0, 0.3, 1.0, 1.5, 1.8, 2.0}; |
| | double period = knotsPeriodic.back() - knotsPeriodic.front(); |
| | std::vector<int> multiplicitiesPeriodic(6, 1); |
| | Part::GeomBSplineCurve |
| | periodicBSpline1(poles, weights, knotsPeriodic, multiplicitiesPeriodic, degree, true); |
| | Part::GeomBSplineCurve |
| | periodicBSpline2(poles, weights, knotsPeriodic, multiplicitiesPeriodic, degree, true); |
| | |
| | double param1 = 0.5, param2 = 1.4; |
| | |
| |
|
| | |
| | periodicBSpline1.Trim(param1, param2); |
| | periodicBSpline2.Trim(param2, param1); |
| | nonPeriodicBSpline1.Trim(param1, param2); |
| | |
| | nonPeriodicBSpline2.Trim(param2, param1); |
| |
|
| | |
| | EXPECT_DOUBLE_EQ(periodicBSpline1.getFirstParameter(), param1); |
| | EXPECT_DOUBLE_EQ(periodicBSpline1.getLastParameter(), param2); |
| | EXPECT_DOUBLE_EQ(periodicBSpline2.getFirstParameter(), param2); |
| | EXPECT_DOUBLE_EQ(periodicBSpline2.getLastParameter(), param1 + period); |
| | EXPECT_DOUBLE_EQ(nonPeriodicBSpline1.getFirstParameter(), param1); |
| | EXPECT_DOUBLE_EQ(nonPeriodicBSpline1.getLastParameter(), param2); |
| | } |
| |
|