Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
184 changes: 1 addition & 183 deletions openvdb/openvdb/unittest/TestFile.cc

Large diffs are not rendered by default.

57 changes: 55 additions & 2 deletions openvdb/openvdb/unittest/TestLeafBool.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <openvdb/Types.h>
#include <openvdb/tools/Filter.h>
#include <openvdb/util/logging.h>
#include <openvdb/io/io.h>
#include "util.h" // for unittest_util::makeSphere()
#include <gtest/gtest.h>
#include <set>
Expand Down Expand Up @@ -293,6 +294,60 @@ TEST_F(TestLeafBool, testIO)
leaf.setValueOn(openvdb::Coord(0, 1, 0));
leaf.setValueOn(openvdb::Coord(1, 0, 0));

// read and write topology to disk

{
// create a grid with the leaf for topology testing
typedef openvdb::Grid<openvdb::tree::Tree<openvdb::tree::RootNode<
openvdb::tree::InternalNode<openvdb::tree::InternalNode<LeafType, 4>, 5>>>> BoolGrid;
BoolGrid::Ptr grid = BoolGrid::create();
grid->setName("bool_leaf");
grid->tree().addLeaf(new LeafType(leaf));

openvdb::GridCPtrVec grids;
grids.push_back(grid);

// write to file
{
openvdb::io::File file("leaf_bool.vdb");
file.write(grids);
file.close();
}

// read grid from file
BoolGrid::Ptr gridFromDisk;
{
openvdb::io::File file("leaf_bool.vdb");
file.open();
openvdb::GridBase::Ptr baseGrid = file.readGrid("bool_leaf");
file.close();

gridFromDisk = openvdb::gridPtrCast<BoolGrid>(baseGrid);
}

LeafType* leaf2 = gridFromDisk->tree().probeLeaf(origin);
EXPECT_TRUE(leaf2);

// check topology and values match

EXPECT_EQ(origin, leaf2->origin());
EXPECT_TRUE(leaf2->isValueOn(openvdb::Coord(0, 1, 0)));
EXPECT_TRUE(leaf2->isValueOn(openvdb::Coord(1, 0, 0)));
EXPECT_TRUE(leaf2->onVoxelCount() == 2);

remove("leaf_bool.vdb");
}
}


