Exemple #1
0
def test_export_images_from_view_file():
    """Test export images method using the from_view_file classmethod."""
    file_path = r'tests/assets/gridbased.hbjson'
    results_folder = r'tests/assets/df_results'
    target_folder = r'tests/assets/temp'
    view_file_path = r'tests/assets/view.vf'

    model = Model.from_hbjson(file_path, load_grids=SensorGridOptions.Mesh)
    model.update_display_mode(DisplayMode.Wireframe)

    daylight_factor = []
    for grid in model.sensor_grids.data:
        res_file = pathlib.Path(results_folder, f'{grid.identifier}.res')
        grid_res = [float(v) for v in res_file.read_text().splitlines()]
        daylight_factor.append(grid_res)

    model.sensor_grids.add_data_fields(daylight_factor,
                                       name='Daylight-factor',
                                       per_face=True,
                                       data_range=(0, 20))
    model.sensor_grids.color_by = 'Daylight-factor'
    model.sensor_grids.display_mode = DisplayMode.SurfaceWithEdges

    # actors
    actors = Actor.from_model(model=model)

    # Initialize a scene
    scene = Scene(background_color=(255, 255, 255))
    scene.add_actors(actors)

    # A camera setup using the classmethod
    camera = Camera.from_view_file(file_path=view_file_path)

    # Add all the cameras to the scene
    scene.add_cameras(camera)

    # if target folder exists, delete it and create a fresh new folder
    if os.path.isdir(target_folder):
        shutil.rmtree(target_folder)
    os.mkdir(target_folder)

    # Export images for all the cameras
    images_path = scene.export_images(folder=target_folder,
                                      image_type=ImageTypes.png,
                                      name='camera')

    for path in images_path:
        assert os.path.isfile(path)

    shutil.rmtree(target_folder)
def test_export_images():
    """Test export images method."""
    file_path = r'tests/assets/gridbased.hbjson'
    results_folder = r'tests/assets/df_results'
    target_folder = r'tests/assets/temp'
    csv_path = r'tests/assets/radiation_results/radiation.csv'

    model = Model.from_hbjson(file_path, load_grids=SensorGridOptions.Mesh)
    model.update_display_mode(DisplayMode.Wireframe)

    daylight_factor = []
    for grid in model.sensor_grids.data:
        res_file = pathlib.Path(results_folder, f'{grid.identifier}.res')
        grid_res = [float(v) for v in res_file.read_text().splitlines()]
        daylight_factor.append(grid_res)

    model.sensor_grids.add_data_fields(daylight_factor,
                                       name='Daylight-factor',
                                       per_face=True,
                                       data_range=(0, 20))
    model.sensor_grids.color_by = 'Daylight-factor'
    model.sensor_grids.display_mode = DisplayMode.SurfaceWithEdges

    radiation = []
    with open(csv_path) as csvfile:
        csvreader = csv.reader(csvfile)
        for data in csvreader:
            radiation.append([float(data[0])])

    model.shades.add_data_fields(radiation,
                                 name='Radiation',
                                 data_range=(0, 2000),
                                 colors=ColorSets.original)
    model.shades.color_by = 'Radiation'
    model.shades.display_mode = DisplayMode.SurfaceWithEdges

    # actors
    actors = Actor.from_model(model=model)

    # Initialize a scene
    scene = Scene(background_color=(255, 255, 255))
    scene.add_actors(actors)

    scene.legend_parameters[
        'Daylight-factor'].orientation = Orientation.horizontal
    scene.legend_parameters['Daylight-factor'].hide_legend = True
    scene.legend_parameters['Daylight-factor'].position = (0.0, 0.1)

    rd = scene.legend_parameter('Radiation')
    rd.orientation = Orientation.vertical
    rd.height = 0.45
    rd.width = 0.05
    rd.decimal_count = DecimalCount.integer
    rd.hide_legend = True
    rd.position = (0.90, 0.1)

    # A camera setup using the constructor
    camera = Camera(position=(-50.28, -30.32, 58.64),
                    direction=(0.59, 0.44, -0.67),
                    up_vector=(0.53, 0.40, 0.74),
                    h_size=52.90)

    # Cameras extracted from hbjson
    cameras = model.cameras

    # Gather all the cameras
    cameras.append(camera)

    # Add all the cameras to the scene
    scene.add_cameras(cameras)

    # if target folder exists, delete it and create a fresh new folder
    if os.path.isdir(target_folder):
        shutil.rmtree(target_folder)
    os.mkdir(target_folder)

    # Export images for all the cameras
    images_path = scene.export_images(folder=target_folder,
                                      image_type=ImageTypes.png)

    for path in images_path:
        assert os.path.isfile(path)

    shutil.rmtree(target_folder)
