| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // Copyright Contributors to the OpenVDB Project | ||
| 2 | // SPDX-License-Identifier: MPL-2.0 | ||
| 3 | |||
| 4 | #include "TestHarness.h" | ||
| 5 | |||
| 6 | #include <openvdb_ax/ax.h> | ||
| 7 | |||
| 8 | #include <openvdb/points/PointDataGrid.h> | ||
| 9 | #include <openvdb/points/PointGroup.h> | ||
| 10 | #include <openvdb/points/PointConversion.h> | ||
| 11 | #include <openvdb/points/AttributeArray.h> | ||
| 12 | |||
| 13 | #include <openvdb/math/Transform.h> | ||
| 14 | #include <openvdb/openvdb.h> | ||
| 15 | |||
| 16 | #include <cppunit/extensions/HelperMacros.h> | ||
| 17 | |||
| 18 | #include <limits> | ||
| 19 | |||
| 20 | using namespace openvdb::points; | ||
| 21 | |||
| 22 |
2/4✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
|
3 | class TestWorldSpaceAccessors: public unittest_util::AXTestCase |
| 23 | { | ||
| 24 | public: | ||
| 25 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | CPPUNIT_TEST_SUITE(TestWorldSpaceAccessors); |
| 26 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
6 | CPPUNIT_TEST(testWorldSpaceAssign); |
| 27 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
6 | CPPUNIT_TEST(testWorldSpaceAssignComponent); |
| 28 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
6 | CPPUNIT_TEST(testWorldSpaceAssignBound); |
| 29 | |||
| 30 |
4/8✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
|
4 | CPPUNIT_TEST_SUITE_END(); |
| 31 | |||
| 32 | void testWorldSpaceAssign(); | ||
| 33 | void testWorldSpaceAssignComponent(); | ||
| 34 | void testWorldSpaceAssignBound(); | ||
| 35 | }; | ||
| 36 | |||
| 37 | CPPUNIT_TEST_SUITE_REGISTRATION(TestWorldSpaceAccessors); | ||
| 38 | |||
| 39 | void | ||
| 40 | 1 | TestWorldSpaceAccessors::testWorldSpaceAssign() | |
| 41 | { | ||
| 42 | std::vector<openvdb::Vec3d> positions = | ||
| 43 | {openvdb::Vec3d(0.0, 0.0, 0.0), | ||
| 44 | openvdb::Vec3d(0.0, 0.0, 0.05), | ||
| 45 | openvdb::Vec3d(0.0, 1.0, 0.0), | ||
| 46 | 1 | openvdb::Vec3d(1.0, 1.0, 0.0)}; | |
| 47 | |||
| 48 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
|
1 | CPPUNIT_ASSERT(mHarness.mInputPointGrids.size() > 0); |
| 49 | PointDataGrid::Ptr grid = mHarness.mInputPointGrids.back(); | ||
| 50 | |||
| 51 | openvdb::points::PointDataTree* tree = &(grid->tree()); | ||
| 52 | |||
| 53 | // @note snippet moves all points to a single leaf node | ||
| 54 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
1 | CPPUNIT_ASSERT_EQUAL(openvdb::points::pointCount(*tree), openvdb::Index64(4)); |
| 55 | |||
| 56 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | const std::string code = unittest_util::loadText("test/snippets/worldspace/worldSpaceAssign"); |
| 57 |
5/36✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
|
4 | CPPUNIT_ASSERT_NO_THROW(openvdb::ax::run(code.c_str(), *grid)); |
| 58 | |||
| 59 | // Tree is modified if points are moved | ||
| 60 | tree = &(grid->tree()); | ||
| 61 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
1 | CPPUNIT_ASSERT_EQUAL(openvdb::points::pointCount(*tree), openvdb::Index64(4)); |
| 62 | |||
| 63 | // test that P_original has the world-space value of the P attribute prior to running this snippet. | ||
| 64 | // test that P_new has the expected world-space P value | ||
| 65 | |||
| 66 | PointDataTree::LeafCIter leaf = tree->cbeginLeaf(); | ||
| 67 | const openvdb::math::Transform& transform = grid->transform(); | ||
| 68 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
|
2 | for (; leaf; ++leaf) |
| 69 | { | ||
| 70 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
|
2 | CPPUNIT_ASSERT(leaf->pointCount() == 4); |
| 71 | |||
| 72 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
2 | AttributeHandle<openvdb::Vec3f>::Ptr pOriginalHandle = AttributeHandle<openvdb::Vec3f>::create(leaf->attributeArray("P_original")); |
| 73 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
2 | AttributeHandle<openvdb::Vec3f>::Ptr pNewHandle = AttributeHandle<openvdb::Vec3f>::create(leaf->attributeArray("P_new")); |
| 74 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
2 | AttributeHandle<openvdb::Vec3f>::Ptr pHandle = AttributeHandle<openvdb::Vec3f>::create(leaf->attributeArray("P")); |
| 75 | |||
| 76 |
2/2✓ Branch 1 taken 512 times.
✓ Branch 2 taken 1 times.
|
514 | for (auto voxel = leaf->cbeginValueAll(); voxel; ++voxel) { |
| 77 |
1/2✓ Branch 1 taken 512 times.
✗ Branch 2 not taken.
|
512 | const openvdb::Coord& coord = voxel.getCoord(); |
| 78 | auto iter = leaf->beginIndexVoxel(coord); | ||
| 79 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 512 times.
|
516 | for (; iter; ++iter) { |
| 80 | |||
| 81 | const openvdb::Index idx = *iter; | ||
| 82 | |||
| 83 | // test that the value for P_original | ||
| 84 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | const openvdb::Vec3f& oldPosition = positions[idx]; |
| 85 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | const openvdb::Vec3f& pOriginal = pOriginalHandle->get(idx); |
| 86 | |||
| 87 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_EQUAL(oldPosition.x(), pOriginal.x()); |
| 88 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_EQUAL(oldPosition.y(), pOriginal.y()); |
| 89 |
5/10✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
|
4 | CPPUNIT_ASSERT_EQUAL(oldPosition.z(), pOriginal.z()); |
| 90 | |||
| 91 | // test that the value for P_new, which should be the world space value of the points | ||
| 92 | const openvdb::Vec3f newPosition = openvdb::Vec3f(2.22f, 3.33f, 4.44f); | ||
| 93 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | const openvdb::Vec3f& pNew = pNewHandle->get(idx); |
| 94 | |||
| 95 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_EQUAL(newPosition.x(), pNew.x()); |
| 96 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_EQUAL(newPosition.y(), pNew.y()); |
| 97 |
5/10✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
|
4 | CPPUNIT_ASSERT_EQUAL(newPosition.z(), pNew.z()); |
| 98 | |||
| 99 | // test that the value for P, which should be the updated voxel space value of the points | ||
| 100 | const openvdb::Vec3f voxelSpacePosition = openvdb::Vec3f(0.2f, 0.3f, 0.4f); | ||
| 101 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | const openvdb::Vec3f& pVoxelSpace = pHandle->get(idx); |
| 102 | // @todo: look at improving precision | ||
| 103 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(voxelSpacePosition.x(), pVoxelSpace.x(), 1e-5); |
| 104 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(voxelSpacePosition.y(), pVoxelSpace.y(), 1e-5); |
| 105 |
5/10✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(voxelSpacePosition.z(), pVoxelSpace.z(), 1e-5); |
| 106 | |||
| 107 | // test that the value for P, which should be the updated world space value of the points | ||
| 108 | const openvdb::Vec3f positionWS = openvdb::Vec3f(2.22f, 3.33f, 4.44f); | ||
| 109 |
1/4✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
4 | const openvdb::Vec3f pWS = transform.indexToWorld(coord.asVec3d() + pHandle->get(idx)); |
| 110 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(positionWS.x(), pWS.x(), std::numeric_limits<float>::epsilon()); |
| 111 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(positionWS.y(), pWS.y(), std::numeric_limits<float>::epsilon()); |
| 112 |
6/10✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 15 taken 3 times.
✓ Branch 16 taken 1 times.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(positionWS.z(), pWS.z(), std::numeric_limits<float>::epsilon()); |
| 113 | } | ||
| 114 | } | ||
| 115 | } | ||
| 116 | 1 | } | |
| 117 | |||
| 118 | |||
| 119 | void | ||
| 120 | 1 | TestWorldSpaceAccessors::testWorldSpaceAssignComponent() | |
| 121 | { | ||
| 122 | std::vector<openvdb::Vec3d> positions = | ||
| 123 | {openvdb::Vec3d(0.0, 0.0, 0.0), | ||
| 124 | openvdb::Vec3d(0.0, 0.0, 0.05), | ||
| 125 | openvdb::Vec3d(0.0, 1.0, 0.0), | ||
| 126 | 1 | openvdb::Vec3d(1.0, 1.0, 0.0)}; | |
| 127 | |||
| 128 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
|
1 | CPPUNIT_ASSERT(mHarness.mInputPointGrids.size() > 0); |
| 129 | PointDataGrid::Ptr grid = mHarness.mInputPointGrids.back(); | ||
| 130 | |||
| 131 | openvdb::points::PointDataTree& tree = grid->tree(); | ||
| 132 | |||
| 133 |
1/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
1 | const openvdb::Index64 originalCount = pointCount(tree); |
| 134 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
|
1 | CPPUNIT_ASSERT(originalCount > 0); |
| 135 | |||
| 136 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | const std::string code = unittest_util::loadText("test/snippets/worldspace/worldSpaceAssignComponent"); |
| 137 |
5/36✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
|
4 | CPPUNIT_ASSERT_NO_THROW(openvdb::ax::run(code.c_str(), *grid)); |
| 138 | |||
| 139 | // test that P_original has the world-space value of the P attribute prior to running this snippet. | ||
| 140 | // test that P_new has the expected world-space P value | ||
| 141 | |||
| 142 | PointDataTree::LeafCIter leaf = grid->tree().cbeginLeaf(); | ||
| 143 | const openvdb::math::Transform& transform = grid->transform(); | ||
| 144 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
|
3 | for (; leaf; ++leaf) |
| 145 | { | ||
| 146 |
4/8✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
4 | AttributeHandle<float>::Ptr pXOriginalHandle = AttributeHandle<float>::create(leaf->attributeArray("Px_original")); |
| 147 |
4/8✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
4 | AttributeHandle<float>::Ptr pNewHandle = AttributeHandle<float>::create(leaf->attributeArray("Px_new")); |
| 148 |
3/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
|
4 | AttributeHandle<openvdb::Vec3f>::Ptr pHandle = AttributeHandle<openvdb::Vec3f>::create(leaf->attributeArray("P")); |
| 149 | |||
| 150 |
2/2✓ Branch 1 taken 1024 times.
✓ Branch 2 taken 2 times.
|
1028 | for (auto voxel = leaf->cbeginValueAll(); voxel; ++voxel) { |
| 151 |
1/2✓ Branch 1 taken 1024 times.
✗ Branch 2 not taken.
|
1024 | const openvdb::Coord& coord = voxel.getCoord(); |
| 152 | auto iter = leaf->beginIndexVoxel(coord); | ||
| 153 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1024 times.
|
1028 | for (; iter; ++iter) { |
| 154 | const openvdb::Index idx = *iter; | ||
| 155 | |||
| 156 | //@todo: requiring the point order, we should check the values of the px_original | ||
| 157 | // test that the value for P_original | ||
| 158 | // const float oldPosition = positions[idx].x(); | ||
| 159 | // const float pXOriginal = pXOriginalHandle->get(idx); | ||
| 160 | |||
| 161 | // CPPUNIT_ASSERT_EQUAL(oldPosition, pOriginal.x()); | ||
| 162 | |||
| 163 | // test that the value for P_new, which should be the world space value of the points | ||
| 164 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | const float newX = 5.22f; |
| 165 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | const float pNewX = pNewHandle->get(idx); |
| 166 | |||
| 167 |
5/10✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
|
4 | CPPUNIT_ASSERT_EQUAL(newX, pNewX); |
| 168 | |||
| 169 | // test that the value for P, which should be the updated voxel space value of the points | ||
| 170 | const float voxelSpacePosition = 0.2f; | ||
| 171 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | const openvdb::Vec3f& pVoxelSpace = pHandle->get(idx); |
| 172 | // @todo: look at improving precision | ||
| 173 |
5/10✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(voxelSpacePosition, pVoxelSpace.x(), 1e-5); |
| 174 | //@todo: requiring point order, check the y and z components are unchanged | ||
| 175 | // CPPUNIT_ASSERT_DOUBLES_EQUAL(voxelSpacePosition.y(), pVoxelSpace.y(), 1e-6); | ||
| 176 | // CPPUNIT_ASSERT_DOUBLES_EQUAL(voxelSpacePosition.z(), pVoxelSpace.z(), 1e-6); | ||
| 177 | |||
| 178 | // test that the value for P, which should be the updated world space value of the points | ||
| 179 | const float positionWSX = 5.22f; | ||
| 180 |
1/4✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
4 | const openvdb::Vec3f pWS = transform.indexToWorld(coord.asVec3d() + pHandle->get(idx)); |
| 181 |
6/10✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 15 taken 1 times.
✓ Branch 16 taken 3 times.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(positionWSX, pWS.x(), std::numeric_limits<float>::epsilon()); |
| 182 | //@todo: requiring point order, check the y and z components are unchanged | ||
| 183 | // CPPUNIT_ASSERT_DOUBLES_EQUAL(positionWS.y(), pWS.y(), std::numeric_limits<float>::epsilon()); | ||
| 184 | // CPPUNIT_ASSERT_DOUBLES_EQUAL(positionWS.z(), pWS.z(), std::numeric_limits<float>::epsilon()); | ||
| 185 | } | ||
| 186 | } | ||
| 187 | } | ||
| 188 | 1 | } | |
| 189 | |||
| 190 | void | ||
| 191 | 1 | TestWorldSpaceAccessors::testWorldSpaceAssignBound() | |
| 192 | { | ||
| 193 | std::vector<openvdb::Vec3d> positions = | ||
| 194 | {openvdb::Vec3d(0.0, 0.0, 0.0), | ||
| 195 | openvdb::Vec3d(0.0, 0.0, 0.05), | ||
| 196 | openvdb::Vec3d(0.0, 1.0, 0.0), | ||
| 197 | 1 | openvdb::Vec3d(1.0, 1.0, 0.0)}; | |
| 198 | |||
| 199 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
|
1 | CPPUNIT_ASSERT(mHarness.mInputPointGrids.size() > 0); |
| 200 | PointDataGrid::Ptr grid = mHarness.mInputPointGrids.back(); | ||
| 201 | |||
| 202 | openvdb::points::PointDataTree* tree = &(grid->tree()); | ||
| 203 | |||
| 204 | // @note snippet moves all points to a single leaf node | ||
| 205 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
1 | CPPUNIT_ASSERT_EQUAL(openvdb::points::pointCount(*tree), openvdb::Index64(4)); |
| 206 | |||
| 207 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | const std::string code = unittest_util::loadText("test/snippets/worldspace/worldSpaceAssignBound"); |
| 208 |
9/44✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✓ Branch 24 taken 1 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
|
5 | CPPUNIT_ASSERT_NO_THROW(openvdb::ax::run(code.c_str(), *grid, {{"pos","P"}})); |
| 209 | |||
| 210 | // Tree is modified if points are moved | ||
| 211 | tree = &(grid->tree()); | ||
| 212 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
1 | CPPUNIT_ASSERT_EQUAL(openvdb::points::pointCount(*tree), openvdb::Index64(4)); |
| 213 | |||
| 214 | // test that P_original has the world-space value of the P attribute prior to running this snippet. | ||
| 215 | // test that P_new has the expected world-space P value | ||
| 216 | |||
| 217 | PointDataTree::LeafCIter leaf = tree->cbeginLeaf(); | ||
| 218 | const openvdb::math::Transform& transform = grid->transform(); | ||
| 219 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
|
2 | for (; leaf; ++leaf) |
| 220 | { | ||
| 221 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
|
2 | CPPUNIT_ASSERT(leaf->pointCount() == 4); |
| 222 | |||
| 223 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
2 | AttributeHandle<openvdb::Vec3f>::Ptr pOriginalHandle = AttributeHandle<openvdb::Vec3f>::create(leaf->attributeArray("P_original")); |
| 224 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
2 | AttributeHandle<openvdb::Vec3f>::Ptr pNewHandle = AttributeHandle<openvdb::Vec3f>::create(leaf->attributeArray("P_new")); |
| 225 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
2 | AttributeHandle<openvdb::Vec3f>::Ptr pHandle = AttributeHandle<openvdb::Vec3f>::create(leaf->attributeArray("P")); |
| 226 | |||
| 227 |
2/2✓ Branch 1 taken 512 times.
✓ Branch 2 taken 1 times.
|
514 | for (auto voxel = leaf->cbeginValueAll(); voxel; ++voxel) { |
| 228 |
1/2✓ Branch 1 taken 512 times.
✗ Branch 2 not taken.
|
512 | const openvdb::Coord& coord = voxel.getCoord(); |
| 229 | auto iter = leaf->beginIndexVoxel(coord); | ||
| 230 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 512 times.
|
516 | for (; iter; ++iter) { |
| 231 | |||
| 232 | const openvdb::Index idx = *iter; | ||
| 233 | |||
| 234 | // test that the value for P_original | ||
| 235 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | const openvdb::Vec3f& oldPosition = positions[idx]; |
| 236 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | const openvdb::Vec3f& pOriginal = pOriginalHandle->get(idx); |
| 237 | |||
| 238 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_EQUAL(oldPosition.x(), pOriginal.x()); |
| 239 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_EQUAL(oldPosition.y(), pOriginal.y()); |
| 240 |
5/10✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
|
4 | CPPUNIT_ASSERT_EQUAL(oldPosition.z(), pOriginal.z()); |
| 241 | |||
| 242 | // test that the value for P_new, which should be the world space value of the points | ||
| 243 | const openvdb::Vec3f newPosition = openvdb::Vec3f(2.22f, 3.33f, 4.44f); | ||
| 244 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | const openvdb::Vec3f& pNew = pNewHandle->get(idx); |
| 245 | |||
| 246 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_EQUAL(newPosition.x(), pNew.x()); |
| 247 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_EQUAL(newPosition.y(), pNew.y()); |
| 248 |
5/10✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
|
4 | CPPUNIT_ASSERT_EQUAL(newPosition.z(), pNew.z()); |
| 249 | |||
| 250 | // test that the value for P, which should be the updated voxel space value of the points | ||
| 251 | const openvdb::Vec3f voxelSpacePosition = openvdb::Vec3f(0.2f, 0.3f, 0.4f); | ||
| 252 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | const openvdb::Vec3f& pVoxelSpace = pHandle->get(idx); |
| 253 | // @todo: look at improving precision | ||
| 254 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(voxelSpacePosition.x(), pVoxelSpace.x(), 1e-5); |
| 255 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(voxelSpacePosition.y(), pVoxelSpace.y(), 1e-5); |
| 256 |
5/10✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(voxelSpacePosition.z(), pVoxelSpace.z(), 1e-5); |
| 257 | |||
| 258 | // test that the value for P, which should be the updated world space value of the points | ||
| 259 | const openvdb::Vec3f positionWS = openvdb::Vec3f(2.22f, 3.33f, 4.44f); | ||
| 260 |
1/4✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
4 | const openvdb::Vec3f pWS = transform.indexToWorld(coord.asVec3d() + pHandle->get(idx)); |
| 261 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(positionWS.x(), pWS.x(), std::numeric_limits<float>::epsilon()); |
| 262 |
4/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(positionWS.y(), pWS.y(), std::numeric_limits<float>::epsilon()); |
| 263 |
6/10✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 15 taken 3 times.
✓ Branch 16 taken 1 times.
|
4 | CPPUNIT_ASSERT_DOUBLES_EQUAL(positionWS.z(), pWS.z(), std::numeric_limits<float>::epsilon()); |
| 264 | } | ||
| 265 | } | ||
| 266 | } | ||
| 267 | 1 | } | |
| 268 | |||
| 269 | |||
| 270 | |||
| 271 |