NetDEM v1.0
|
A class representing a triangle in 3D space. More...
#include <shape_triangle.hpp>
Public Member Functions | |
Triangle () | |
Default constructor. | |
Triangle (Vec3d const &a, Vec3d const &b, Vec3d const &c) | |
Constructor with specified vertices. | |
nlohmann::json | PackJson () override |
Pack the Triangle object into a JSON structure. | |
void | InitFromJson (nlohmann::json const &js) override |
Initialize the Triangle object from a JSON structure. | |
void | SetVertices (Vec3d const &a, Vec3d const &b, Vec3d const &c) |
Set the vertices of the Triangle object. | |
void | Init () |
Initialize the Triangle object. | |
void | Translate (Vec3d const &pos) override |
Translate the Triangle object. | |
void | UpdateSurfaceNodes () override |
Update the surface nodes of the Triangle object. | |
void | UpdateShapeProperties () override |
Update the shape properties of the Triangle object. | |
Shape * | Clone () const override |
Clone the Triangle object. | |
STLModel | GetSTLModel (int num_nodes=200) override |
Generate an STL model for the Triangle object. | |
std::tuple< Vec3d, Vec3d > | GetBoundAABB () const override |
Compute the axis-aligned bounding box of the Triangle object. | |
std::tuple< Vec3d, Vec3d > | GetBoundAABB (Vec3d const &pos, Vec4d const &quat) const override |
Compute the axis-aligned bounding box of the Triangle object. | |
Vec3d | SupportPoint (Vec3d const &dir) override |
Calculate the support point of the Triangle object in a given direction. | |
VecXT< Vec3d > | SupportPoints (Vec3d const &dir) override |
Calculate the support points of the Triangle object in a given direction. | |
double | SignedDistance (Vec3d const &pos) const override |
Compute the signed distance between a point and the Triangle object. | |
Vec3d | SurfacePoint (Vec3d const &pos) override |
Compute the surface point of the Triangle object closest to a given point. | |
bool | CheckEnclose (Vec3d const &pos) const override |
Check if a point is enclosed by the Triangle object. | |
Public Member Functions inherited from netdem::Shape | |
virtual void | InitFromJsonFile (std::string const &js_file) |
Initializes the shape instance from a JSON file. | |
virtual double | GetSize () const |
Return shape size, which is defined as the diameter of equal-volume sphere. | |
virtual double | GetVolume () const |
Return the volume of the shape. | |
virtual Mat3d const & | GetInertia () const |
Return the inertia of the shape. | |
Vec3d | GetInertiaPrincipal () const |
Return the principal inertia of the shape. | |
virtual double | GetBoundSphereRadius () const |
Return the inertia of the shape. | |
virtual double | GetSkin () const |
Return skin size of the shape. | |
virtual double | GetSkinFactor () const |
Return skin factor of the shape. | |
virtual double | GetSurfaceNodeNum () const |
Return number of surface nodes of the shape. | |
virtual VecXT< Vec3d > const & | GetSurfaceNodes () const |
Return surface nodes of the shape. | |
virtual VecXT< double > const & | GetSurfaceNodeAreas () const |
Return surface area associated with each surface node. | |
virtual double | GetSurfaceNodeSpacing () const |
Return spacing of surface nodes. | |
const STLModel & | GetRenderMesh () const |
Return the surface mesh for rendering. | |
bool | CheckConvexity () |
Return the convexity of the shape. | |
virtual void | UpdateRenderMesh (int num_nodes=200) |
Initializes the surface mesh for rendering. | |
virtual void | SetSize (double d) |
Sets the size of the shape instance. | |
virtual void | SetSkin (double sk) |
Set skin size of the shape. | |
virtual void | SetSkinFactor (double sk_factor) |
Set skin size factor (skin = size by skin size factor) of the shape. | |
virtual void | EnableSurfaceNodes () |
Enable the use of surface nodes. | |
virtual void | DisableSurfaceNodes () |
Disable the use of surface nodes. | |
virtual bool | IsSurfaceNodesEnabled () |
Check if the use of surface nodes is enabled. | |
virtual void | SetSurfaceNodeNum (int num) |
Set number of surface nodes of the shape. | |
virtual void | SetSurfaceNodes (VecXT< Vec3d > const &nodes) |
Set the surface nodes of the shape. | |
virtual void | SetSurfaceNodes (STLModel const &surf_stl) |
Set the surface nodes of the shape. | |
virtual void | SaveAsVTK (std::string const &filename) |
Saves the shape instance as a VTK file. | |
virtual void | SaveAsSTL (std::string const &filename) |
Saves the shape instance as an STL file. | |
virtual bool | CheckPrincipal () const |
Determines whether the shape is in principal configuration. | |
virtual void | Print () |
Prints the properties of the shape instance. | |
virtual | ~Shape () |
Destructor for the Shape class. | |
Public Attributes | |
Mat3d | vertices |
The three vertices that define the triangle. | |
Vec3d | dir_n {0, 0, 1} |
The normal direction of the triangle. | |
Public Attributes inherited from netdem::Shape | |
int | id {0} |
ID of the shape instance. | |
std::string | label {"default"} |
Label of the shape instance. | |
Type | shape_type {Type::none} |
Type of the shape instance. | |
std::string | shape_name {"shape"} |
Name of the shape instance. | |
bool | use_customized_solver {false} |
Determines whether to use a customized contact solver or not. | |
STLModel | render_mesh |
Surface mesh for rendering. | |
Additional Inherited Members | |
Public Types inherited from netdem::Shape | |
enum | Type { none , point_sphere , sphere , spherical_harmonics , trimesh , trimesh_convex , ellipsoid , polybezier , triangle , plane , cylinder , poly_super_ellipsoid , poly_super_quadrics , level_set , netsdf , coded_netsdf , num_shapes } |
Enumeration for different types of shapes. More... | |
Static Public Member Functions inherited from netdem::Shape | |
static MatNd< 8, 3 > | VerticesOfAABB (Vec3d const &bmin, Vec3d const &bmax) |
Gets the vertices of the boundary AABB of the shape instance. | |
Protected Attributes inherited from netdem::Shape | |
double | size {1.0} |
Size and volume of the shape instance. | |
double | volume {0.5236} |
Volume of the shape instance. | |
Mat3d | inertia {{{0.05236, 0, 0}, {0, 0.05236, 0}, {0, 0, 0.05236}}} |
Inertia tensor of the shape instance. | |
double | bound_sphere_radius {0.5} |
Radius of the bounding sphere used for broad-phase contact detection. | |
double | skin {0.025} |
Skin thickness used for broad-phase contact detection. | |
double | skin_factor {0.05} |
Factor used to adjust the skin thickness. | |
Vec3d | bound_aabb_min {-0.5, -0.5, -0.5} |
Minimum bounds of the AABB used for broad-phase contact detection. | |
Vec3d | bound_aabb_max {0.5, 0.5, 0.5} |
Maximum bounds of the AABB used for broad-phase contact detection. | |
bool | is_convex {true} |
Determines whether the shape instance is convex or not. | |
bool | use_surface_nodes {false} |
Determines whether to use nodes for the contact solver. | |
int | surface_node_num {1000} |
Number of nodes used for the contact solver. | |
double | surface_node_spacing {std::sqrt(Math::PI / 1000.0)} |
Spacing between nodes used for the contact solver. | |
VecXT< Vec3d > | surface_nodes |
Surface nodes of the shape instance used for the contact solver. | |
VecXT< double > | surface_node_areas |
Area associated with each surface node. | |
A class representing a triangle in 3D space.
This class provides methods for generating, initializing, and computing operations on a Triangle object. The object is defined by its three vertices, and provides methods for computing signed distance, surface point, and generating an STL model. It also provides various options for calculating the support points of the triangle.
Triangle::Triangle | ( | ) |
Default constructor.
Constructor with specified vertices.
a | The first vertex of the triangle. |
b | The second vertex of the triangle. |
c | The third vertex of the triangle. |
|
overridevirtual |
Check if a point is enclosed by the Triangle object.
This method checks whether a point is enclosed by the Triangle object (which is always false for a triangle).
pos | The point to check. |
Reimplemented from netdem::Shape.
|
overridevirtual |
Clone the Triangle object.
This method creates a copy of the Triangle object.
Reimplemented from netdem::Shape.
Compute the axis-aligned bounding box of the Triangle object.
This method computes the axis-aligned bounding box (AABB) of the Triangle object, relative to a specified position and orientation.
Reimplemented from netdem::Shape.
|
overridevirtual |
Compute the axis-aligned bounding box of the Triangle object.
This method computes the axis-aligned bounding box (AABB) of the Triangle object, relative to a specified position and orientation.
pos | The position vector of the AABB center. |
quat | The orientation quaternion of the AABB. |
Reimplemented from netdem::Shape.
|
overridevirtual |
Generate an STL model for the Triangle object.
This method generates an STLModel object representing the Triangle object with the specified number of nodes for each surface triangle.
num_nodes | The number of nodes to use for each surface triangle (default: 200). |
Reimplemented from netdem::Shape.
void Triangle::Init | ( | ) |
|
overridevirtual |
Initialize the Triangle object from a JSON structure.
This method initializes the Triangle object from a JSON structure previously generated by PackJson().
js | The JSON structure to load. |
Reimplemented from netdem::Shape.
|
overridevirtual |
Pack the Triangle object into a JSON structure.
This method packs the Triangle object into a JSON structure for serialization and storage.
Reimplemented from netdem::Shape.
|
overridevirtual |
Compute the signed distance between a point and the Triangle object.
This method computes the signed distance between a point and the Triangle object, which is positive if the point is outside the object and negative if it is inside.
pos | The point to compute the signed distance from. |
Reimplemented from netdem::Shape.
Calculate the support point of the Triangle object in a given direction.
This method calculates the support point of the Triangle object in a given direction, which is the vertex that is farthest in that direction.
dir | The direction vector to compute the support point for. |
Reimplemented from netdem::Shape.
Calculate the support points of the Triangle object in a given direction.
This method calculates the support points of the Triangle object in a given direction, which are the vertices that are farthest in that direction.
dir | The direction vector to compute the support points for. |
Reimplemented from netdem::Shape.
Compute the surface point of the Triangle object closest to a given point.
This method computes the surface point of the Triangle object closest to a given point using barycentric coordinates.
pos | The point to find the closest surface point to. |
Reimplemented from netdem::Shape.
|
overridevirtual |
Translate the Triangle object.
This method translates the Triangle object by the specified position vector.
pos | The position vector to translate the Triangle object by. |
Reimplemented from netdem::Shape.
|
overridevirtual |
Update the shape properties of the Triangle object.
This method updates the shape properties of the Triangle object, such as its surface area and volume (which are both zero for a triangle).
Reimplemented from netdem::Shape.
|
overridevirtual |
Update the surface nodes of the Triangle object.
This method updates the surface nodes of the Triangle object based on its current position and orientation.
Reimplemented from netdem::Shape.
Vec3d netdem::Triangle::dir_n {0, 0, 1} |
The normal direction of the triangle.
Mat3d netdem::Triangle::vertices |
The three vertices that define the triangle.