Fix CeCill license number
[scilab.git] / scilab / modules / renderer / src / java / org / scilab / modules / renderer / JoGLView / util / LightingUtils.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2013 - Pedro SOUZA
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10  */
11 package org.scilab.modules.renderer.JoGLView.util;
12
13 import org.scilab.forge.scirenderer.shapes.appearance.Material;
14 import org.scilab.forge.scirenderer.shapes.appearance.Color;
15 import org.scilab.forge.scirenderer.tranformations.Vector3d;
16 import org.scilab.forge.scirenderer.lightning.Light;
17 import org.scilab.forge.scirenderer.lightning.LightManager;
18
19 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject;
20 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
21
22 /**
23  * Utility functions to setup lighting.
24  * @author Pedro SOUZA
25  */
26 public class LightingUtils {
27
28     /**
29      * Convert the given material to a scirenderer material.
30      * @param m the material.
31      */
32     public static Material getMaterial(org.scilab.modules.graphic_objects.lighting.Material m) {
33         Material mtl = new Material();
34
35         Double[] color = m.getAmbientColor();
36         mtl.setAmbientColor(new Color(color[0].floatValue(), color[1].floatValue(), color[2].floatValue()));
37         color = m.getDiffuseColor();
38         mtl.setDiffuseColor(new Color(color[0].floatValue(), color[1].floatValue(), color[2].floatValue()));
39         color = m.getSpecularColor();
40         mtl.setSpecularColor(new Color(color[0].floatValue(), color[1].floatValue(), color[2].floatValue()));
41         mtl.setColorMaterialEnable(m.getColorMaterialMode().booleanValue());
42         mtl.setShininess(m.getShininess().floatValue());
43
44         return mtl;
45     }
46
47     /**
48      * Enables/disables lighting.
49      * @param manager the light manager.
50      * @param status the status.
51      */
52     public static void setLightingEnable(LightManager manager, Boolean status) {
53         if (manager == null) {
54             return;
55         }
56         manager.setLightningEnable(status.booleanValue());
57         Light light = manager.getLight(0);
58         light.setEnable(status.booleanValue());
59     }
60
61
62     public static void setupLights(LightManager manager, org.scilab.modules.graphic_objects.axes.Axes axes) {
63
64         if (manager == null) {
65             return;
66         }
67
68         boolean hasLight = false;
69         int index = 0;
70
71         for (Integer child : axes.getChildren()) {
72             GraphicObject object = GraphicController.getController().getObjectFromId(child);
73             if (object instanceof org.scilab.modules.graphic_objects.lighting.Light) {
74                 //setup only visible lights
75                 if (((org.scilab.modules.graphic_objects.lighting.Light)object).getVisible()) {
76                     setLight(manager, (org.scilab.modules.graphic_objects.lighting.Light)object, index++);
77                     hasLight = true;
78                 }
79             }
80             if (index >= manager.getLightNumber()) {
81                 break;
82             }
83         }
84         for (int i = index; i < manager.getLightNumber(); ++i) {
85             manager.getLight(i).setEnable(false);
86         }
87         manager.setLightningEnable(hasLight);
88     }
89
90     /**
91      * Setup the give light.
92      * @param manager the light manager.
93      * @param light the light.
94      * @param index the light index.
95      */
96     public static void setLight(LightManager manager, org.scilab.modules.graphic_objects.lighting.Light light, int index) {
97
98         Light sciLight = manager.getLight(index);
99
100         Double[] color = light.getAmbientColor();
101         sciLight.setAmbientColor(new Color(color[0].floatValue(), color[1].floatValue(), color[2].floatValue()));
102         color = light.getDiffuseColor();
103         sciLight.setDiffuseColor(new Color(color[0].floatValue(), color[1].floatValue(), color[2].floatValue()));
104         color = light.getSpecularColor();
105         sciLight.setSpecularColor(new Color(color[0].floatValue(), color[1].floatValue(), color[2].floatValue()));
106
107         switch (light.getLightTypeAsInteger()) {
108             case 0: //directional
109                 sciLight.setDirection(new Vector3d(light.getDirection()));
110                 break;
111             case 1: //point
112                 sciLight.setPosition(new Vector3d(light.getPosition()));
113                 break;
114             default:
115                 break;
116         }
117
118         sciLight.setEnable(true);
119     }
120 }