DART
6.7.3
|
Shape for a height map. More...
#include <HeightmapShape.hpp>
Public Types | |
using | S = S_ |
using | HeightField = Eigen::Matrix< S, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > |
enum | ShapeType { SPHERE , BOX , ELLIPSOID , CYLINDER , CAPSULE , CONE , PLANE , MULTISPHERE , MESH , SOFT_MESH , LINE_SEGMENT , HEIGHTMAP , UNSUPPORTED } |
enum | DataVariance { STATIC =0 , DYNAMIC_TRANSFORM = 1 << 1 , DYNAMIC_PRIMITIVE = 1 << 2 , DYNAMIC_COLOR = 1 << 3 , DYNAMIC_VERTICES = 1 << 4 , DYNAMIC_ELEMENTS = 1 << 5 , DYNAMIC = 0xFF } |
DataVariance can be used by renderers to determine whether it should expect data for this shape to change during each update. More... | |
using | VersionChangedSignal = common::Signal< void(Shape *shape, std::size_t version)> |
Public Member Functions | |
HeightmapShape () | |
Constructor. More... | |
~HeightmapShape () override=default | |
Destructor. More... | |
const std::string & | getType () const override |
Returns a string representing the shape type. More... | |
Eigen::Matrix3d | computeInertia (double mass) const override |
Computes the inertia. More... | |
void | setScale (const Eigen::Vector3d &scale) |
Sets scale of this heightmap. More... | |
const Eigen::Vector3d & | getScale () const |
Returns scale of this heightmap. More... | |
void | setHeightField (const std::size_t &width, const std::size_t &depth, const std::vector< S > &heights) |
Sets the height field. More... | |
const HeightField & | getHeightField () const |
Returns the height field. More... | |
HeightField & | getHeightFieldModifiable () const |
Returns the modified height field. See also setHeightField(). More... | |
void | flipY () const |
Flips the y values in the height field. More... | |
std::size_t | getWidth () const |
Returns the width dimension of the height field. More... | |
std::size_t | getDepth () const |
Returns the height dimension of the height field. More... | |
S | getMinHeight () const |
Returns the minimum height set by setHeightField() More... | |
S | getMaxHeight () const |
Returns the maximum height set by setHeightField() More... | |
template<typename ShapeT > | |
bool | is () const |
Get true if the types of this Shape and the template parameter (a shape class) are identical. More... | |
const math::BoundingBox & | getBoundingBox () const |
Get the bounding box of the shape in its local coordinate frame. More... | |
Eigen::Matrix3d | computeInertiaFromDensity (double density) const |
Eigen::Matrix3d | computeInertiaFromMass (double mass) const |
double | getVolume () const |
Returns volume of this shape. More... | |
std::size_t | getID () const |
ShapeType | getShapeType () const |
void | setDataVariance (unsigned int _variance) |
Set the data variance of this shape. More... | |
void | addDataVariance (unsigned int _variance) |
Add a type of variance to this shape. More... | |
void | removeDataVariance (unsigned int _variance) |
Remove a type of variance from this shape. More... | |
unsigned int | getDataVariance () const |
Get the data variance of this shape. More... | |
bool | checkDataVariance (DataVariance type) const |
True iff this Shape has the specified type of DataVariance. More... | |
virtual void | refreshData () |
Instruct this shape to update its data. More... | |
virtual void | notifyAlphaUpdate (double alpha) |
Notify that the alpha of this shape has updated. More... | |
virtual void | notifyAlphaUpdated (double alpha) |
Notify that the alpha of this shape has updated. More... | |
virtual void | notifyColorUpdate (const Eigen::Vector4d &color) |
Notify that the color (rgba) of this shape has updated. More... | |
virtual void | notifyColorUpdated (const Eigen::Vector4d &color) |
Notify that the color (rgba) of this shape has updated. More... | |
std::size_t | incrementVersion () override final |
Increment the version of this Shape and notify its subscribers. More... | |
virtual std::size_t | getVersion () const |
Get the version number of this object. More... | |
Static Public Member Functions | |
static const std::string & | getStaticType () |
Returns shape type for this class. More... | |
Public Attributes | |
common::SlotRegister< VersionChangedSignal > | onVersionChanged |
Use this to subscribe to version change signals. More... | |
Protected Member Functions | |
void | updateBoundingBox () const override |
Updates bounding box. More... | |
void | updateVolume () const override |
Updates volume. More... | |
void | computeBoundingBox (Eigen::Vector3d &min, Eigen::Vector3d &max) const |
Computes the bounding box of the height field. More... | |
void | sendDestructionNotification () const |
Send a destruction notification to all Observers. More... | |
void | addObserver (Observer *_observer) const |
Add an Observer to the list of Observers. More... | |
void | removeObserver (Observer *_observer) const |
Remove an Observer from the list of Observers. More... | |
void | setVersionDependentObject (VersionCounter *dependent) |
Protected Attributes | |
math::BoundingBox | mBoundingBox |
The bounding box (in the local coordinate frame) of the shape. More... | |
bool | mIsBoundingBoxDirty |
Whether bounding box needs update. More... | |
double | mVolume |
Volume enclosed by the geometry. More... | |
bool | mIsVolumeDirty |
Whether volume needs update. More... | |
const std::size_t | mID |
Unique id. More... | |
unsigned int | mVariance |
The DataVariance of this Shape. More... | |
ShapeType | mType |
std::set< Observer * > | mObservers |
List of current Observers. More... | |
std::size_t | mVersion |
Static Protected Attributes | |
static std::atomic_int | mCounter { 1000 } |
Private Attributes | |
Eigen::Vector3d | mScale |
Scale of the heightmap. More... | |
HeightField | mHeights |
Height field. More... | |
S | mMinHeight |
Minimum heights. More... | |
S | mMaxHeight |
Maximum heights. More... | |
VersionChangedSignal | mVersionChangedSignal |
Triggered by incrementVersion() More... | |
VersionCounter * | mDependent |
Shape for a height map.
S_ | Data type used for height map. At this point, only double and float are supported. Short and char can be added at a later point. |
using dart::dynamics::HeightmapShape< S_ >::HeightField = Eigen::Matrix<S, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> |
using dart::dynamics::HeightmapShape< S_ >::S = S_ |
|
inherited |
|
inherited |
DataVariance can be used by renderers to determine whether it should expect data for this shape to change during each update.
Enumerator | |
---|---|
STATIC | |
DYNAMIC_TRANSFORM | No data will ever change. |
DYNAMIC_PRIMITIVE | The relative transform of the Shape might change. |
DYNAMIC_COLOR | The primitive properties (such as x/y/z scaling) of the shape might change. |
DYNAMIC_VERTICES | The coloring or textures of the shape might change. |
DYNAMIC_ELEMENTS | Vertex positions of a mesh might change (this does not include adding or removing vertices) (this enum is not relevant for primitive shapes) |
DYNAMIC | The number of elements and/or arrangement of elements might change (this includes adding and removing vertices) (this enum is not relevant for primitive shapes) |
|
inherited |
Enumerator | |
---|---|
SPHERE | |
BOX | |
ELLIPSOID | |
CYLINDER | |
CAPSULE | |
CONE | |
PLANE | |
MULTISPHERE | |
MESH | |
SOFT_MESH | |
LINE_SEGMENT | |
HEIGHTMAP | |
UNSUPPORTED |
dart::dynamics::HeightmapShape< S >::HeightmapShape |
Constructor.
|
overridedefault |
Destructor.
|
inherited |
Add a type of variance to this shape.
All other variance types will remain the same.
|
protectedinherited |
Add an Observer to the list of Observers.
|
inherited |
True iff this Shape has the specified type of DataVariance.
|
protected |
Computes the bounding box of the height field.
[out] | min | Mininum of box |
[out] | max | Maxinum of box |
|
overridevirtual |
Computes the inertia.
This base class computes the intertia based on the bounding box. Subclasses may choose to provide a more accurate computation of the inertia.
Implements dart::dynamics::Shape.
|
inherited |
|
inherited |
void dart::dynamics::HeightmapShape< S >::flipY |
Flips the y values in the height field.
|
inherited |
Get the bounding box of the shape in its local coordinate frame.
The dimension will be automatically determined by the sub-classes such as BoxShape, EllipsoidShape, CylinderShape, and MeshShape.
|
inherited |
Get the data variance of this shape.
std::size_t dart::dynamics::HeightmapShape< S >::getDepth |
Returns the height dimension of the height field.
auto dart::dynamics::HeightmapShape< S >::getHeightField |
Returns the height field.
auto dart::dynamics::HeightmapShape< S >::getHeightFieldModifiable |
Returns the modified height field. See also setHeightField().
|
inherited |
auto dart::dynamics::HeightmapShape< S >::getMaxHeight |
Returns the maximum height set by setHeightField()
auto dart::dynamics::HeightmapShape< S >::getMinHeight |
Returns the minimum height set by setHeightField()
const Eigen::Vector3d & dart::dynamics::HeightmapShape< S >::getScale |
Returns scale of this heightmap.
|
inherited |
|
static |
Returns shape type for this class.
|
overridevirtual |
|
virtualinherited |
Get the version number of this object.
|
inherited |
Returns volume of this shape.
The volume will be automatically calculated by the sub-classes such as BoxShape, EllipsoidShape, CylinderShape, and MeshShape.
std::size_t dart::dynamics::HeightmapShape< S >::getWidth |
Returns the width dimension of the height field.
|
finaloverridevirtualinherited |
Increment the version of this Shape and notify its subscribers.
Reimplemented from dart::common::VersionCounter.
|
inherited |
Get true if the types of this Shape and the template parameter (a shape class) are identical.
This function is a syntactic sugar, which is identical to: (getType() == ShapeType::getStaticType()).
Example code:
|
virtualinherited |
Notify that the alpha of this shape has updated.
|
virtualinherited |
Notify that the alpha of this shape has updated.
Reimplemented in dart::dynamics::MeshShape.
|
virtualinherited |
Notify that the color (rgba) of this shape has updated.
|
virtualinherited |
Notify that the color (rgba) of this shape has updated.
Reimplemented in dart::dynamics::ArrowShape.
|
virtualinherited |
Instruct this shape to update its data.
|
inherited |
Remove a type of variance from this shape.
All other variance types will remain the same.
|
protectedinherited |
Remove an Observer from the list of Observers.
|
protectedinherited |
Send a destruction notification to all Observers.
This will cause all Observers to behave as if this Subject has been permanently deleted, so it should only be called when that behavior is desired.
|
inherited |
Set the data variance of this shape.
Use the DataVariance to indicate what kind of shape information might change during run time so that renderers can optimize reliably.
void dart::dynamics::HeightmapShape< S >::setHeightField | ( | const std::size_t & | width, |
const std::size_t & | depth, | ||
const std::vector< S > & | heights | ||
) |
Sets the height field.
The data in heights will be copied locally. It would be nice to have the option to use the values in heights directly instead of copying them locally to a vector in this class (this would avoid any data being kept twice). However some collision engine implementations may require to transform the height values, e.g. bullet needs the y values flipped. Therefore, a (mutable) copy of the height values passed in heights will be kept in this class. The copied data can be modified via getHeightFieldModifiable() and with flipY().
[in] | width | Width of the field (x axis) |
[in] | depth | Depth of the field (-y axis) |
[in] | heights | The height data of size width * depth. The heights are interpreted as z values, while width goes in x direction and depth in -y (it goes to -y because traditionally images are read from top row to bottom row). In the geometry which is to be generated from this shape, the min/max height value is also the min/max z value (so if the minimum height value is -100, the lowest terrain point will be -100, times the z scale to be applied). |
void dart::dynamics::HeightmapShape< S >::setScale | ( | const Eigen::Vector3d & | scale | ) |
Sets scale of this heightmap.
[in] | scale | Scale of the height map. |
|
protectedinherited |
|
overrideprotectedvirtual |
Updates bounding box.
Implements dart::dynamics::Shape.
|
overrideprotectedvirtual |
Updates volume.
This base class provides a simple implementation which returns the volume of the bounding box. Subclasses may opt to provide a more accurate computation of the volume.
Implements dart::dynamics::Shape.
|
mutableprotectedinherited |
The bounding box (in the local coordinate frame) of the shape.
|
staticprotectedinherited |
|
privateinherited |
|
mutableprivate |
Height field.
|
protectedinherited |
Unique id.
|
mutableprotectedinherited |
Whether bounding box needs update.
|
mutableprotectedinherited |
Whether volume needs update.
|
private |
Maximum heights.
Is computed each time the height field is set with setHeightField().
|
private |
Minimum heights.
Is computed each time the height field is set with setHeightField().
|
mutableprotectedinherited |
List of current Observers.
|
private |
Scale of the heightmap.
|
protectedinherited |
Please use getType() instead. Type of primitive shpae.
|
protectedinherited |
The DataVariance of this Shape.
|
protectedinherited |
|
privateinherited |
Triggered by incrementVersion()
|
mutableprotectedinherited |
Volume enclosed by the geometry.
|
inherited |
Use this to subscribe to version change signals.