]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/example/SampleThread.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.scenegraph.swing / src / org / simantics / scenegraph / example / SampleThread.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.scenegraph.example;
13
14 import java.awt.event.ActionEvent;
15 import java.awt.event.ActionListener;
16 import java.awt.geom.AffineTransform;
17 import java.awt.geom.Rectangle2D;
18 import java.io.BufferedReader;
19 import java.io.IOException;
20 import java.io.InputStreamReader;
21 import java.util.ArrayList;
22 import java.util.List;
23
24 import javax.swing.BorderFactory;
25 import javax.swing.JSlider;
26 import org.simantics.scenegraph.g2d.G2DSceneGraph;
27 import org.simantics.scenegraph.g2d.nodes.AnimatedSVGNode;
28 import org.simantics.scenegraph.g2d.nodes.GridNode;
29 import org.simantics.scenegraph.g2d.nodes.NavigationNode;
30 import org.simantics.scenegraph.g2d.nodes.RulerNode;
31 import org.simantics.scenegraph.g2d.nodes.ShapeNode;
32 import org.simantics.scenegraph.g2d.nodes.TransformNode;
33 import org.simantics.scenegraph.g2d.nodes.Trend2DNode;
34 import org.simantics.scenegraph.swing.ButtonNode;
35 import org.simantics.scenegraph.swing.LabelNode;
36 import org.simantics.scenegraph.swing.MonitorNode;
37 import org.simantics.scenegraph.swing.SliderNode;
38
39 public class SampleThread implements Runnable {
40
41         public G2DSceneGraph sg = new G2DSceneGraph();
42         protected TransformNode transform = null;
43         protected TransformNode transform2 = null;
44         
45         protected boolean interrupted = false;
46         
47         public void start() {
48                 interrupted = false;
49                 Thread t = new Thread(this);
50                 t.start();
51         }
52         
53         public void stop() {
54                 interrupted = true;
55         }
56         
57         protected void close() {
58         }
59
60         protected boolean init() {
61                 return true;
62         }
63         
64         protected boolean rotate = true;
65         protected float t1 = 0;
66         protected float t2 = 0;
67         
68         private String loadSVG(String filename) throws IOException {
69                 String data = "";
70                 BufferedReader reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(filename)));
71
72                 while(reader.ready()) {
73                         data += reader.readLine();
74                 }
75
76                 reader.close();
77                 return data;
78         }
79         
80         public void run() {
81                 if(!init()) return;
82
83                 final NavigationNode nav = sg.addNode(NavigationNode.class);
84                 GridNode grid = nav.addNode(GridNode.class);
85                 grid.setZIndex(1);
86                 
87 //              AnimatedSVGNode bmw = null;
88                 AnimatedSVGNode svg1 = null;
89                 AnimatedSVGNode svg2 = null;
90                 AnimatedSVGNode svg3 = null;
91                 AnimatedSVGNode svg4 = null;
92                 try {
93                         String data = loadSVG("tynnyri.svg");
94                         svg1 = nav.addNode(AnimatedSVGNode.class);
95                         svg1.setZIndex(20);
96                         svg1.setData(data);
97                         svg1.setTransform(AffineTransform.getTranslateInstance(0, 150));
98                         svg1.useMipMap(false);
99                         
100                         svg2 = nav.addNode(AnimatedSVGNode.class);
101                         svg2.setZIndex(20);
102                         svg2.setData(data);
103                         svg2.setTransform(AffineTransform.getTranslateInstance(250, 150));
104                         svg2.useMipMap(false);
105                         
106                         svg3 = nav.addNode(AnimatedSVGNode.class);
107                         svg3.setZIndex(20);
108                         svg3.setData(data);
109                         svg3.setTransform(AffineTransform.getTranslateInstance(500, 150));
110                         svg3.useMipMap(false);
111                         
112                         svg4 = nav.addNode(AnimatedSVGNode.class);
113                         svg4.setZIndex(20);
114                         svg4.setData(data);
115                         svg4.setTransform(AffineTransform.getTranslateInstance(750, 150));
116                         svg4.useMipMap(false);
117                 } catch(IOException e) {
118                         e.printStackTrace();
119                 }
120
121 //              try {
122 //                      bmw = nav.addNode(AnimatedSVGNode.class);
123 //                      bmw.setZIndex(50);
124 //                      bmw.setData(loadSVG("D:\\bemari.svg"));
125 //                      bmw.setPosition(100, 100);
126 ////                    bmw.setTargetSize(50, 50);
127 //                      bmw.useMipMap(false);
128 //                      
129 //                      String init = "if(rotate === undefined || y === undefined || x === undefined) { var rotate = 0; var y = 0; var x = 0; }";
130 //                      String left = "rotate = (rotate - 10)%360;";
131 //                      String right = "rotate = (rotate + 10)%360;";
132 //                      String up = "x -= (Math.cos(rotate*3.14/180))*20; y -= (Math.sin(rotate*3.14/180))*20; ";
133 //                      String down = "x += (Math.cos(rotate*3.14/180))*20; y += (Math.sin(rotate*3.14/180))*20; ";
134 //                      
135 //                      String base = 
136 //                              "t.setValue(\"rotate\", rotate); "+
137 //                              "t.setValue(\"x\", x); "+
138 //                              "t.setValue(\"y\", y); "+
139 //                              "var m = new Array(6); "+
140 //                              "m[0] = Math.cos(rotate*3.14/180); "+
141 //                              "m[2] = -Math.sin(rotate*3.14/180); "+
142 //                              "m[4] = x; "+
143 //                              
144 //                              "m[1] = Math.sin(rotate*3.14/180); "+
145 //                              "m[3] = Math.cos(rotate*3.14/180); "+
146 //                              "m[5] = y; "+
147 //                              "if(svg.getRoot().hasAttribute(\"transform\", 1)) {"+
148 //                              "    svg.getRoot().setAttribute(\"transform\", 1, \"matrix(\"+m.join(\",\")+\")\");"+
149 //                              "} else {"+
150 //                              "       svg.getRoot().addAttribute(\"transform\", 1, \"matrix(\"+m.join(\",\")+\")\");"+
151 //                              "}";
152 //                      bmw.registerEventAnimation("LEFT", init+left+base);
153 //                      bmw.registerEventAnimation("RIGHT", init+right+base);
154 //                      bmw.registerEventAnimation("UP", init+up+base);
155 //                      bmw.registerEventAnimation("DOWN", init+down+base);
156 //              } catch(IOException e) {
157 //                      e.printStackTrace();
158 //              }
159 //              
160                 transform = nav.addNode(TransformNode.class);
161                 transform.setZIndex(3);
162                 AffineTransform at = new AffineTransform();
163                 at.translate(200, 200);
164                 transform.setTransform(at);
165                 ShapeNode box = transform.addNode(ShapeNode.class);
166                 box.setZIndex(1);
167                 box.setShape(new Rectangle2D.Double(-50, -50, 100, 100));
168
169                 MonitorNode cn = nav.addNode(MonitorNode.class);
170                 cn.setZIndex(2);
171                 cn.setTransform(AffineTransform.getTranslateInstance(100, 50));
172                 cn.setBounds(new Rectangle2D.Double(0, 0, 100, 25));
173
174                 final ButtonNode button = nav.addNode(ButtonNode.class);
175                 button.setZIndex(3);
176                 button.addActionListener(new ActionListener() {
177                         @Override
178                         public void actionPerformed(ActionEvent e) {
179                                 if(rotate) {
180                                         button.setText("Start rotation");
181                                         rotate = false;
182                                 } else {
183                                         button.setText("Stop rotation");
184                                         rotate = true;
185                                 }
186                         }});
187                 button.setText("Stop rotation");
188                 button.setBounds(new Rectangle2D.Double(0, 0, 100, 20));
189                 button.setTransform(AffineTransform.getTranslateInstance(100, 75));
190
191             SliderNode sn1 = nav.addNode(SliderNode.class);
192             sn1.setZIndex(4);
193                 sn1.setTransform(AffineTransform.getTranslateInstance(100, 100));
194                 sn1.setBounds(new Rectangle2D.Double(0, 0, 150, 50));
195                 
196                 sn1.setTitle("Rotation speed 1");
197                 sn1.setMaximum(100);
198                 sn1.setValue(20);
199                 sn1.setMajorTickSpacing(20);
200                 sn1.setMinorTickSpacing(5);
201                 sn1.setPaintTicks(true);
202
203                 
204             JSlider slider2 = new JSlider();
205             slider2.setBorder(BorderFactory.createTitledBorder("Rotation speed 2"));
206             slider2.setMaximum(100);
207             slider2.setValue(50);
208             slider2.setMajorTickSpacing(20);
209             slider2.setMinorTickSpacing(5);
210             slider2.setPaintTicks(true);
211             SliderNode sn2 = nav.addNode(SliderNode.class);
212             sn2.setZIndex(5);
213 //          sn2.setComponent(slider2);
214                 sn2.setTransform(AffineTransform.getTranslateInstance(250, 100));
215                 sn2.setBounds(new Rectangle2D.Double(0, 0, 150, 50));
216                 
217                 LabelNode cn2 = nav.addNode(LabelNode.class);
218                 cn2.setZIndex(6);
219                 cn2.setText("Name");
220                 cn2.setBounds(new Rectangle2D.Double(0, 0, 100, 25));
221                 cn2.setTransform(AffineTransform.getTranslateInstance(100, 30));
222
223                 MonitorNode cn3 = nav.addNode(MonitorNode.class);
224                 cn3.setZIndex(7);
225                 cn3.setTransform(AffineTransform.getTranslateInstance(250, 50));
226                 cn3.setBounds(new Rectangle2D.Double(0, 0, 100, 25));
227                 
228                 LabelNode cn4 = nav.addNode(LabelNode.class);
229                 cn4.setZIndex(8);
230                 cn4.setText("Phone number");
231                 cn4.setTransform(AffineTransform.getTranslateInstance(250, 30));
232                 cn4.setBounds(new Rectangle2D.Double(0, 0, 100, 25));
233                 
234                 transform2 = transform.addNode(TransformNode.class);
235                 transform2.setZIndex(9);
236                 
237                 ShapeNode box2 = transform2.addNode(ShapeNode.class);
238                 box2.setShape(new Rectangle2D.Double(-30, -30, 60, 60));
239
240                 Trend2DNode trend = nav.addNode(Trend2DNode.class);
241                 trend.setZIndex(10);
242                 trend.setBounds(new Rectangle2D.Double(0, 0, 200, 200));
243                 trend.setPosition(400, 200);
244                 List<Trend2DNode.TrendPoint> points = new ArrayList<Trend2DNode.TrendPoint>();
245                 int p = 0;
246                 for(p = 0; p < 20;) {
247                         points.add(new Trend2DNode.TrendPoint(p++, Math.random()));
248                 }
249                 trend.updatePoints(points);
250                 
251                 RulerNode ruler = nav.addNode(RulerNode.class);
252                 ruler.setZIndex(11);
253
254 //      String script =
255 //              "if(level === undefined) {\n"+
256 //              "       var level = (time/10)%200;\n"+
257 //                      "   if(level > 100) level = 200 - level;\n"+
258 //              "}\n"+
259 //              "var y = 620;\n"+
260 //              "var height = 285*level/100;\n"+
261 //              "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+
262 //              "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+
263 //              "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";
264
265         String script1 =
266                 "var y = 620;\n"+
267                 "var height = 285*level/100;\n"+
268                 "var r = (2*level).toString(16); var b = (2*(100-level)).toString(16);\n"+
269                 "var color = \"#\"+(r.length == 1 ? \"0\"+r : r)+\"00\"+(b.length == 1 ? \"0\"+b : b);\n"+
270                 "svg.getElement(\"fill\").setAttribute(\"fill\", 0, color)\n"+
271                 "svg.getElement(\"upperlevel\").setAttribute(\"fill\", 0, color)\n"+
272                 "svg.getElement(\"bottom\").setAttribute(\"fill\", 0, color)\n"+
273                 "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+
274                 "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+
275                 "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";
276
277         String script2 =
278                 "var level = (time/10)%200;\n"+
279                         "if(level > 100) level = 200 - level;\n"+
280                 "var y = 620;\n"+
281                 "var height = 285*level/100;\n"+
282                 "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+
283                 "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+
284                 "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";
285         
286         sn1.setActionListener(new ActionListener() {
287                         @Override
288                         public void actionPerformed(ActionEvent e) {
289                                 Integer v = Integer.parseInt(e.getActionCommand());
290                                 t1 = (float)v/1000;
291                         }});
292         sn2.setActionListener(new ActionListener() {
293                         @Override
294                         public void actionPerformed(ActionEvent e) {
295                                 Integer v = Integer.parseInt(e.getActionCommand());
296                                 t2 = (float)v/1000;
297                         }});
298         
299                 svg1.setScript(script1);
300                 svg2.setScript(script1);
301
302                 while(!interrupted) {
303                         if(rotate) {
304                                 transform.rotate(t1);
305                                 transform2.rotate(t2);
306                                 
307                                 points.add(new Trend2DNode.TrendPoint(p++, Math.random()));
308                                 trend.updatePoints(points);
309                         }
310                         svg1.setValue("level", new Double(t1*1000));
311                         svg2.setValue("level", new Double(t2*1000));
312                         
313                         svg3.animate(script2);
314                         svg4.animate(script2);
315
316                         repaint();
317                         try {
318                                 Thread.sleep(1000);
319                         } catch (InterruptedException e) {
320                                 // TODO Auto-generated catch block
321                                 e.printStackTrace();
322                         }
323                 }
324                 
325                 close();
326         }
327         
328         public void repaint() {
329                 
330         }
331
332 }