Class BoxGeometry

Inheritance Relationships

Base Type

Class Documentation

class BoxGeometry : public pfield::ObstacleGeometry

Geometry for a box (axis-aligned or oriented bounding box) obstacle.

Defined by full extents (length × width × height) along the local X, Y, Z axes respectively. Supports OBB-fitted boxes (e.g. fitted to a mesh via PCA): in that case axes holds the PCA rotation and centroidOffset holds the displacement from the collision-origin frame to the OBB center.

SDF: closest-point distance to the box surface (negative inside).

Public Functions

BoxGeometry(double length, double width, double height)

Constructs an axis-aligned BoxGeometry.

Parameters:
  • length – Full extent along local X.

  • width – Full extent along local Y.

  • height – Full extent along local Z.

BoxGeometry(double length, double width, double height, const Eigen::Matrix3d &axes, const Eigen::Vector3d &centroidOffset)

Constructs an OBB-fitted BoxGeometry.

Parameters:
  • length – Full extent along the OBB X axis.

  • width – Full extent along the OBB Y axis.

  • height – Full extent along the OBB Z axis.

  • axes – Rotation from the obstacle frame to the OBB principal-axis frame (columns are OBB axes).

  • centroidOffset – Offset from the collision-origin to the OBB center, expressed in the obstacle’s local frame.

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

double length

Full extent along OBB X.

double width

Full extent along OBB Y.

double height

Full extent along OBB Z.

Eigen::Matrix3d axes

OBB rotation (identity for AA boxes).

Eigen::Vector3d centroidOffset

OBB center offset (zero for AA boxes).