Exemple #3
0
def export(hbjson_file, name, folder, image_type, image_width, image_height,
           background_color, display_mode_model, grid_options,
           display_mode_grid, view, config):
    """Export images from radiance views in a HBJSON file.

    \b
    Args:
        hbjson-file: Path to an HBJSON file.

    """
    folder = pathlib.Path(folder)
    folder.mkdir(exist_ok=True)

    # Set image types
    if image_type == 'png':
        image_type = ImageTypes.png
    elif image_type == 'jpg':
        image_type = ImageTypes.jpg
    elif image_type == 'ps':
        image_type == ImageTypes.ps
    elif image_type == 'tiff':
        image_type == ImageTypes.tiff
    elif image_type == 'ps':
        image_type == ImageTypes.ps
    elif image_type == 'pnm':
        image_type == ImageTypes.pnm

    # Set Sensor grids
    if grid_options == 'ignore':
        grid_options = SensorGridOptions.Ignore
    elif grid_options == 'points':
        grid_options = SensorGridOptions.Sensors
    elif grid_options == 'meshes':
        grid_options = SensorGridOptions.Mesh

    try:
        model = Model.from_hbjson(hbjson=hbjson_file, load_grids=grid_options)

        # Set model's display mode
        if display_mode_model == 'shaded':
            model.update_display_mode(DisplayMode.Shaded)
        elif display_mode_model == 'surface':
            model.update_display_mode(DisplayMode.Surface)
        elif display_mode_model == 'surfacewithedges':
            model.update_display_mode(DisplayMode.SurfaceWithEdges)
        elif display_mode_model == 'wireframe':
            model.update_display_mode(DisplayMode.Wireframe)
        elif display_mode_model == 'points':
            model.update_display_mode(DisplayMode.Points)

        # Set model's grid's display mode
        if display_mode_grid == 'shaded':
            model.sensor_grids.display_mode = DisplayMode.Shaded
        elif display_mode_model == 'surface':
            model.sensor_grids.display_mode = DisplayMode.Surface
        elif display_mode_model == 'surfacewithedges':
            model.sensor_grids.display_mode = DisplayMode.SurfaceWithEdges
        elif display_mode_model == 'wireframe':
            model.sensor_grids.display_mode = DisplayMode.Wireframe
        elif display_mode_model == 'points':
            model.sensor_grids.display_mode = DisplayMode.Points

        actors = Actor.from_model(model)

        scene = Scene(background_color=background_color)
        scene.add_actors(actors)

        # Set a default camera if there are not cameras in the model
        if not model.cameras and not view:
            # Use the centroid of the model for the camera position
            actors = Actor.from_model(model=model)
            position = Actor.get_centroid(actors)
            camera = Camera(position=position, type='l')
            scene.add_cameras(camera)

        else:
            # Collection cameras from model, if the model has it
            if len(model.cameras) != 0:
                cameras = model.cameras
                scene.add_cameras(cameras)

            # if view files are provided collect them
            if view:
                for vf in view:
                    camera = Camera.from_view_file(file_path=vf)
                    scene.add_cameras(camera)

        # load config if provided
        if config:
            model.load_config(config)

        output = scene.export_images(folder=folder,
                                     name=name,
                                     image_type=image_type,
                                     image_width=image_width,
                                     image_height=image_height)

    except Exception:
        traceback.print_exc()
        sys.exit(1)
    else:
        print(f'Success: {output}', file=sys.stderr)
        return sys.exit(0)