Constraints
Limity constraintů
Definuje legální position nebo angular range samostatně pro každou podporovanou rodinu constraintů.
Jednotky a validní rozsahy limitů jsou type-specific. Nezacházejte s každým JoltConstraint, jako by přijímal stejnou signaturu set_limits().
Limit API podle typu#
| Typ | Creation fields | Runtime metody | Jednotky a validace |
|---|---|---|---|
| Hinge | limits_min / limits_max | set_limits(min,max), get_limits() | Stupně; konečné a seřazené. |
| Slider | limits_min / limits_max | set_limits(min,max), get_limits() | World units; minimum <= 0 <= maximum. |
| Distance | min_distance / max_distance | set_limits(min,max), get_limits() | World units; 0 <= minimum <= maximum. |
| Cone | max_angle | set_limit(angle), get_limit() | Jediný swing half-angle, 0..180 stupňů. |
| SwingTwist | normal/plane half-angles, twist_min/max | set_limits(n,p,tmin,tmax), set_swing_limits(), set_twist_limits(), get_limits() | Stupně; swing 0..180, twist uvnitř -180..180 a seřazený. |
| SixDOF | šest axis fields | set_axis_limit(), set_translation_limits(), set_rotation_limits() | Lineární world units; angular stupně uvnitř -180..180. |
| Pulley | min_length / max_length | set_length(min,max), length getters | Creation přijímá -1 auto-resolution; runtime vyžaduje 0 <= min <= max. |
Fixed, free a limited#
- Stejné Distance nebo Pulley bounds vytvoří přesnou délku.
- Nula Slideru je relativní creation pose, proto legal range musí obsahovat nulu.
- Hinge -180..180 znamená prakticky volnou rotaci; stejné limity uzamknou vybraný relativní úhel.
- SwingTwist half-angle 0 uzamkne swing rozměr; 180 stupňů jej prakticky uvolní.
- SixDOF každou osu výslovně označuje FIXED, FREE nebo LIMITED místo odvození stavu z numeric range.
SixDOF swing upozornění#
Rotation X je twist. Rotation Y/Z jsou coupled swing dimensions. CONE vyžaduje Y/Z limited ranges symetrické kolem nuly, zatímco PYRAMID dovoluje asymetrické rozsahy. Nejde o samostatné Euler clamps.
Runtime příklad#
hinge.set_limits(0, 110); // degrees
slider.set_limits(-1.5, 1.5); // world units, contains zero
tether.set_limits(2, 4); // non-negative distance
cone.set_limit(35); // degrees
swing.set_twist_limits(-25, 25); // degrees
pulley.set_length(6, 8); // combined segment lengthOvěřené kontrakty operací#
Následující kontrakty rozlišují jednotky, návratové hodnoty, chyby a životnost podle aktuální implementace. Nevynechávej kontrolu výsledku: false, 0 a undefined mohou mít u různých metod odlišný význam.
| Symbol / vlastník | Signatura | Kontrakt operace |
|---|---|---|
| JoltConstraint.get_limit | JoltConstraint.get_limit() | Pouze Cone: půlúhel 0..180°; setter Boolean, getter číslo ve stupních nebo 0 při chybě. |
| JoltConstraint.get_limits | JoltConstraint.get_limits() | {minimum, maximum} pro Hinge (°), Distance/Slider (m); SwingTwist {normal_half_angle, plane_half_angle, twist_min, twist_max} (°). undefined pro neplatný/nepodporovaný constraint nebo chybu. |
| JoltConstraint.get_rotation_limits_max | JoltConstraint.get_rotation_limits_max() | SixDOF {x, y, z}, posuv v m / rotace v °. Skládá jednotlivé gettery; chybové složky mohou být 0. |
| JoltConstraint.get_rotation_limits_min | JoltConstraint.get_rotation_limits_min() | SixDOF {x, y, z}, posuv v m / rotace v °. Skládá jednotlivé gettery; chybové složky mohou být 0. |
| JoltConstraint.get_translation_limits_max | JoltConstraint.get_translation_limits_max() | SixDOF {x, y, z}, posuv v m / rotace v °. Skládá jednotlivé gettery; chybové složky mohou být 0. |
| JoltConstraint.get_translation_limits_min | JoltConstraint.get_translation_limits_min() | SixDOF {x, y, z}, posuv v m / rotace v °. Skládá jednotlivé gettery; chybové složky mohou být 0. |
| JoltConstraint.set_limit | JoltConstraint.set_limit(angle) | Pouze Cone: půlúhel 0..180°; setter Boolean, getter číslo ve stupních nebo 0 při chybě. |
| JoltConstraint.set_limits | JoltConstraint.set_limits(minimum, maximum, twist_min = undefined, twist_max = undefined) | Boolean. Hinge: -180 ≤ min ≤ 0 ≤ max ≤ 180 stupňů. Distance: 0 ≤ min ≤ max m. Slider: min ≤ 0 ≤ max m. SwingTwist: všechny 4 argumenty, normal/plane půlúhly 0..180°, -180 ≤ twist_min ≤ twist_max ≤ 180°. Konečné hodnoty; ostatní typy odmítne. |
| JoltConstraint.set_rotation_limits | JoltConstraint.set_rotation_limits(min_x,min_y,min_z,max_x,max_y,max_z) | SixDOF: tři páry min/max, m nebo ° podle názvu. Boolean; volá tři jednotlivé set_axis_limit postupně, není atomické — předchozí osy mohou být změněné při selhání pozdější osy. |
| JoltConstraint.set_translation_limits | JoltConstraint.set_translation_limits(min_x,min_y,min_z,max_x,max_y,max_z) | SixDOF: tři páry min/max, m nebo ° podle názvu. Boolean; volá tři jednotlivé set_axis_limit postupně, není atomické — předchozí osy mohou být změněné při selhání pozdější osy. |