Launch ``pyny.Place.get_height(points)`` recursively for all 
        the ``pyny.Place``.
        
        The points outside the object will have a NaN value in the
        z column. These point will not be stored but it will be
        returned.
         
        :param points: list of coordinates of the points to calculate.
        :type points: ndarray (shape=(N, 2 or 3))
        :param edge: If True, consider the points in the Polygon's edge
            inside the Polygon.
        :type edge: bool
        :param attach: If True, stores the computed points along with
            the Place's set of points.
        :type attach: bool
        :param extra_height: Adds an extra height (z value) to the
            resulting points.
        :type extra_height: float
        :returns: (x, y, z)
        :rtype: ndarray

def get_height(self, points, edge=True, attach=False, extra_height=0):
        """
        Launch ``pyny.Place.get_height(points)`` recursively for all 
        the ``pyny.Place``.
        
        The points outside the object will have a NaN value in the
        z column. These point will not be stored but it will be
        returned.
         
        :param points: list of coordinates of the points to calculate.
        :type points: ndarray (shape=(N, 2 or 3))
        :param edge: If True, consider the points in the Polygon's edge
            inside the Polygon.
        :type edge: bool
        :param attach: If True, stores the computed points along with
            the Place's set of points.
        :type attach: bool
        :param extra_height: Adds an extra height (z value) to the
            resulting points.
        :type extra_height: float
        :returns: (x, y, z)
        :rtype: ndarray
        """
        for place in self:
            points = place.get_height(points, edge, attach, extra_height)
        if not attach: return points