# creates:  nice.png

import numpy as np

from ase import Atoms
from ase.io import write
from ase.utils import hsv

atoms = Atoms('Ag', cell=(2.7, 2.7, 2.7), pbc=True) * (18, 8, 8)

# view with ASE-GUI
# view(atoms)
rotation = '-70x, -20y, -2z'  # found using ASE-GUI menu 'view -> rotate'

# Make colors
colors = hsv(atoms.positions[:, 0])

# Textures
tex = ['jmol'] * 288 + ['glass'] * 288 + ['ase3'] * 288 + ['vmd'] * 288


# Keywords that exist for eps, png, and povs
generic_projection_settings = {
    'rotation': rotation,
    'colors': colors,
    'radii': None,
}

povray_settings = {  # For povray files only
    'display': False,  # Display while rendering
    'pause': False,  # Pause when done rendering (only if display)
    'transparent': False,  # Transparent background
    'canvas_width': None,  # Width of canvas in pixels
    'canvas_height': None,  # Height of canvas in pixels
    'camera_dist': 50.0,  # Distance from camera to front atom
    'image_plane': None,  # Distance from front atom to image plane
    # (focal depth for perspective)
    'camera_type': 'perspective',  # perspective, ultra_wide_angle
    'point_lights': [],  # [[loc1, color1], [loc2, color2],...]
    'area_light': [
        (2.0, 3.0, 40.0),  # location
        'White',  # color
        0.7,
        0.7,
        3,
        3,
    ],  # width, height, Nlamps_x, Nlamps_y
    'background': 'White',  # color
    'textures': tex,  # Length of atoms list of texture names
    'celllinewidth': 0.05,  # Radius of the cylinders representing the cell
}

# Make flat png file
# write('flat.png', atoms, **kwargs)

# Make the color of the glass beads semi-transparent
colors2 = np.zeros((1152, 4))
colors2[:, :3] = colors
colors2[288:576, 3] = 0.95
generic_projection_settings['colors'] = colors2

# Make the raytraced image
# first write the configuration files, then call the external povray executable
renderer = write(
    'nice.pov',
    atoms,
    **generic_projection_settings,
    povray_settings=povray_settings,
)
renderer.render()
