1cc0d142ca2d22265b6f34a7f2a37d6438b7030e
[scilab.git] / scilab / modules / scirenderer / src / org / scilab / forge / scirenderer / implementation / g2d / G2DDrawingTools.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2012 - Scilab Enterprises - Calixte DENIZET
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
12 package org.scilab.forge.scirenderer.implementation.g2d;
13
14 import org.scilab.forge.scirenderer.DrawingTools;
15 import org.scilab.forge.scirenderer.SciRendererException;
16 import org.scilab.forge.scirenderer.buffers.ElementsBuffer;
17 import org.scilab.forge.scirenderer.lightning.LightManager;
18 import org.scilab.forge.scirenderer.renderer.Renderer;
19 import org.scilab.forge.scirenderer.shapes.appearance.Appearance;
20 import org.scilab.forge.scirenderer.shapes.appearance.Color;
21 import org.scilab.forge.scirenderer.shapes.geometry.Geometry;
22 import org.scilab.forge.scirenderer.texture.AnchorPosition;
23 import org.scilab.forge.scirenderer.texture.Texture;
24 import org.scilab.forge.scirenderer.tranformations.TransformationManager;
25 import org.scilab.forge.scirenderer.tranformations.TransformationManagerImpl;
26 import org.scilab.forge.scirenderer.tranformations.TransformationManagerListener;
27 import org.scilab.forge.scirenderer.tranformations.Vector3d;
28
29 import org.scilab.forge.scirenderer.implementation.g2d.G2DCanvas;
30 import org.scilab.forge.scirenderer.implementation.g2d.clipping.G2DClippingManager;
31 import org.scilab.forge.scirenderer.implementation.g2d.motor.Motor3D;
32 import org.scilab.forge.scirenderer.implementation.g2d.lighting.G2DLightManager;
33
34 /**
35  *
36  * JoGl implementation of the DrawingTools.
37  *
38  * @author Calixte DENIZET
39  */
40 public class G2DDrawingTools implements DrawingTools {
41
42     private final TransformationManager transformationManager;
43     private final G2DLightManager lightManager;
44     private final G2DClippingManager clippingManager;
45     private final G2DCanvas g2dCanvas;
46
47     /**
48      * Default constructor.
49      * @param canvas the canvas where this drawing tools live.
50      */
51     G2DDrawingTools(G2DCanvas canvas) {
52         this.transformationManager = new TransformationManagerImpl(canvas);
53         this.lightManager = new G2DLightManager(this);
54         this.clippingManager = new G2DClippingManager(this);
55         this.g2dCanvas = canvas;
56
57         transformationManager.addListener(new TransformationManagerListener() {
58             @Override
59             public void transformationChanged(TransformationManager transformationManager) {
60                 if (transformationManager.isUsingSceneCoordinate()) {
61                     g2dCanvas.getMotor3D().setTransformation(transformationManager.getG2DProjection(), transformationManager.getG2DSingleProjection());
62                 } else {
63                     g2dCanvas.getMotor3D().setTransformation(transformationManager.getG2DWindowProjection(), transformationManager.getG2DSingleProjection());
64                 }
65             }
66         });
67     }
68
69     public Motor3D getMotor3D() {
70         return g2dCanvas.getMotor3D();
71     }
72
73     @Override
74     public G2DCanvas getCanvas() {
75         return g2dCanvas;
76     }
77
78     @Override
79     public TransformationManager getTransformationManager() {
80         return transformationManager;
81     }
82
83     @Override
84     public LightManager getLightManager() {
85         return lightManager;
86     }
87
88     @Override
89     public G2DClippingManager getClippingManager() {
90         return clippingManager;
91     }
92
93     @Override
94     public void clear(Color color) {
95         g2dCanvas.getMotor3D().reset(color);
96     }
97
98     @Override
99     public void clear(java.awt.Color color) {
100         g2dCanvas.getMotor3D().reset(color);
101     }
102
103     @Override
104     public void clearDepthBuffer() {
105         g2dCanvas.getMotor3D().clearDepth();
106     }
107
108     @Override
109     public void draw(Renderer renderer) {
110         g2dCanvas.getRendererManager().draw(this, renderer);
111     }
112
113     @Override
114     public void draw(Geometry geometry) throws SciRendererException {
115         g2dCanvas.getMotor3D().draw(this, geometry, Appearance.getDefault());
116     }
117
118     @Override
119     public void draw(Geometry geometry, Appearance appearance) throws SciRendererException {
120         g2dCanvas.getMotor3D().draw(this, geometry, appearance);
121     }
122
123     @Override
124     public void draw(Texture texture) throws SciRendererException {
125         g2dCanvas.getTextureManager().draw(this, texture);
126     }
127
128     @Override
129     public void draw(Texture texture, AnchorPosition anchor, ElementsBuffer positions) {
130         g2dCanvas.getMotor3D().draw(this, texture, anchor, positions, 0, 1, 0, null);
131     }
132
133     @Override
134     public void draw(Texture texture, AnchorPosition anchor, ElementsBuffer positions, double rotationAngle) {
135         g2dCanvas.getMotor3D().draw(this, texture, anchor, positions, 0, 1, rotationAngle, null);
136     }
137
138     @Override
139     public void draw(Texture texture, AnchorPosition anchor, ElementsBuffer positions, ElementsBuffer colors) {
140         g2dCanvas.getMotor3D().draw(this, texture, anchor, positions, 0, 1, 0, colors);
141     }
142
143     @Override
144     public void draw(Texture texture, AnchorPosition anchor, ElementsBuffer positions, double rotationAngle, ElementsBuffer colors) {
145         g2dCanvas.getMotor3D().draw(this, texture, anchor, positions, 0, 1, rotationAngle, colors);
146     }
147
148     @Override
149     public void draw(Texture texture, AnchorPosition anchor, ElementsBuffer positions, int offset, int stride, double rotationAngle) {
150         g2dCanvas.getMotor3D().draw(this, texture, anchor, positions, offset, stride, rotationAngle, null);
151     }
152
153     @Override
154     public void draw(Texture texture, AnchorPosition anchor, ElementsBuffer positions, int offset, int stride, double rotationAngle, ElementsBuffer colors) {
155         g2dCanvas.getMotor3D().draw(this, texture, anchor, positions, offset, stride, rotationAngle, colors);
156     }
157
158     @Override
159     public void draw(Texture texture, AnchorPosition anchor, Vector3d position) {
160         g2dCanvas.getMotor3D().draw(this, texture, anchor, position, 0);
161     }
162
163     @Override
164     public void draw(Texture texture, AnchorPosition anchor, Vector3d position, double rotationAngle) {
165         g2dCanvas.getMotor3D().draw(this, texture, anchor, position, rotationAngle);
166     }
167 }