Collection of external (active) interactions, interacting with merged rigid bodies.
std::function< void(ForceFrame, const agx::RigidBody *)> ContactEdgeStrengthVisitor
Visitor callback where ForceFrame is edge strength in world coordinates and 'otherRb'.
const BodyForceDataContainer & getForceData() const
std::function< agx::Bool(const agx::RigidBody *)> ContactEdgeStrengthVisitorPredicate
Predicate to calculate force frame and visit ContactEdgeStrengthVisitor.
void collectData(const agx::MergedBody *mergedBody, const MergeSplitPostSolveData &data, const GlobalGraphNodeIndexContainer *externalInteractions, const GeometryContactMergeSplitAlgorithm *geometryContactAlgorithm, const ConstraintMergeSplitAlgorithm *constraintAlgorithm)
Collect data given sources.
void traverseContactEdgeStrength(const agx::RigidBody *rb, ContactEdgeStrengthVisitorPredicate pred, ContactEdgeStrengthVisitor visitor) const
Traverses all contact edges associated to rb where the visitor arguments are the edge strength and ot...
const ForceDataVector * tryGetForceData(const agx::RigidBody *rb) const
const agx::MergedBody * getMergedBody() const
agx::Bool calculateContactEdgeStrength(const agx::RigidBody *rb, MergedBodySolverData::ForceFrame &contactStrength) const
Calculates the total contact edge strength given merged rigid body.
Structure holding several "normal" rigid bodies.
The rigid body class, combining a geometric model and a frame of reference.
Object containing force and torque from a graph node.
agx::Vec3 force
Force in world coordinates.
agx::Vec3 torque
Torque in world coordinates.
ForceData(agx::UInt graphNodeIndex, const agx::Vec3 &force, const agx::Vec3 &torque)
agx::UInt graphNodeIndex
Graph node index such that type = postSolveData.getType( graphNodeIndex ).
Force frame where the resultant force is u + v + n.