Loading...
Searching...
No Matches
GridDescriptor.h
Go to the documentation of this file.
// Copyright Contributors to the OpenVDB Project
// SPDX-License-Identifier: MPL-2.0
#ifndef OPENVDB_IO_GRIDDESCRIPTOR_HAS_BEEN_INCLUDED
#define OPENVDB_IO_GRIDDESCRIPTOR_HAS_BEEN_INCLUDED
#include <openvdb/Grid.h>
#include <iostream>
#include <string>
namespace openvdb {
OPENVDB_USE_VERSION_NAMESPACE
namespace OPENVDB_VERSION_NAME {
namespace io {
/// This structure stores useful information that describes a grid on disk.
/// It can be used to retrieve I/O information about the grid such as
/// offsets into the file where the grid is located, its type, etc.
class OPENVDB_API GridDescriptor
{
public:
GridDescriptor();
GridDescriptor(const Name& name, const Name& gridType, bool saveFloatAsHalf = false);
GridDescriptor(const GridDescriptor&) = default;
GridDescriptor& operator=(const GridDescriptor&) = default;
~GridDescriptor();
const Name& gridType() const { return mGridType; }
const Name& gridName() const { return mGridName; }
const Name& uniqueName() const { return mUniqueName; }
const Name& instanceParentName() const { return mInstanceParentName; }
void setInstanceParentName(const Name& name) { mInstanceParentName = name; }
bool isInstance() const { return !mInstanceParentName.empty(); }
bool saveFloatAsHalf() const { return mSaveFloatAsHalf; }
void setGridPos(int64_t pos) { mGridPos = pos; }
int64_t getGridPos() const { return mGridPos; }
void setBlockPos(int64_t pos) { mBlockPos = pos; }
int64_t getBlockPos() const { return mBlockPos; }
void setEndPos(int64_t pos) { mEndPos = pos; }
int64_t getEndPos() const { return mEndPos; }
// These methods seek to the right position in the given stream.
void seekToGrid(std::istream&) const;
void seekToBlocks(std::istream&) const;
void seekToEnd(std::istream&) const;
void seekToGrid(std::ostream&) const;
void seekToBlocks(std::ostream&) const;
void seekToEnd(std::ostream&) const;
/// @brief Write out this descriptor's header information (all data except for
/// stream offsets).
void writeHeader(std::ostream&) const;
/// @brief Since positions into the stream are known at a later time, they are
/// written out separately.
void writeStreamPos(std::ostream&) const;
/// @brief Read a grid descriptor from the given stream.
/// @return an empty grid of the type specified by the grid descriptor.
GridBase::Ptr read(std::istream&);
/// @brief Append the number @a n to the given name (separated by an ASCII
/// "record separator" character) and return the resulting name.
static Name addSuffix(const Name&, int n);
/// @brief Strip from the given name any suffix that is separated by an ASCII
/// "record separator" character and return the resulting name.
static Name stripSuffix(const Name&);
/// @brief Given a name with suffix N, return "name[N]", otherwise just return "name".
/// Use this to produce a human-readable string from a descriptor's unique name.
static std::string nameAsString(const Name&);
/// @brief Given a string of the form "name[N]", return "name" with the suffix N
/// separated by an ASCII "record separator" character). Otherwise just return
/// the string as is.
static Name stringAsUniqueName(const std::string&);
private:
/// Name of the grid
Name mGridName;
/// Unique name for this descriptor
Name mUniqueName;
/// If nonempty, the name of another grid that shares this grid's tree
Name mInstanceParentName;
/// The type of the grid
Name mGridType;
/// Are floats quantized to 16 bits on disk?
bool mSaveFloatAsHalf;
/// Location in the stream where the grid data is stored
int64_t mGridPos;
/// Location in the stream where the grid blocks are stored
int64_t mBlockPos;
/// Location in the stream where the next grid descriptor begins
int64_t mEndPos;
};
} // namespace io
} // namespace OPENVDB_VERSION_NAME
} // namespace openvdb
#endif // OPENVDB_IO_GRIDDESCRIPTOR_HAS_BEEN_INCLUDED
Grid.h
OPENVDB_API
#define OPENVDB_API
Definition Platform.h:251
openvdb::v10_0::GridBase::Ptr
SharedPtr< GridBase > Ptr
Definition Grid.h:80
openvdb::v10_0::io::GridDescriptor::GridDescriptor
GridDescriptor(const GridDescriptor &)=default
openvdb::v10_0::io::GridDescriptor::GridDescriptor
GridDescriptor()
openvdb::v10_0::io::GridDescriptor::gridName
const Name & gridName() const
Definition GridDescriptor.h:29
openvdb::v10_0::io::GridDescriptor::setBlockPos
void setBlockPos(int64_t pos)
Definition GridDescriptor.h:41
openvdb::v10_0::io::GridDescriptor::getBlockPos
int64_t getBlockPos() const
Definition GridDescriptor.h:42
openvdb::v10_0::io::GridDescriptor::writeStreamPos
void writeStreamPos(std::ostream &) const
Since positions into the stream are known at a later time, they are written out separately.
openvdb::v10_0::io::GridDescriptor::writeHeader
void writeHeader(std::ostream &) const
Write out this descriptor's header information (all data except for stream offsets).
openvdb::v10_0::io::GridDescriptor::nameAsString
static std::string nameAsString(const Name &)
Given a name with suffix N, return "name[N]", otherwise just return "name". Use this to produce a hum...
openvdb::v10_0::io::GridDescriptor::uniqueName
const Name & uniqueName() const
Definition GridDescriptor.h:30
openvdb::v10_0::io::GridDescriptor::seekToGrid
void seekToGrid(std::istream &) const
openvdb::v10_0::io::GridDescriptor::seekToGrid
void seekToGrid(std::ostream &) const
openvdb::v10_0::io::GridDescriptor::~GridDescriptor
~GridDescriptor()
openvdb::v10_0::io::GridDescriptor::seekToEnd
void seekToEnd(std::istream &) const
openvdb::v10_0::io::GridDescriptor::read
GridBase::Ptr read(std::istream &)
Read a grid descriptor from the given stream.
openvdb::v10_0::io::GridDescriptor::instanceParentName
const Name & instanceParentName() const
Definition GridDescriptor.h:32
openvdb::v10_0::io::GridDescriptor::seekToBlocks
void seekToBlocks(std::istream &) const
openvdb::v10_0::io::GridDescriptor::gridType
const Name & gridType() const
Definition GridDescriptor.h:28
openvdb::v10_0::io::GridDescriptor::operator=
GridDescriptor & operator=(const GridDescriptor &)=default
openvdb::v10_0::io::GridDescriptor::seekToBlocks
void seekToBlocks(std::ostream &) const
openvdb::v10_0::io::GridDescriptor::getGridPos
int64_t getGridPos() const
Definition GridDescriptor.h:39
openvdb::v10_0::io::GridDescriptor::stripSuffix
static Name stripSuffix(const Name &)
Strip from the given name any suffix that is separated by an ASCII "record separator" character and r...
openvdb::v10_0::io::GridDescriptor::getEndPos
int64_t getEndPos() const
Definition GridDescriptor.h:45
openvdb::v10_0::io::GridDescriptor::seekToEnd
void seekToEnd(std::ostream &) const
openvdb::v10_0::io::GridDescriptor::GridDescriptor
GridDescriptor(const Name &name, const Name &gridType, bool saveFloatAsHalf=false)
openvdb::v10_0::io::GridDescriptor::setInstanceParentName
void setInstanceParentName(const Name &name)
Definition GridDescriptor.h:33
openvdb::v10_0::io::GridDescriptor::saveFloatAsHalf
bool saveFloatAsHalf() const
Definition GridDescriptor.h:36
openvdb::v10_0::io::GridDescriptor::stringAsUniqueName
static Name stringAsUniqueName(const std::string &)
Given a string of the form "name[N]", return "name" with the suffix N separated by an ASCII "record s...
openvdb::v10_0::io::GridDescriptor::isInstance
bool isInstance() const
Definition GridDescriptor.h:34
openvdb::v10_0::io::GridDescriptor::addSuffix
static Name addSuffix(const Name &, int n)
Append the number n to the given name (separated by an ASCII "record separator" character) and return...
openvdb::v10_0::io::GridDescriptor::setGridPos
void setGridPos(int64_t pos)
Definition GridDescriptor.h:38
openvdb::v10_0::io::GridDescriptor::setEndPos
void setEndPos(int64_t pos)
Definition GridDescriptor.h:44
openvdb::v10_0::Name
std::string Name
Definition Name.h:17
openvdb
Definition Exceptions.h:13
OPENVDB_VERSION_NAME
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition version.h.in:121
OPENVDB_USE_VERSION_NAMESPACE
#define OPENVDB_USE_VERSION_NAMESPACE
Definition version.h.in:212