Code example

Create a simple simulation without using the input files.
Import the library and create an object Simulator
from photonmap.Simulator import *

if __name__ == "__main__":
    simulator = Simulator()
Setup configuration
#setup configuration
simulator.nb_photons = 1000000
simulator.max_depth = 5
Setup light and environment by using the object Shape of openalea

In general, we can setup the environment and light with the same function addEnvToScene. However, the ways that we define the material of object will identify the type of object is environment or light.

For the environment, there are 4 optical properties which is need to be declared:
- ambient: The reflection of object
- specular: The specular of object
- shininess: The shininess of object. The roughness of object is equal to 1 - shininess
- transparency: The transparent of object

For the light source, only the emission need to be declared. This value is also the different between these two type of object.
simulator.resetScene()
#setup environment
ground_ts = TriangleSet(pointList = [(0,0,0), (1,0,0), (0,1,0)], indexList = [(0, 2, 1)])
ground_mat = Material(
                    name="Ground",
                    ambient = Color3(0),
                    specular = Color3(127), #spec = 0.5 = 127/255
                    shininess = 1,
                    transparency = 0
                )
ground_sh = Shape(ground_ts, ground_mat)

simulator.addEnvToScene(ground_sh)

#setup light
light_ts = TriangleSet(pointList = [(0,0,5), (1,0,5), (0,1,5)], indexList = [(0, 1, 2)])
light_mat = Material(
                    name="Light",
                    emission = Color3(255, 255, 255)
                )
light_sh = Shape(light_ts, light_mat)
simulator.addEnvToScene(light_sh)
To setup the captors (The objects that we do the calculations of light’s energy), we have to define its geometry, material and position
The optical properties of captor’s material are the same as the optical properties of environment’s material
In this tools, we have 2 type of captors:
- FaceCaptor: the material of this captor work like the material of the other surfaces
- VirtualCaptor: the material of this captor has no effect to the light in the simulation
#setup captor
captor_ts = TriangleSet(pointList = [(0,0,1), (1,0,0), (0,1,0)], indexList = [(0, 1, 2)])
captor_mat = Material(
                        name="Captor",
                        ambient = Color3( 127 ),
                        specular = Color3( 127 ), #spec = 0.5 = 127/255
                        shininess = 0.5,
                        transparency = 0.5
                    )
captor_sh = Shape(captor_ts, captor_mat, 0)

simulator.addFaceCaptorToScene(shape=captor_sh, position=(0,0,3), scale_factor=1)
simulator.addVirtualCaptorToScene(shape=captor_sh, position=(0,0,2), scale_factor=1)

To run the simulation, we use the function run of the object Simulator. The result of the simulation is saved in an object of type SimulationResult

#run
res = simulator.run()
To write the result to a file, using the function writeResults of the object SimulationResult
#write result to file
res.writeResults("filename")
Here is the completed program
from photonmap.Simulator import *
from openalea.plantgl.all import *

if __name__ == "__main__":

    simulator = Simulator()

    #setup configuration
    simulator.nb_photons = 1000000
    simulator.max_depth = 5

    simulator.resetScene()

    #setup environment
    ground_ts = TriangleSet(pointList = [(0,0,0), (1,0,0), (0,1,0)], indexList = [(0, 2, 1)])
    ground_mat = Material(
                        name="Ground",
                        ambient = Color3( 0 ),
                        specular = Color3( 127 ), #spec = 0.5 = 127/255
                        shininess = 1,
                        transparency = 0
                    )
    ground_sh = Shape(ground_ts, ground_mat)

    simulator.addEnvToScene(ground_sh)

    #setup light
    light_ts = TriangleSet(pointList = [(0,0,5), (1,0,5), (0,1,5)], indexList = [(0, 1, 2)])
    light_mat = Material(
                        name="Light",
                        emission = Color3(255, 255, 255)
                    )
    light_sh = Shape(light_ts, light_mat)
    simulator.addEnvToScene(light_sh)

    #setup captor
    captor_ts = TriangleSet(pointList = [(0,0,1), (1,0,0), (0,1,0)], indexList = [(0, 1, 2)])
    captor_mat = Material(
                        name="Captor",
                        ambient = Color3( 127 ),
                        specular = Color3( 127 ), #spec = 0.5 = 127/255
                        shininess = 0.5,
                        transparency = 0.5
                    )
    captor_sh = Shape(captor_ts, captor_mat, 0)
    simulator.addFaceCaptorToScene(shape=captor_sh, position=(0,0,3), scale_factor=1)
    simulator.addVirtualCaptorToScene(shape=captor_sh, position=(0,0,2), scale_factor=1)

    #run
    res = simulator.run()
    res.writeResults()