internal DigitalRuneDistanceRangeJoint(DistanceRangeJointDescriptor descriptor) { WrappedDistanceRangeJoint = new DistanceLimit(); #region set RigidBodies if (!(descriptor.RigidBodyA is RigidBody)) { throw new ArgumentException(String.Format("The type of the property 'RigidBodyA' must be '{0}'.", typeof(RigidBody))); } WrappedDistanceRangeJoint.BodyA = ((RigidBody)descriptor.RigidBodyA).WrappedRigidBody; _rigidBodyA = descriptor.RigidBodyA; if (!(descriptor.RigidBodyB is RigidBody)) { throw new ArgumentException("The type of the property 'RigidBodyB' must be 'System.Physics.DigitalRune.RigidBody'."); } WrappedDistanceRangeJoint.BodyB = ((RigidBody)descriptor.RigidBodyB).WrappedRigidBody; _rigidBodyB = descriptor.RigidBodyB; #endregion WrappedDistanceRangeJoint.AnchorPositionALocal = descriptor.AnchorPositionALocal.ToDigitalRune(); WrappedDistanceRangeJoint.AnchorPositionBLocal = descriptor.AnchorPositionBLocal.ToDigitalRune(); WrappedDistanceRangeJoint.MinDistance = descriptor.MinimumDistance; WrappedDistanceRangeJoint.MaxDistance = descriptor.MaximumDistance; Descriptor = descriptor; }
public IDistanceRangeJoint Create(DistanceRangeJointDescriptor descriptor) { var constraint = new DigitalRuneDistanceRangeJoint(descriptor); _simulator._wrappedSimulation.Constraints.Add(constraint.WrappedDistanceRangeJoint); return(constraint); }
private void CreateChain <TShape, TShapeDescriptor>(MaterialDescriptor materialDescriptor, TShapeDescriptor shapeDescriptor, DistanceRangeJointDescriptor constraintDescriptor, int count, float space, int staticBall, float xOffset, float yOffset, float zOffset) where TShapeDescriptor : struct, IDescriptor where TShape : IShape, IDescriptible <TShapeDescriptor> { var bodies = new IRigidBody[count]; var rigidBodyDescriptor = new RigidBodyDescriptor(MotionType.Static, Matrices.I, true); for (int i = 0; i < count; i++) { rigidBodyDescriptor.Pose = Matrices.Translate(xOffset + (space + i * space - ((count - 1) * space / 2)), yOffset, zOffset); bodies[i] = _simulator.ActorsFactory.Create <IRigidBody, RigidBodyDescriptor>(rigidBodyDescriptor); bodies[i].UserData = String.Format("chain {0}", i); var fixture = bodies[i].FixtureFactory.Create <ISimpleFixture, FixtureDescriptor>(new FixtureDescriptor(Matrices.I)); fixture.ShapeFactory.Create <TShape, TShapeDescriptor>(shapeDescriptor); fixture.MaterialFactory.Create <IMaterial, MaterialDescriptor>(materialDescriptor); if (i > 0) { constraintDescriptor.RigidBodyA = bodies[i - 1]; constraintDescriptor.RigidBodyB = bodies[i]; _simulator.ConstraintsFactory.Create <IDistanceRangeJoint, DistanceRangeJointDescriptor>( constraintDescriptor); } else { rigidBodyDescriptor.MotionType = MotionType.Static; } } }
public DefaultDistanceRangeJoint(DistanceRangeJointDescriptor descriptor) { Descriptor = descriptor; }
public static IDistanceRangeJoint CreateDistanceRangeJoint(this IFactory <IConstraint> factory, DistanceRangeJointDescriptor descriptor) { return(factory.Create <IDistanceRangeJoint, DistanceRangeJointDescriptor>(descriptor)); }