def read_shape_file(path):
    """Read shapes from asf files.

    Args:
        path: Path to asf data file.

    Returns:
        A tuple (point_list, types) where point_list is a list containing
        lists of points describing each face shape. Types are the shapes
        corresponding shape type (see DTU documentation for details).
    """
    with open(path) as f:
        lines = f.readlines()
        lines = [line.strip() for line in lines]
        num_points, *lines, _ = [
            line for line in lines if '#' not in line and line != ''
        ]

        num_points = int(num_points)
        points = [line.split() for line in lines]

        info = [{
            'path': int(point[0]),
            'coord': (float(point[2]), float(point[3])),
            'type': int(point[1])
        } for point in points]

        num_paths = max(info, key=lambda x: x['path'])['path']

        result = []
        types = []
        for i in range(num_paths + 1):
            ls = [e for e in info if e['path'] == i]
            result.append([e['coord'] for e in ls])
            types.append(ls[0]['type'])

        return result, types