Add polyhedras to the Place by giving their top polygon and
        applying extrusion along the z axis. The resulting polygon
        from the intersection will be declared as a hole in the Surface.
        
        :param top_polys: Polygons to be extruded to the Surface.
        :type top_polys: list of ``pyny.Polygon``
        :param make_ccw: If True, points will be sorted ccw.
        :type make_ccw: bool
        :returns: None

        .. note:: When a top polygon is projected and it
            instersects multiple Surface's polygons, a independent
            polyhedron will be created for each individual 
            intersection\*.
        .. warning:: The top polygons have to be over the Surface, that
            is, their z=0 projection have to be inside of Surface's z=0 
            projection.
        .. warning:: If the Polyhedra are not created with this method
            or ``Polyhedron.by_two_polygons()``, holes will not be 
            added.

def add_extruded_obstacles(self, top_polys, make_ccw=True):
        """
        Add polyhedras to the Place by giving their top polygon and
        applying extrusion along the z axis. The resulting polygon
        from the intersection will be declared as a hole in the Surface.
        
        :param top_polys: Polygons to be extruded to the Surface.
        :type top_polys: list of ``pyny.Polygon``
        :param make_ccw: If True, points will be sorted ccw.
        :type make_ccw: bool
        :returns: None

        .. note:: When a top polygon is projected and it
            instersects multiple Surface's polygons, a independent
            polyhedron will be created for each individual 
            intersection\*.
        .. warning:: The top polygons have to be over the Surface, that
            is, their z=0 projection have to be inside of Surface's z=0 
            projection.
        .. warning:: If the Polyhedra are not created with this method
            or ``Polyhedron.by_two_polygons()``, holes will not be 
            added.
        """
        if type(top_polys) != list: top_polys = [top_polys]
        for poly1 in top_polys:
            if type(poly1) != Polygon:
                obstacle = Polygon(poly1, make_ccw)
            intersections_dict = self.surface.intersect_with(obstacle)
            
            base = []
            for i, xy in intersections_dict.items():
                base.append(self.surface[i].get_height(xy, full=True))
            base_surf = Surface(base)
            base_surf.melt()
            
            for base_poly in base_surf:
                obst_points = obstacle.get_height(base_poly.points, 
                                                full=True)
                self.surface.holes.append(base_poly)
                self.polyhedra.append(Polyhedron.by_two_polygons(
                                      base_poly.points, 
                                      obst_points, 
                                      make_ccw))