## 10.5 Visualisation

For any of the example scripts shown previously, the generated structures can be rendered in real time allowing for 3D visualisation and manipulation. This is simply achieved by the command:

    structure.render()

For example the script `nanocap_fullerene_visualise.py` is minor modification of `nanocap_single_fullerene.py` which displays the generated fullerene. This example is shown below:

    '''
    -=-=-=-=-=-=-=-=-=-=-=-=-=NanoCap=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    Copyright Marc Robinson  2014
    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    A script to construct a fullerene and visualise

    Input:
        N_carbon = Number of carbon atoms
        dual_lattice_force_field = force field
                                   for dual lattice
        carbon_force_field = force field
                            for carbon lattice
        dual_lattice_mintol= energy tolerance for
                             dual lattice optimisation
        dual_lattice_minsteps= steps for dual lattice
                                optimisation
        carbon_lattice_mintol=as above for carbon lattice
        carbon_lattice_minsteps=as above for carbon lattice
        optimiser=optimsation algorithm
        seed = seed for initial cap generation

    Output:
        structure is renderer real time in popup window
        enabling 3D interaction

    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    '''

    import sys,os,random,numpy
    from nanocap.core.minimisation import DualLatticeMinimiser, \
                                          CarbonLatticeMinimiser
    from nanocap.structures.fullerene import Fullerene
    from nanocap.core.output import write_xyz

    N_carbon = 200

    dual_force_field = "Thomson"
    carbon_force_field = "EDIP"
    dual_lattice_mintol=1e-10
    dual_lattice_minsteps=100
    carbon_lattice_mintol=1e-10
    carbon_lattice_minsteps=100
    optimiser="LBFGS"
    seed = 12345

    my_fullerene = Fullerene()
    my_fullerene.construct_dual_lattice(N_carbon=N_carbon,seed=seed)
    my_fullerene.set_fix_pole(False)
    my_fullerene.set_nfixed_to_equator(0)

    Dminimiser = DualLatticeMinimiser(FFID=dual_force_field,
                                      structure = my_fullerene)
    Dminimiser.minimise(my_fullerene.dual_lattice,
                        min_type=optimiser,
                        ftol=dual_lattice_mintol,
                        min_steps=dual_lattice_minsteps)

    my_fullerene.construct_carbon_lattice()

    Cminimiser = CarbonLatticeMinimiser(FFID=carbon_force_field,
                                        structure = my_fullerene)

    Cminimiser.minimise_scale(my_fullerene.carbon_lattice)
    Cminimiser.minimise(my_fullerene.carbon_lattice,
                        min_type=optimiser,
                        ftol=carbon_lattice_mintol,
                        min_steps=carbon_lattice_minsteps)

    my_fullerene.render()