TEST_F(TestLeafBool, testTreeIO)
{
LeafType leaf(openvdb::Coord(1, 3, 5));
const openvdb::Coord origin = leaf.origin();

leaf.setValueOn(openvdb::Coord(0, 1, 0));
leaf.setValueOn(openvdb::Coord(1, 0, 0));

std::ostringstream ostr(std::ios_base::binary);

leaf.writeBuffers(ostr);
Expand All @@ -301,8 +356,6 @@ TEST_F(TestLeafBool, testIO)
leaf.setValueOn(openvdb::Coord(0, 1, 1));

std::istringstream istr(ostr.str(), std::ios_base::binary);
// Since the input stream doesn't include a VDB header with file format version info,
// tag the input stream explicitly with the current version number.
openvdb::io::setCurrentVersion(istr);

leaf.readBuffers(istr);
Expand Down
136 changes: 128 additions & 8 deletions openvdb/openvdb/unittest/TestLeafIO.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@
// SPDX-License-Identifier: Apache-2.0

#include <openvdb/Exceptions.h>
#include <openvdb/openvdb.h>
#include <openvdb/tree/LeafNode.h>
#include <openvdb/Types.h>
#include <openvdb/io/io.h>
#include <gtest/gtest.h>

#include <cctype> // for toupper()
Expand All @@ -15,13 +17,73 @@ class TestLeafIO
{
public:
static void testBuffer();
static void testTreeIO();
};

template<typename T>
void
TestLeafIO<T>::testBuffer()
{
openvdb::tree::LeafNode<T, 3> leaf(openvdb::Coord(0, 0, 0));
using LeafT = openvdb::tree::LeafNode<T, 3>;
LeafT leaf(openvdb::Coord(0, 0, 0));
const openvdb::Coord origin = leaf.origin();

leaf.setValueOn(openvdb::Coord(0, 1, 0), T(1));
leaf.setValueOn(openvdb::Coord(1, 0, 0), T(1));

// read and write topology to disk

{
// create a grid with the leaf for topology testing
typedef openvdb::Grid<openvdb::tree::Tree<openvdb::tree::RootNode<
openvdb::tree::InternalNode<openvdb::tree::InternalNode<LeafT, 4>, 5>>>> GridType;
if (!GridType::isRegistered()) GridType::registerGrid();

typename GridType::Ptr grid = GridType::create();
grid->setName("leaf_io");
grid->tree().addLeaf(new LeafT(leaf));

openvdb::GridCPtrVec grids;
grids.push_back(grid);

// write to file
{
openvdb::io::File file("leaf_io.vdb");
file.write(grids);
file.close();
}

// read grid from file
typename GridType::Ptr gridFromDisk;
{
openvdb::io::File file("leaf_io.vdb");
file.open();
openvdb::GridBase::Ptr baseGrid = file.readGrid("leaf_io");
file.close();

gridFromDisk = openvdb::gridPtrCast<GridType>(baseGrid);
}

LeafT* leaf2 = gridFromDisk->tree().probeLeaf(origin);
EXPECT_TRUE(leaf2);

// check topology and values match

EXPECT_NEAR(T(1), leaf2->getValue(openvdb::Coord(0, 1, 0)), /*tolerance=*/0);
EXPECT_NEAR(T(1), leaf2->getValue(openvdb::Coord(1, 0, 0)), /*tolerance=*/0);
EXPECT_TRUE(leaf2->onVoxelCount() == 2);

remove("leaf_io.vdb");
}
}


template<typename T>
void
TestLeafIO<T>::testTreeIO()
{
using LeafT = openvdb::tree::LeafNode<T, 3>;
LeafT leaf(openvdb::Coord(0, 0, 0));

leaf.setValueOn(openvdb::Coord(0, 1, 0), T(1));
leaf.setValueOn(openvdb::Coord(1, 0, 0), T(1));
Expand All @@ -34,9 +96,6 @@ TestLeafIO<T>::testBuffer()
leaf.setValueOn(openvdb::Coord(0, 1, 1), T(1));

std::istringstream istr(ostr.str(), std::ios_base::binary);

// Since the input stream doesn't include a VDB header with file format version info,
// tag the input stream explicitly with the current version number.
openvdb::io::setCurrentVersion(istr);

leaf.readBuffers(istr);
Expand All @@ -50,6 +109,9 @@ TestLeafIO<T>::testBuffer()

class TestLeafIOTest: public ::testing::Test
{
public:
void SetUp() override { openvdb::initialize(); }
void TearDown() override { openvdb::uninitialize(); }
};


Expand All @@ -62,7 +124,68 @@ TEST_F(TestLeafIOTest, testBufferByte) { TestLeafIO<openvdb::Byte>::testBuffer()

TEST_F(TestLeafIOTest, testBufferVec3R)
{
openvdb::tree::LeafNode<openvdb::Vec3R, 3> leaf(openvdb::Coord(0, 0, 0));
using LeafT = openvdb::tree::LeafNode<openvdb::Vec3R, 3>;
LeafT leaf(openvdb::Coord(0, 0, 0));
const openvdb::Coord origin = leaf.origin();

leaf.setValueOn(openvdb::Coord(0, 1, 0), openvdb::Vec3R(1, 1, 1));
leaf.setValueOn(openvdb::Coord(1, 0, 0), openvdb::Vec3R(1, 1, 1));

// read and write topology to disk

{
// create a grid with the leaf for topology testing
typedef openvdb::Grid<openvdb::tree::Tree<openvdb::tree::RootNode<
openvdb::tree::InternalNode<openvdb::tree::InternalNode<LeafT, 4>, 5>>>> GridType;
GridType::Ptr grid = GridType::create();
grid->setName("leaf_vec3r");
grid->tree().addLeaf(new LeafT(leaf));

openvdb::GridCPtrVec grids;
grids.push_back(grid);

// write to file
{
openvdb::io::File file("leaf_vec3r.vdb");
file.write(grids);
file.close();
}

// read grid from file
GridType::Ptr gridFromDisk;
{
openvdb::io::File file("leaf_vec3r.vdb");
file.open();
openvdb::GridBase::Ptr baseGrid = file.readGrid("leaf_vec3r");
file.close();

gridFromDisk = openvdb::gridPtrCast<GridType>(baseGrid);
}

LeafT* leaf2 = gridFromDisk->tree().probeLeaf(origin);
EXPECT_TRUE(leaf2);

// check topology and values match

EXPECT_TRUE(leaf2->getValue(openvdb::Coord(0, 1, 0)) == openvdb::Vec3R(1, 1, 1));
EXPECT_TRUE(leaf2->getValue(openvdb::Coord(1, 0, 0)) == openvdb::Vec3R(1, 1, 1));
EXPECT_TRUE(leaf2->onVoxelCount() == 2);

remove("leaf_vec3r.vdb");
}
}

TEST_F(TestLeafIOTest, testTreeIOInt) { TestLeafIO<int>::testTreeIO(); }
TEST_F(TestLeafIOTest, testTreeIOFloat) { TestLeafIO<float>::testTreeIO(); }
TEST_F(TestLeafIOTest, testTreeIODouble) { TestLeafIO<double>::testTreeIO(); }
TEST_F(TestLeafIOTest, testTreeIOBool) { TestLeafIO<bool>::testTreeIO(); }
TEST_F(TestLeafIOTest, testTreeIOByte) { TestLeafIO<openvdb::Byte>::testTreeIO(); }


TEST_F(TestLeafIOTest, testTreeIOVec3R)
{
using LeafT = openvdb::tree::LeafNode<openvdb::Vec3R, 3>;
LeafT leaf(openvdb::Coord(0, 0, 0));

leaf.setValueOn(openvdb::Coord(0, 1, 0), openvdb::Vec3R(1, 1, 1));
leaf.setValueOn(openvdb::Coord(1, 0, 0), openvdb::Vec3R(1, 1, 1));
Expand All @@ -75,9 +198,6 @@ TEST_F(TestLeafIOTest, testBufferVec3R)
leaf.setValueOn(openvdb::Coord(0, 1, 1), openvdb::Vec3R(1, 1, 1));

std::istringstream istr(ostr.str(), std::ios_base::binary);

// Since the input stream doesn't include a VDB header with file format version info,
// tag the input stream explicitly with the current version number.
openvdb::io::setCurrentVersion(istr);

leaf.readBuffers(istr);
Expand Down
57 changes: 55 additions & 2 deletions openvdb/openvdb/unittest/TestLeafMask.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <openvdb/tools/Filter.h>
#include <openvdb/tree/LeafNode.h>
#include <openvdb/util/logging.h>
#include <openvdb/io/io.h>
#include "util.h" // for unittest_util::makeSphere()
#include <gtest/gtest.h>
#include <set>
Expand Down Expand Up @@ -290,6 +291,60 @@ TEST_F(TestLeafMask, testIO)
leaf.setValueOn(openvdb::Coord(0, 1, 0));
leaf.setValueOn(openvdb::Coord(1, 0, 0));

// read and write topology to disk

{
// create a grid with the leaf for topology testing
typedef openvdb::Grid<openvdb::tree::Tree<openvdb::tree::RootNode<
openvdb::tree::InternalNode<openvdb::tree::InternalNode<LeafType, 4>, 5>>>> MaskGrid;
MaskGrid::Ptr grid = MaskGrid::create();
grid->setName("leaf_mask");
grid->tree().addLeaf(new LeafType(leaf));

openvdb::GridCPtrVec grids;
grids.push_back(grid);

// write to file
{
openvdb::io::File file("leaf_mask.vdb");
file.write(grids);
file.close();
}

// read grid from file
MaskGrid::Ptr gridFromDisk;
{
openvdb::io::File file("leaf_mask.vdb");
file.open();
openvdb::GridBase::Ptr baseGrid = file.readGrid("leaf_mask");
file.close();

gridFromDisk = openvdb::gridPtrCast<MaskGrid>(baseGrid);
}

LeafType* leaf2 = gridFromDisk->tree().probeLeaf(origin);
EXPECT_TRUE(leaf2);

// check topology and values match

EXPECT_EQ(origin, leaf2->origin());
EXPECT_TRUE(leaf2->isValueOn(openvdb::Coord(0, 1, 0)));
EXPECT_TRUE(leaf2->isValueOn(openvdb::Coord(1, 0, 0)));
EXPECT_TRUE(leaf2->onVoxelCount() == 2);

remove("leaf_mask.vdb");
}
}


TEST_F(TestLeafMask, testTreeIO)
{
LeafType leaf(openvdb::Coord(1, 3, 5));
const openvdb::Coord origin = leaf.origin();

leaf.setValueOn(openvdb::Coord(0, 1, 0));
leaf.setValueOn(openvdb::Coord(1, 0, 0));

std::ostringstream ostr(std::ios_base::binary);

leaf.writeBuffers(ostr);
Expand All @@ -298,8 +353,6 @@ TEST_F(TestLeafMask, testIO)
leaf.setValueOn(openvdb::Coord(0, 1, 1));

std::istringstream istr(ostr.str(), std::ios_base::binary);
// Since the input stream doesn't include a VDB header with file format version info,
// tag the input stream explicitly with the current version number.
openvdb::io::setCurrentVersion(istr);

leaf.readBuffers(istr);
Expand Down
3 changes: 2 additions & 1 deletion openvdb/openvdb/unittest/TestMultiResGrid.cc
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,8 @@ TEST_F(TestMultiResGrid, testIO)
{
using namespace openvdb;

openvdb::initialize();

const float radius = 1.0f;
const Vec3f center(0.0f, 0.0f, 0.0f);
const float voxelSize = 0.01f;
Expand Down Expand Up @@ -243,7 +245,6 @@ TEST_F(TestMultiResGrid, testIO)
outputFile.close();

// Read grids
openvdb::initialize();
openvdb::io::File file( filename );
file.open();
GridPtrVecPtr grids = file.getGrids();
Expand Down
Loading
Loading