Class MeshGeometry

Inheritance Relationships

Base Type

Class Documentation

class MeshGeometry : public pfield::ObstacleGeometry

Geometry for a triangle-mesh obstacle.

Mesh obstacles delegate signed-distance and normal queries to per-triangle ray / closest-point routines in mesh_collision.hpp. The Coal collision object is built from a pre-loaded BVH rather than a parametric shape.

Note

MeshGeometry holds a non-owning pointer to the MeshCollisionData loaded by PotentialFieldObstacle; it does not manage its lifetime.

Public Functions

explicit MeshGeometry(std::shared_ptr<struct MeshCollisionData> meshCollisionData)

Constructs a MeshGeometry.

Parameters:

meshCollisionData – Shared pointer to the loaded mesh data. Must be non-null before calling computeSignedDistanceAndNormal() or buildCoalGeometry().

virtual ObstacleType getType() const override

Returns the ObstacleType discriminator for this geometry.

virtual std::vector<double> asVector() const override

Returns a vector of the geometry’s defining parameters.

The vector layout is type-specific: Sphere → {radius} Box → {length, width, height} Cylinder → {radius, height} Ellipsoid → {semi_x, semi_y, semi_z} Capsule → {radius, height} Mesh → {length, width, height} (bounding-box dims or zeros)

virtual Eigen::Vector3d halfDimensions(const Eigen::Vector3d &meshScale) const override

Returns the half-dimensions of the obstacle’s axis-aligned bounding box.

Used for broad-phase influence-zone checks.

Parameters:

meshScale – Scale of the mesh resource (used only by MeshGeometry; ignored by all other types).

virtual void computeSignedDistanceAndNormal(const Eigen::Vector3d &localPoint, const Eigen::Quaterniond &obstacleOrientation, double &signedDistance, Eigen::Vector3d &normal) const override

Computes the signed distance and outward surface normal from a point expressed in the obstacle’s local frame.

The caller is responsible for transforming the world-frame query point into the obstacle’s local frame before calling this method.

Parameters:
  • localPoint[in] Query point in the obstacle’s local frame.

  • obstacleOrientation[in] World-frame orientation of the obstacle (quaternion), used to rotate the computed normal back to world coordinates.

  • signedDistance[out] Signed distance to the obstacle surface (negative if inside, positive if outside).

  • normal[out] Outward unit normal in world coordinates at the closest surface point.

virtual std::shared_ptr<coal::CollisionGeometry> buildCoalGeometry(const Eigen::Vector3d &obstaclePosition, const Eigen::Quaterniond &obstacleOrientation, coal::Transform3s &coalTransform) const override

Builds the Coal collision geometry for this obstacle.

The returned shared_ptr is used to construct a coal::CollisionObject. The caller is responsible for supplying the correct world-frame transform.

Parameters:
  • obstaclePosition – World-frame position of the obstacle origin.

  • obstacleOrientation – World-frame orientation of the obstacle.

  • coalTransform[out] The Coal transform that should be passed to coal::CollisionObject together with the returned geometry. For most types this equals the obstacle pose, but OBB-fitted shapes (Box, Capsule) may shift and rotate it to the OBB center.

Returns:

Shared pointer to the Coal collision geometry.

virtual coal::Transform3s computeUpdatedCoalTransform(const Eigen::Vector3d &obstaclePosition, const Eigen::Quaterniond &obstacleOrientation) const override

Computes the world-frame Coal transform to use when updating a cached collision object’s pose.

For most types this simply encodes (obstaclePosition, obstacleOrientation). OBB-fitted types (Box, Capsule) adjust for the centroid offset and PCA rotation baked into the Coal object at construction time.

Parameters:
  • obstaclePosition – New world-frame position of the obstacle.

  • obstacleOrientation – New world-frame orientation of the obstacle.

Returns:

The Coal transform to apply to the cached collision object.

virtual bool operator==(const ObstacleGeometry &other) const override

Equality comparison — only types with the same concrete class and parameters are equal.

virtual std::unique_ptr<ObstacleGeometry> clone() const override

Deep-copy factory, so PotentialFieldObstacle can clone its geometry.

Public Members

std::shared_ptr<struct MeshCollisionData> meshCollisionData

Loaded mesh data.