def test_ConstructionInfo(self): """ Create a RigidBodyConstructionInfo class and set/get some attributes. """ mass = 1.5 pos = Vec3(1, 2, 3) rot = Quaternion(0, 0, 0, 1) t = Transform(rot, pos) ms = DefaultMotionState(t) cs = EmptyShape() ci = RigidBodyConstructionInfo(mass, ms, cs) # Mass was specified in Ctor. assert ci.mass == mass ci.mass = 1.1 assert ci.mass == 1.1 ci.mass = 1.1 assert ci.mass == 1.1 # Local inertia was specified in Ctor. assert ci.localInertia == Vec3(0, 0, 0) inert = Vec3(1, 2, 10) ci.localInertia = inert assert ci.localInertia == inert inert = Vec3(1, 2, 20) ci.localInertia = inert assert ci.localInertia == inert # Verify the 'motionState' attribute. assert ci.motionState.getWorldTransform().getOrigin() == pos assert ci.motionState.getWorldTransform().getRotation() == rot # Verify the 'collisionShape' attribute. assert ci.collisionShape.getName() == b"Empty"
def test_ConstructionInfo_to_RigidBody(self): """ Verify that the initial motion state is transferred correctly to the RigidBody. """ mass = 10 pos = Vec3(1, 2, 3) rot = Quaternion(0, 1, 0, 0) t = Transform(rot, pos) ms = DefaultMotionState(t) cs = EmptyShape() inert = Vec3(1, 2, 4) # Compile the Rigid Body parameters. ci = RigidBodyConstructionInfo(mass, ms, cs, Vec3(2, 4, 6)) assert ci.localInertia == Vec3(2, 4, 6) ci.localInertia = inert assert ci.localInertia == inert # Construct the rigid body and delete the construction info. body = RigidBody(ci) del ci # Verify that the object is at the correct position and has the correct # mass and inertia. t = body.getMotionState().getWorldTransform() assert t.getOrigin() == pos assert t.getRotation() == rot assert body.getInvMass() == 1 / mass assert body.getInvInertiaDiagLocal() == Vec3(1, 0.5, 0.25)