DART
6.10.1
|
The LineSegmentShape facilitates creating graphs of line segments. More...
#include <LineSegmentShape.hpp>
Public Types | |
enum | ShapeType { SPHERE , BOX , ELLIPSOID , CYLINDER , CAPSULE , CONE , PYRAMID , RECTANGULAR_PYRAMID , 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 | |
LineSegmentShape (float _thickness=1.0f) | |
Default constructor. More... | |
LineSegmentShape (const Eigen::Vector3d &_v1, const Eigen::Vector3d &_v2, float _thickness=1.0f) | |
Constructor for creating a simple line segment that connects two vertices. More... | |
const std::string & | getType () const override |
Returns a string representing the shape type. More... | |
void | setThickness (float _thickness) |
Set the line thickness/width for rendering. More... | |
float | getThickness () const |
Get the line thickness/width used for rendering. More... | |
std::size_t | addVertex (const Eigen::Vector3d &_v) |
Add a vertex as a child to the last vertex that was added. More... | |
std::size_t | addVertex (const Eigen::Vector3d &_v, std::size_t _parent) |
Add a vertex as a child to the specified vertex. More... | |
void | removeVertex (std::size_t _idx) |
Remove a vertex from the list of vertices. More... | |
void | setVertex (std::size_t _idx, const Eigen::Vector3d &_v) |
Change the location of the specified vertex. More... | |
const Eigen::Vector3d & | getVertex (std::size_t _idx) const |
Get the location of the specified vertex. More... | |
const std::vector< Eigen::Vector3d > & | getVertices () const |
Get all the vertices. More... | |
void | addConnection (std::size_t _idx1, std::size_t _idx2) |
Create a connection between the two specified vertices. More... | |
void | removeConnection (std::size_t _vertexIdx1, std::size_t _vertexIdx2) |
Search for a connection between two vertices and break it if it exists. More... | |
void | removeConnection (std::size_t _connectionIdx) |
Remove the specified connection entry. More... | |
const common::aligned_vector< Eigen::Vector2i > & | getConnections () const |
Get all the connections. More... | |
Eigen::Matrix3d | computeInertia (double mass) const override |
The returned inertia matrix will be like a very thin cylinder. 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 | 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 | |
float | mThickness |
Line thickness for rendering. More... | |
std::vector< Eigen::Vector3d > | mVertices |
Vector of vertices. More... | |
common::aligned_vector< Eigen::Vector2i > | mConnections |
Vector of connections. More... | |
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 const Eigen::Vector3d | mDummyVertex = Eigen::Vector3d::Zero() |
A dummy vertex that can be returned when an out-of-bounds vertex is requested. More... | |
static std::atomic_int | mCounter { 1000 } |
Private Attributes | |
VersionChangedSignal | mVersionChangedSignal |
Triggered by incrementVersion() More... | |
VersionCounter * | mDependent |
The LineSegmentShape facilitates creating graphs of line segments.
The graph can consist of a single line segment or many interconnected line segments. Note: LineSegmentShape may NOT be used as a collision shape for BodyNodes, but it may be used for visualization purposes.
|
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 | |
PYRAMID | |
RECTANGULAR_PYRAMID | |
PLANE | |
MULTISPHERE | |
MESH | |
SOFT_MESH | |
LINE_SEGMENT | |
HEIGHTMAP | |
UNSUPPORTED |
dart::dynamics::LineSegmentShape::LineSegmentShape | ( | float | _thickness = 1.0f | ) |
Default constructor.
dart::dynamics::LineSegmentShape::LineSegmentShape | ( | const Eigen::Vector3d & | _v1, |
const Eigen::Vector3d & | _v2, | ||
float | _thickness = 1.0f |
||
) |
Constructor for creating a simple line segment that connects two vertices.
void dart::dynamics::LineSegmentShape::addConnection | ( | std::size_t | _idx1, |
std::size_t | _idx2 | ||
) |
Create a connection between the two specified vertices.
|
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.
std::size_t dart::dynamics::LineSegmentShape::addVertex | ( | const Eigen::Vector3d & | _v | ) |
Add a vertex as a child to the last vertex that was added.
std::size_t dart::dynamics::LineSegmentShape::addVertex | ( | const Eigen::Vector3d & | _v, |
std::size_t | _parent | ||
) |
Add a vertex as a child to the specified vertex.
|
inherited |
True iff this Shape has the specified type of DataVariance.
|
overridevirtual |
The returned inertia matrix will be like a very thin cylinder.
The _mass will be evenly distributed across all lines.
Implements dart::dynamics::Shape.
|
inherited |
|
inherited |
|
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.
const common::aligned_vector< Eigen::Vector2i > & dart::dynamics::LineSegmentShape::getConnections | ( | ) | const |
Get all the connections.
|
inherited |
Get the data variance of this shape.
|
inherited |
|
inherited |
|
static |
Returns shape type for this class.
float dart::dynamics::LineSegmentShape::getThickness | ( | ) | const |
Get the line thickness/width used for rendering.
|
overridevirtual |
|
virtualinherited |
Get the version number of this object.
const Eigen::Vector3d & dart::dynamics::LineSegmentShape::getVertex | ( | std::size_t | _idx | ) | const |
Get the location of the specified vertex.
Returns a zero vector if an out-of-bounds vertex is requested.
const std::vector< Eigen::Vector3d > & dart::dynamics::LineSegmentShape::getVertices | ( | ) | const |
Get all the vertices.
|
inherited |
Returns volume of this shape.
The volume will be automatically calculated by the sub-classes such as BoxShape, EllipsoidShape, CylinderShape, and MeshShape.
|
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.
|
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::PointCloudShape, dart::dynamics::HeightmapShape< S_ >, dart::dynamics::HeightmapShape< S >, and dart::dynamics::ArrowShape.
|
virtualinherited |
Instruct this shape to update its data.
void dart::dynamics::LineSegmentShape::removeConnection | ( | std::size_t | _connectionIdx | ) |
Remove the specified connection entry.
Note that this will impact the indices of all connections that come after _connectionIdx. This is more efficient but less robust than removeConnection(std::size_t,std::size_t)
void dart::dynamics::LineSegmentShape::removeConnection | ( | std::size_t | _vertexIdx1, |
std::size_t | _vertexIdx2 | ||
) |
Search for a connection between two vertices and break it if it exists.
This is less efficient but more robust than removeConnection(std::size_t).
|
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.
void dart::dynamics::LineSegmentShape::removeVertex | ( | std::size_t | _idx | ) |
Remove a vertex from the list of vertices.
IMPORTANT: Note that this alters the indices of all vertices that follow it in the list, which also clobbers the validity of the list of connections for all those vertices. A safer and more efficient method might be to recycle vertices by moving them around with setVertex() and/or altering their connections.
|
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::LineSegmentShape::setThickness | ( | float | _thickness | ) |
Set the line thickness/width for rendering.
|
protectedinherited |
void dart::dynamics::LineSegmentShape::setVertex | ( | std::size_t | _idx, |
const Eigen::Vector3d & | _v | ||
) |
Change the location of the specified vertex.
|
overrideprotectedvirtual |
Updates bounding box.
Implements dart::dynamics::Shape.
|
overrideprotectedvirtual |
Updates volume.
Implements dart::dynamics::Shape.
|
mutableprotectedinherited |
The bounding box (in the local coordinate frame) of the shape.
|
protected |
Vector of connections.
|
staticprotectedinherited |
|
privateinherited |
|
staticprotected |
A dummy vertex that can be returned when an out-of-bounds vertex is requested.
|
protectedinherited |
Unique id.
|
mutableprotectedinherited |
Whether bounding box needs update.
|
mutableprotectedinherited |
Whether volume needs update.
|
mutableprotectedinherited |
List of current Observers.
|
protected |
Line thickness for rendering.
|
protectedinherited |
Please use getType() instead. Type of primitive shpae.
|
protectedinherited |
The DataVariance of this Shape.
|
protectedinherited |
|
privateinherited |
Triggered by incrementVersion()
|
protected |
Vector of vertices.
|
mutableprotectedinherited |
Volume enclosed by the geometry.
|
inherited |
Use this to subscribe to version change signals.