NetDEM v1.0
|
A class for representing a plane with a center point and normal vector. More...
#include <shape_plane.hpp>
Public Member Functions | |
Plane () | |
Default constructor. | |
Plane (Vec3d const &c, Vec3d const &n) | |
Constructor that sets the center and normal vector of the plane. | |
Plane (double c_x, double c_y, double c_z, double n_x, double n_y, double n_z) | |
Constructor that sets the center and normal vector of the plane using coordinates. | |
void | UpdateSurfaceNodes () override |
Update the surface nodes of the Plane object. | |
void | UpdateShapeProperties () override |
Update the shape properties of the Plane object. | |
Shape * | Clone () const override |
Clone the Plane object. | |
nlohmann::json | PackJson () override |
Pack the Plane object into a JSON structure. | |
void | InitFromJson (nlohmann::json const &js) override |
Initialize the Plane object from a JSON structure. | |
void | Init () |
Initialize the Plane object. | |
void | SetExtent (double e) |
Set the extent of the Plane object. | |
void | SetCenter (double c_x, double c_y, double c_z) |
Set the center point of the Plane object. | |
void | SetNormal (double n_x, double n_y, double n_z) |
Set the normal vector of the Plane object. | |
std::tuple< Vec3d, Vec3d > | GetBoundAABB (Vec3d const &pos, Vec4d const &quat) const override |
Get the axis-aligned bounding box (AABB) of the Plane object. | |
STLModel | GetSTLModel (int num_nodes=400) override |
Generate an STL model of the Plane object. | |
Vec3d | SupportPoint (Vec3d const &dir) override |
Compute the support point of the Plane object in a given direction. | |
VecXT< Vec3d > | SupportPoints (Vec3d const &dir) override |
Compute the support points of the Plane object in a given direction. | |
double | SignedDistance (Vec3d const &pos) const override |
Compute the signed distance from a given position to the surface of the Plane object. | |
Vec3d | SurfacePoint (Vec3d const &pos) override |
Compute the surface point on the Plane object closest to a given position. | |
void | Print () override |
Print information about the Plane 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 std::tuple< Vec3d, Vec3d > | GetBoundAABB () const |
Gets the boundary AABB of the shape instance. | |
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 | Translate (Vec3d const &pos) |
Translates the shape instance to a new position. | |
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 | CheckEnclose (Vec3d const &pos) const |
Determines whether a given point is enclosed within the shape instance. | |
virtual bool | CheckPrincipal () const |
Determines whether the shape is in principal configuration. | |
virtual | ~Shape () |
Destructor for the Shape class. | |
Public Attributes | |
Vec3d | center {0, 0, 0} |
Vec3d | dir_n {0, 0, 1} |
double | extent {5} |
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 for representing a plane with a center point and normal vector.
This class provides methods for setting and updating the position and orientation of the plane, computing its surface properties, generating STL models for visualization, and calculating signed distances and surface points.
Additionally, the Plane class is a subclass of the Shape class, which allows it to be used in combination with other shapes in compound objects.
Plane::Plane | ( | ) |
Default constructor.
Constructor that sets the center and normal vector of the plane.
c | The center point of the plane. |
n | The normal vector of the plane. |
Plane::Plane | ( | double | c_x, |
double | c_y, | ||
double | c_z, | ||
double | n_x, | ||
double | n_y, | ||
double | n_z ) |
Constructor that sets the center and normal vector of the plane using coordinates.
c_x | The x-coordinate of the center point of the plane. |
c_y | The y-coordinate of the center point of the plane. |
c_z | The z-coordinate of the center point of the plane. |
n_x | The x-component of the normal vector of the plane. |
n_y | The y-component of the normal vector of the plane. |
n_z | The z-component of the normal vector of the plane. |
|
overridevirtual |
Clone the Plane object.
This method creates a copy of the Plane object.
Reimplemented from netdem::Shape.
|
overridevirtual |
Get the axis-aligned bounding box (AABB) of the Plane object.
This method computes the AABB of the Plane object at a given position and orientation.
pos | The position of the Plane object. |
quat | The quaternion representing the orientation of the Plane object. |
Reimplemented from netdem::Shape.
|
overridevirtual |
Generate an STL model of the Plane object.
This method generates an STL model of the Plane object using 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 Plane::Init | ( | ) |
|
overridevirtual |
Initialize the Plane object from a JSON structure.
This method initializes the Plane object from a JSON structure previously generated by PackJson().
js | The JSON structure to load. |
Reimplemented from netdem::Shape.
|
overridevirtual |
Pack the Plane object into a JSON structure.
This method packs the Plane object into a JSON structure for serialization and storage.
Reimplemented from netdem::Shape.
|
overridevirtual |
Print information about the Plane object.
This method prints basic information about the Plane object, including its position, rotation, size, volume, and surface area.
Reimplemented from netdem::Shape.
void Plane::SetCenter | ( | double | c_x, |
double | c_y, | ||
double | c_z ) |
void Plane::SetExtent | ( | double | e | ) |
Set the extent of the Plane object.
This method sets the extent of the Plane object, which determines its size.
e | The new extent of the Plane object. |
void Plane::SetNormal | ( | double | n_x, |
double | n_y, | ||
double | n_z ) |
|
overridevirtual |
Compute the signed distance from a given position to the surface of the Plane object.
This method computes the signed distance from a given position to the surface of the Plane object using its center point and normal vector.
pos | The position for which to compute the signed distance. |
Reimplemented from netdem::Shape.
Compute the support point of the Plane object in a given direction.
This method computes the support point of the Plane object in a given direction, which is the point on the plane that is farthest in the specified direction.
dir | The direction in which to compute the support point. |
Reimplemented from netdem::Shape.
Compute the support points of the Plane object in a given direction.
This method computes the support points of the Plane object in a given direction, which are the two points on the plane that are farthest in opposite directions along the specified direction.
dir | The direction in which to compute the support points. |
Reimplemented from netdem::Shape.
Compute the surface point on the Plane object closest to a given position.
This method computes the surface point on the Plane object closest to a given position by finding the intersection of a line passing through the specified position and perpendicular to the plane with the plane.
pos | The position for which to compute the closest surface point. |
Reimplemented from netdem::Shape.
|
overridevirtual |
Update the shape properties of the Plane object.
This method updates the shape properties of the Plane object, such as its volume and surface area.
Reimplemented from netdem::Shape.
|
overridevirtual |
Update the surface nodes of the Plane object.
This method updates the surface nodes of the Plane object based on its current position and rotation.
Reimplemented from netdem::Shape.
Vec3d netdem::Plane::center {0, 0, 0} |
Vec3d netdem::Plane::dir_n {0, 0, 1} |
double netdem::Plane::extent {5} |
the default extent is deemed large enough to cover the computing domain; otherwise, enlarge it. Note that the gjk algorithm would encounter precision issue for two elements with large size difference (e.g., >1e4 times of size difference)