The joint types this phase actually ships (plan P6-1), which is what
JointDescriptor can express.
§28 names nine types; JOINT_TYPES keeps that vocabulary because
PhysicsCapabilities.jointTypes is string[] and an adapter may implement
more than the engine builds. The descriptor union is narrower on purpose —
the joint counterpart of the §24 shape list PH-22a completed:
§28 type
Status
fixed
ships, both dimensions
revolute/hinge
ships, both dimensions, with limits and a motor
prismatic/slider
ships, both dimensions, with limits and a motor
rope
ships, both dimensions
spring
ships, both dimensions
spherical/ball
ships, "3d" only — a plane has no ball joint
distance
staged (plan P6-1)
gear
staged (plan P6-1)
motorized
not a type here — see below
distance and gear are staged because no solver this repository ships can
honour them: Rapier 0.19.3 has no rigid distance joint (its rope caps a
maximum distance only, and emulating a rigid one with a very stiff spring
would misrepresent §28) and no gear joint at all. They are absent from the
union rather than present-and-rejected, so { type: "distance", … } is a
compile error; validateJointDescriptor also rejects them at runtime
for JavaScript callers, citing plan P6-1.
motorized is not a joint type in this API. §28 lists it beside the
others, but a motor is a property of a joint that has a driven degree of
freedom — which is what §28's own example shows, a HingeJoint carrying a
motor record. It is therefore expressed as
RevoluteJointDescriptor.motor and
PrismaticJointDescriptor.motor (decision, WP-6.1).
The joint types this phase actually ships (plan P6-1), which is what JointDescriptor can express.
§28 names nine types; JOINT_TYPES keeps that vocabulary because
PhysicsCapabilities.jointTypesisstring[]and an adapter may implement more than the engine builds. The descriptor union is narrower on purpose — the joint counterpart of the §24 shape list PH-22a completed:fixedrevolute/hingeprismatic/sliderropespringspherical/ball"3d"only — a plane has no ball jointdistancegearmotorizeddistanceandgearare staged because no solver this repository ships can honour them: Rapier 0.19.3 has no rigid distance joint (its rope caps a maximum distance only, and emulating a rigid one with a very stiff spring would misrepresent §28) and no gear joint at all. They are absent from the union rather than present-and-rejected, so{ type: "distance", … }is a compile error; validateJointDescriptor also rejects them at runtime for JavaScript callers, citing plan P6-1.motorizedis not a joint type in this API. §28 lists it beside the others, but a motor is a property of a joint that has a driven degree of freedom — which is what §28's own example shows, aHingeJointcarrying amotorrecord. It is therefore expressed as RevoluteJointDescriptor.motor and PrismaticJointDescriptor.motor (decision, WP-6.1).