/// <inheritdoc/>
        public void Apply(ForceField forceField)
        {
            if (forceField == null)
            {
                throw new ArgumentNullException("forceField");
            }

            if (forceField.Simulation == null)
            {
                return;
            }

            if (CollisionObject != null && CollisionObject.Domain == forceField.Simulation.CollisionDomain)
            {
                // Get objects touching the CollisionObject.
                var affectedObjects = forceField.Simulation.CollisionDomain.GetContactObjects(CollisionObject);
                foreach (CollisionObject affectedObject in affectedObjects)
                {
                    RigidBody body = affectedObject.GeometricObject as RigidBody;
                    if (body != null && body.MotionType == MotionType.Dynamic)
                    {
                        forceField.Apply(body);
                    }
                }
            }
        }
        /// <inheritdoc/>
        public void Apply(ForceField forceField)
        {
            if (forceField == null)
            {
                throw new ArgumentNullException("forceField");
            }

            if (RigidBodies != null)
            {
                int numberOfRigidBodies = RigidBodies.Count;
                for (int index = 0; index < numberOfRigidBodies; index++)
                {
                    var body = RigidBodies[index];
                    if (body != null && body.MotionType == MotionType.Dynamic)
                    {
                        forceField.Apply(body);
                    }
                }
            }
        }
        /// <inheritdoc/>
        public void Apply(ForceField forceField)
        {
            if (forceField == null)
            {
                throw new ArgumentNullException("forceField");
            }

            var simulation = forceField.Simulation;

            if (simulation != null)
            {
                int numberOfRigidBodies = simulation.RigidBodies.Count;
                if (Exclude != null)
                {
                    for (int i = 0; i < numberOfRigidBodies; i++)
                    {
                        var body = simulation.RigidBodies[i];
                        if (body.MotionType == MotionType.Dynamic && !Exclude(body))
                        {
                            forceField.Apply(body);
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < numberOfRigidBodies; i++)
                    {
                        var body = simulation.RigidBodies[i];
                        if (body.MotionType == MotionType.Dynamic)
                        {
                            forceField.Apply(body);
                        }
                    }
                }
            }
        }