Initial work adding base volume class.
This commit is contained in:
@ -26,6 +26,7 @@ freely, subject to the following restrictions:
|
|||||||
|
|
||||||
#include "PolyVoxCore/Region.h"
|
#include "PolyVoxCore/Region.h"
|
||||||
#include "PolyVoxCore/PolyVoxForwardDeclarations.h"
|
#include "PolyVoxCore/PolyVoxForwardDeclarations.h"
|
||||||
|
#include "PolyVoxCore/Volume.h"
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@ -33,7 +34,7 @@ freely, subject to the following restrictions:
|
|||||||
namespace PolyVox
|
namespace PolyVox
|
||||||
{
|
{
|
||||||
template <typename VoxelType>
|
template <typename VoxelType>
|
||||||
class RawVolume
|
class RawVolume : public Volume<VoxelType>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
#ifndef SWIG
|
#ifndef SWIG
|
||||||
@ -118,29 +119,11 @@ namespace PolyVox
|
|||||||
/// Destructor
|
/// Destructor
|
||||||
~RawVolume();
|
~RawVolume();
|
||||||
|
|
||||||
/// Gets the value used for voxels which are outside the volume
|
|
||||||
VoxelType getBorderValue(void) const;
|
|
||||||
/// Gets a Region representing the extents of the RawVolume.
|
|
||||||
Region getEnclosingRegion(void) const;
|
|
||||||
/// Gets the width of the volume in voxels.
|
|
||||||
int32_t getWidth(void) const;
|
|
||||||
/// Gets the height of the volume in voxels.
|
|
||||||
int32_t getHeight(void) const;
|
|
||||||
/// Gets the depth of the volume in voxels.
|
|
||||||
int32_t getDepth(void) const;
|
|
||||||
/// Gets the length of the longest side in voxels
|
|
||||||
int32_t getLongestSideLength(void) const;
|
|
||||||
/// Gets the length of the shortest side in voxels
|
|
||||||
int32_t getShortestSideLength(void) const;
|
|
||||||
/// Gets the length of the diagonal in voxels
|
|
||||||
float getDiagonalLength(void) const;
|
|
||||||
/// Gets a voxel at the position given by <tt>x,y,z</tt> coordinates
|
/// Gets a voxel at the position given by <tt>x,y,z</tt> coordinates
|
||||||
VoxelType getVoxelAt(int32_t uXPos, int32_t uYPos, int32_t uZPos) const;
|
VoxelType getVoxelAt(int32_t uXPos, int32_t uYPos, int32_t uZPos) const;
|
||||||
/// Gets a voxel at the position given by a 3D vector
|
/// Gets a voxel at the position given by a 3D vector
|
||||||
VoxelType getVoxelAt(const Vector3DInt32& v3dPos) const;
|
VoxelType getVoxelAt(const Vector3DInt32& v3dPos) const;
|
||||||
|
|
||||||
/// Sets the value used for voxels which are outside the volume
|
|
||||||
void setBorderValue(const VoxelType& tBorder);
|
|
||||||
/// Sets the voxel at the position given by <tt>x,y,z</tt> coordinates
|
/// Sets the voxel at the position given by <tt>x,y,z</tt> coordinates
|
||||||
bool setVoxelAt(int32_t uXPos, int32_t uYPos, int32_t uZPos, VoxelType tValue);
|
bool setVoxelAt(int32_t uXPos, int32_t uYPos, int32_t uZPos, VoxelType tValue);
|
||||||
/// Sets the voxel at the position given by a 3D vector
|
/// Sets the voxel at the position given by a 3D vector
|
||||||
@ -155,17 +138,6 @@ namespace PolyVox
|
|||||||
private:
|
private:
|
||||||
//The block data
|
//The block data
|
||||||
VoxelType* m_pData;
|
VoxelType* m_pData;
|
||||||
|
|
||||||
//The border value
|
|
||||||
VoxelType m_tBorderValue;
|
|
||||||
|
|
||||||
//The size of the volume
|
|
||||||
Region m_regValidRegion;
|
|
||||||
|
|
||||||
//Some useful sizes
|
|
||||||
int32_t m_uLongestSideLength;
|
|
||||||
int32_t m_uShortestSideLength;
|
|
||||||
float m_fDiagonalLength;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ namespace PolyVox
|
|||||||
(
|
(
|
||||||
const Region& regValid
|
const Region& regValid
|
||||||
)
|
)
|
||||||
|
:Volume(regValid)
|
||||||
{
|
{
|
||||||
//Create a volume of the right size.
|
//Create a volume of the right size.
|
||||||
resize(regValid);
|
resize(regValid);
|
||||||
@ -62,90 +63,6 @@ namespace PolyVox
|
|||||||
m_pData = 0;
|
m_pData = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// The border value is returned whenever an atempt is made to read a voxel which
|
|
||||||
/// is outside the extents of the volume.
|
|
||||||
/// \return The value used for voxels outside of the volume
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
template <typename VoxelType>
|
|
||||||
VoxelType RawVolume<VoxelType>::getBorderValue(void) const
|
|
||||||
{
|
|
||||||
return m_tBorderValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// \return A Region representing the extent of the volume.
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
template <typename VoxelType>
|
|
||||||
Region RawVolume<VoxelType>::getEnclosingRegion(void) const
|
|
||||||
{
|
|
||||||
return m_regValidRegion;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// \return The width of the volume in voxels. Note that this value is inclusive, so that if the valid range is e.g. 0 to 63 then the width is 64.
|
|
||||||
/// \sa getHeight(), getDepth()
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
template <typename VoxelType>
|
|
||||||
int32_t RawVolume<VoxelType>::getWidth(void) const
|
|
||||||
{
|
|
||||||
return m_regValidRegion.getUpperCorner().getX() - m_regValidRegion.getLowerCorner().getX() + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// \return The height of the volume in voxels. Note that this value is inclusive, so that if the valid range is e.g. 0 to 63 then the height is 64.
|
|
||||||
/// \sa getWidth(), getDepth()
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
template <typename VoxelType>
|
|
||||||
int32_t RawVolume<VoxelType>::getHeight(void) const
|
|
||||||
{
|
|
||||||
return m_regValidRegion.getUpperCorner().getY() - m_regValidRegion.getLowerCorner().getY() + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// \return The depth of the volume in voxels. Note that this value is inclusive, so that if the valid range is e.g. 0 to 63 then the depth is 64.
|
|
||||||
/// \sa getWidth(), getHeight()
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
template <typename VoxelType>
|
|
||||||
int32_t RawVolume<VoxelType>::getDepth(void) const
|
|
||||||
{
|
|
||||||
return m_regValidRegion.getUpperCorner().getZ() - m_regValidRegion.getLowerCorner().getZ() + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// \return The length of the shortest side in voxels. For example, if a volume has
|
|
||||||
/// dimensions 256x512x1024 this function will return 256.
|
|
||||||
/// \sa getLongestSideLength(), getDiagonalLength()
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
template <typename VoxelType>
|
|
||||||
int32_t RawVolume<VoxelType>::getShortestSideLength(void) const
|
|
||||||
{
|
|
||||||
return m_uShortestSideLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// \return The length of the longest side in voxels. For example, if a volume has
|
|
||||||
/// dimensions 256x512x1024 this function will return 1024.
|
|
||||||
/// \sa getShortestSideLength(), getDiagonalLength()
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
template <typename VoxelType>
|
|
||||||
int32_t RawVolume<VoxelType>::getLongestSideLength(void) const
|
|
||||||
{
|
|
||||||
return m_uLongestSideLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// \return The length of the diagonal in voxels. For example, if a volume has
|
|
||||||
/// dimensions 256x512x1024 this function will return sqrt(256*256+512*512+1024*1024)
|
|
||||||
/// = 1173.139. This value is computed on volume creation so retrieving it is fast.
|
|
||||||
/// \sa getShortestSideLength(), getLongestSideLength()
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
template <typename VoxelType>
|
|
||||||
float RawVolume<VoxelType>::getDiagonalLength(void) const
|
|
||||||
{
|
|
||||||
return m_fDiagonalLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// \param uXPos The \c x position of the voxel
|
/// \param uXPos The \c x position of the voxel
|
||||||
/// \param uYPos The \c y position of the voxel
|
/// \param uYPos The \c y position of the voxel
|
||||||
@ -180,15 +97,6 @@ namespace PolyVox
|
|||||||
return getVoxelAt(v3dPos.getX(), v3dPos.getY(), v3dPos.getZ());
|
return getVoxelAt(v3dPos.getX(), v3dPos.getY(), v3dPos.getZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// \param tBorder The value to use for voxels outside the volume.
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
template <typename VoxelType>
|
|
||||||
void RawVolume<VoxelType>::setBorderValue(const VoxelType& tBorder)
|
|
||||||
{
|
|
||||||
m_tBorderValue = tBorder;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// \param uXPos the \c x position of the voxel
|
/// \param uXPos the \c x position of the voxel
|
||||||
/// \param uYPos the \c y position of the voxel
|
/// \param uYPos the \c y position of the voxel
|
||||||
|
95
library/PolyVoxCore/include/PolyVoxCore/Volume.h
Normal file
95
library/PolyVoxCore/include/PolyVoxCore/Volume.h
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
Copyright (c) 2005-2009 David Williams
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
|
||||||
|
3. This notice may not be removed or altered from any source
|
||||||
|
distribution.
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __PolyVox_Volume_H__
|
||||||
|
#define __PolyVox_Volume_H__
|
||||||
|
|
||||||
|
#include "PolyVoxCore/Region.h"
|
||||||
|
#include "PolyVoxCore/PolyVoxForwardDeclarations.h"
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace PolyVox
|
||||||
|
{
|
||||||
|
template <typename VoxelType>
|
||||||
|
class Volume
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/// Constructor for creating a fixed size volume.
|
||||||
|
Volume
|
||||||
|
(
|
||||||
|
const Region& regValid
|
||||||
|
);
|
||||||
|
/// Destructor
|
||||||
|
~Volume();
|
||||||
|
|
||||||
|
/// Gets the value used for voxels which are outside the volume
|
||||||
|
VoxelType getBorderValue(void) const;
|
||||||
|
/// Gets a Region representing the extents of the RawVolume.
|
||||||
|
Region getEnclosingRegion(void) const;
|
||||||
|
/// Gets the width of the volume in voxels.
|
||||||
|
int32_t getWidth(void) const;
|
||||||
|
/// Gets the height of the volume in voxels.
|
||||||
|
int32_t getHeight(void) const;
|
||||||
|
/// Gets the depth of the volume in voxels.
|
||||||
|
int32_t getDepth(void) const;
|
||||||
|
/// Gets the length of the longest side in voxels
|
||||||
|
int32_t getLongestSideLength(void) const;
|
||||||
|
/// Gets the length of the shortest side in voxels
|
||||||
|
int32_t getShortestSideLength(void) const;
|
||||||
|
/// Gets the length of the diagonal in voxels
|
||||||
|
float getDiagonalLength(void) const;
|
||||||
|
/// Gets a voxel at the position given by <tt>x,y,z</tt> coordinates
|
||||||
|
VoxelType getVoxelAt(int32_t uXPos, int32_t uYPos, int32_t uZPos) const;
|
||||||
|
/// Gets a voxel at the position given by a 3D vector
|
||||||
|
VoxelType getVoxelAt(const Vector3DInt32& v3dPos) const;
|
||||||
|
|
||||||
|
/// Sets the value used for voxels which are outside the volume
|
||||||
|
void setBorderValue(const VoxelType& tBorder);
|
||||||
|
/// Sets the voxel at the position given by <tt>x,y,z</tt> coordinates
|
||||||
|
bool setVoxelAt(int32_t uXPos, int32_t uYPos, int32_t uZPos, VoxelType tValue);
|
||||||
|
/// Sets the voxel at the position given by a 3D vector
|
||||||
|
bool setVoxelAt(const Vector3DInt32& v3dPos, VoxelType tValue);
|
||||||
|
|
||||||
|
/// Calculates approximatly how many bytes of memory the volume is currently using.
|
||||||
|
uint32_t calculateSizeInBytes(void);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
//The border value
|
||||||
|
VoxelType m_tBorderValue;
|
||||||
|
|
||||||
|
//The size of the volume
|
||||||
|
Region m_regValidRegion;
|
||||||
|
|
||||||
|
//Some useful sizes
|
||||||
|
int32_t m_uLongestSideLength;
|
||||||
|
int32_t m_uShortestSideLength;
|
||||||
|
float m_fDiagonalLength;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "PolyVoxCore/Volume.inl"
|
||||||
|
#include "PolyVoxCore/VolumeSampler.inl"
|
||||||
|
|
||||||
|
#endif //__PolyVox_Volume_H__
|
202
library/PolyVoxCore/include/PolyVoxCore/Volume.inl
Normal file
202
library/PolyVoxCore/include/PolyVoxCore/Volume.inl
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
Copyright (c) 2005-2009 David Williams
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
|
||||||
|
3. This notice may not be removed or altered from any source
|
||||||
|
distribution.
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include "PolyVoxCore/Log.h"
|
||||||
|
#include "PolyVoxCore/Region.h"
|
||||||
|
#include "PolyVoxCore/Vector.h"
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
namespace PolyVox
|
||||||
|
{
|
||||||
|
template <typename VoxelType>
|
||||||
|
Volume<VoxelType>::Volume
|
||||||
|
(
|
||||||
|
const Region& regValid
|
||||||
|
)
|
||||||
|
:m_regValidRegion(regValid)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// Destroys the volume
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
Volume<VoxelType>::~Volume()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// The border value is returned whenever an attempt is made to read a voxel which
|
||||||
|
/// is outside the extents of the volume.
|
||||||
|
/// \return The value used for voxels outside of the volume
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
VoxelType Volume<VoxelType>::getBorderValue(void) const
|
||||||
|
{
|
||||||
|
return m_tBorderValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// \return A Region representing the extent of the volume.
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
Region Volume<VoxelType>::getEnclosingRegion(void) const
|
||||||
|
{
|
||||||
|
return m_regValidRegion;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// \return The width of the volume in voxels. Note that this value is inclusive, so that if the valid range is e.g. 0 to 63 then the width is 64.
|
||||||
|
/// \sa getHeight(), getDepth()
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
int32_t Volume<VoxelType>::getWidth(void) const
|
||||||
|
{
|
||||||
|
return m_regValidRegion.getUpperCorner().getX() - m_regValidRegion.getLowerCorner().getX() + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// \return The height of the volume in voxels. Note that this value is inclusive, so that if the valid range is e.g. 0 to 63 then the height is 64.
|
||||||
|
/// \sa getWidth(), getDepth()
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
int32_t Volume<VoxelType>::getHeight(void) const
|
||||||
|
{
|
||||||
|
return m_regValidRegion.getUpperCorner().getY() - m_regValidRegion.getLowerCorner().getY() + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// \return The depth of the volume in voxels. Note that this value is inclusive, so that if the valid range is e.g. 0 to 63 then the depth is 64.
|
||||||
|
/// \sa getWidth(), getHeight()
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
int32_t Volume<VoxelType>::getDepth(void) const
|
||||||
|
{
|
||||||
|
return m_regValidRegion.getUpperCorner().getZ() - m_regValidRegion.getLowerCorner().getZ() + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// \return The length of the shortest side in voxels. For example, if a volume has
|
||||||
|
/// dimensions 256x512x1024 this function will return 256.
|
||||||
|
/// \sa getLongestSideLength(), getDiagonalLength()
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
int32_t Volume<VoxelType>::getShortestSideLength(void) const
|
||||||
|
{
|
||||||
|
return m_uShortestSideLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// \return The length of the longest side in voxels. For example, if a volume has
|
||||||
|
/// dimensions 256x512x1024 this function will return 1024.
|
||||||
|
/// \sa getShortestSideLength(), getDiagonalLength()
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
int32_t Volume<VoxelType>::getLongestSideLength(void) const
|
||||||
|
{
|
||||||
|
return m_uLongestSideLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// \return The length of the diagonal in voxels. For example, if a volume has
|
||||||
|
/// dimensions 256x512x1024 this function will return sqrt(256*256+512*512+1024*1024)
|
||||||
|
/// = 1173.139. This value is computed on volume creation so retrieving it is fast.
|
||||||
|
/// \sa getShortestSideLength(), getLongestSideLength()
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
float Volume<VoxelType>::getDiagonalLength(void) const
|
||||||
|
{
|
||||||
|
return m_fDiagonalLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// \param uXPos The \c x position of the voxel
|
||||||
|
/// \param uYPos The \c y position of the voxel
|
||||||
|
/// \param uZPos The \c z position of the voxel
|
||||||
|
/// \return The voxel value
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
VoxelType Volume<VoxelType>::getVoxelAt(int32_t uXPos, int32_t uYPos, int32_t uZPos) const
|
||||||
|
{
|
||||||
|
assert(false);
|
||||||
|
return VoxelType; //Default constructor
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// \param v3dPos The 3D position of the voxel
|
||||||
|
/// \return The voxel value
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
VoxelType Volume<VoxelType>::getVoxelAt(const Vector3DInt32& v3dPos) const
|
||||||
|
{
|
||||||
|
assert(false);
|
||||||
|
return VoxelType; //Default constructor
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// \param tBorder The value to use for voxels outside the volume.
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
void Volume<VoxelType>::setBorderValue(const VoxelType& tBorder)
|
||||||
|
{
|
||||||
|
m_tBorderValue = tBorder;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// \param uXPos the \c x position of the voxel
|
||||||
|
/// \param uYPos the \c y position of the voxel
|
||||||
|
/// \param uZPos the \c z position of the voxel
|
||||||
|
/// \param tValue the value to which the voxel will be set
|
||||||
|
/// \return whether the requested position is inside the volume
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
bool Volume<VoxelType>::setVoxelAt(int32_t uXPos, int32_t uYPos, int32_t uZPos, VoxelType tValue)
|
||||||
|
{
|
||||||
|
assert(false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// \param v3dPos the 3D position of the voxel
|
||||||
|
/// \param tValue the value to which the voxel will be set
|
||||||
|
/// \return whether the requested position is inside the volume
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
bool Volume<VoxelType>::setVoxelAt(const Vector3DInt32& v3dPos, VoxelType tValue)
|
||||||
|
{
|
||||||
|
assert(false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// Note: This function needs reviewing for accuracy...
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename VoxelType>
|
||||||
|
uint32_t Volume<VoxelType>::calculateSizeInBytes(void)
|
||||||
|
{
|
||||||
|
return getWidth() * getHeight() * getDepth() * sizeof(VoxelType);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user