def max_effect_length(self):
        """
        :return: The longest possible effect vector length.
        :rtype: float

        In other words, the *radius* of a sphere:

            - who's center is at ``start``.
            - all ``parts`` are contained within the sphere.
        """
        # Method: using each solid's bounding box:
        #   - get vector from start to bounding box center
        #   - get vector from bounding box center to any corner
        #   - add the length of both vectors
        #   - return the maximum of these from all solids
        def max_length_iter():
            for part in self.parts:
                if part.local_obj.findSolid():
                    bb = part.local_obj.findSolid().BoundingBox()
                    yield abs(bb.center - self.location.origin) + (bb.DiagonalLength / 2)
        try:
            return max(max_length_iter())
        except ValueError as e:
            # if iter returns before yielding anything
            return 0
:return: The longest possible effect vector length.
        :rtype: float

        In other words, the *radius* of a sphere:

            - who's center is at ``start``.
            - all ``parts`` are contained within the sphere.