-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.scenegraph.example;\r
-\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.geom.AffineTransform;\r
-import java.awt.geom.Rectangle2D;\r
-import java.io.BufferedReader;\r
-import java.io.IOException;\r
-import java.io.InputStreamReader;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import javax.swing.BorderFactory;\r
-import javax.swing.JSlider;\r
-import org.simantics.scenegraph.g2d.G2DSceneGraph;\r
-import org.simantics.scenegraph.g2d.nodes.AnimatedSVGNode;\r
-import org.simantics.scenegraph.g2d.nodes.GridNode;\r
-import org.simantics.scenegraph.g2d.nodes.NavigationNode;\r
-import org.simantics.scenegraph.g2d.nodes.RulerNode;\r
-import org.simantics.scenegraph.g2d.nodes.ShapeNode;\r
-import org.simantics.scenegraph.g2d.nodes.TransformNode;\r
-import org.simantics.scenegraph.g2d.nodes.Trend2DNode;\r
-import org.simantics.scenegraph.swing.ButtonNode;\r
-import org.simantics.scenegraph.swing.LabelNode;\r
-import org.simantics.scenegraph.swing.MonitorNode;\r
-import org.simantics.scenegraph.swing.SliderNode;\r
-\r
-public class SampleThread implements Runnable {\r
-\r
- public G2DSceneGraph sg = new G2DSceneGraph();\r
- protected TransformNode transform = null;\r
- protected TransformNode transform2 = null;\r
- \r
- protected boolean interrupted = false;\r
- \r
- public void start() {\r
- interrupted = false;\r
- Thread t = new Thread(this);\r
- t.start();\r
- }\r
- \r
- public void stop() {\r
- interrupted = true;\r
- }\r
- \r
- protected void close() {\r
- }\r
-\r
- protected boolean init() {\r
- return true;\r
- }\r
- \r
- protected boolean rotate = true;\r
- protected float t1 = 0;\r
- protected float t2 = 0;\r
- \r
- private String loadSVG(String filename) throws IOException {\r
- String data = "";\r
- BufferedReader reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(filename)));\r
-\r
- while(reader.ready()) {\r
- data += reader.readLine();\r
- }\r
-\r
- reader.close();\r
- return data;\r
- }\r
- \r
- public void run() {\r
- if(!init()) return;\r
-\r
- final NavigationNode nav = sg.addNode(NavigationNode.class);\r
- GridNode grid = nav.addNode(GridNode.class);\r
- grid.setZIndex(1);\r
- \r
-// AnimatedSVGNode bmw = null;\r
- AnimatedSVGNode svg1 = null;\r
- AnimatedSVGNode svg2 = null;\r
- AnimatedSVGNode svg3 = null;\r
- AnimatedSVGNode svg4 = null;\r
- try {\r
- String data = loadSVG("tynnyri.svg");\r
- svg1 = nav.addNode(AnimatedSVGNode.class);\r
- svg1.setZIndex(20);\r
- svg1.setData(data);\r
- svg1.setTransform(AffineTransform.getTranslateInstance(0, 150));\r
- svg1.useMipMap(false);\r
- \r
- svg2 = nav.addNode(AnimatedSVGNode.class);\r
- svg2.setZIndex(20);\r
- svg2.setData(data);\r
- svg2.setTransform(AffineTransform.getTranslateInstance(250, 150));\r
- svg2.useMipMap(false);\r
- \r
- svg3 = nav.addNode(AnimatedSVGNode.class);\r
- svg3.setZIndex(20);\r
- svg3.setData(data);\r
- svg3.setTransform(AffineTransform.getTranslateInstance(500, 150));\r
- svg3.useMipMap(false);\r
- \r
- svg4 = nav.addNode(AnimatedSVGNode.class);\r
- svg4.setZIndex(20);\r
- svg4.setData(data);\r
- svg4.setTransform(AffineTransform.getTranslateInstance(750, 150));\r
- svg4.useMipMap(false);\r
- } catch(IOException e) {\r
- e.printStackTrace();\r
- }\r
-\r
-// try {\r
-// bmw = nav.addNode(AnimatedSVGNode.class);\r
-// bmw.setZIndex(50);\r
-// bmw.setData(loadSVG("D:\\bemari.svg"));\r
-// bmw.setPosition(100, 100);\r
-//// bmw.setTargetSize(50, 50);\r
-// bmw.useMipMap(false);\r
-// \r
-// String init = "if(rotate === undefined || y === undefined || x === undefined) { var rotate = 0; var y = 0; var x = 0; }";\r
-// String left = "rotate = (rotate - 10)%360;";\r
-// String right = "rotate = (rotate + 10)%360;";\r
-// String up = "x -= (Math.cos(rotate*3.14/180))*20; y -= (Math.sin(rotate*3.14/180))*20; ";\r
-// String down = "x += (Math.cos(rotate*3.14/180))*20; y += (Math.sin(rotate*3.14/180))*20; ";\r
-// \r
-// String base = \r
-// "t.setValue(\"rotate\", rotate); "+\r
-// "t.setValue(\"x\", x); "+\r
-// "t.setValue(\"y\", y); "+\r
-// "var m = new Array(6); "+\r
-// "m[0] = Math.cos(rotate*3.14/180); "+\r
-// "m[2] = -Math.sin(rotate*3.14/180); "+\r
-// "m[4] = x; "+\r
-// \r
-// "m[1] = Math.sin(rotate*3.14/180); "+\r
-// "m[3] = Math.cos(rotate*3.14/180); "+\r
-// "m[5] = y; "+\r
-// "if(svg.getRoot().hasAttribute(\"transform\", 1)) {"+\r
-// " svg.getRoot().setAttribute(\"transform\", 1, \"matrix(\"+m.join(\",\")+\")\");"+\r
-// "} else {"+\r
-// " svg.getRoot().addAttribute(\"transform\", 1, \"matrix(\"+m.join(\",\")+\")\");"+\r
-// "}";\r
-// bmw.registerEventAnimation("LEFT", init+left+base);\r
-// bmw.registerEventAnimation("RIGHT", init+right+base);\r
-// bmw.registerEventAnimation("UP", init+up+base);\r
-// bmw.registerEventAnimation("DOWN", init+down+base);\r
-// } catch(IOException e) {\r
-// e.printStackTrace();\r
-// }\r
-// \r
- transform = nav.addNode(TransformNode.class);\r
- transform.setZIndex(3);\r
- AffineTransform at = new AffineTransform();\r
- at.translate(200, 200);\r
- transform.setTransform(at);\r
- ShapeNode box = transform.addNode(ShapeNode.class);\r
- box.setZIndex(1);\r
- box.setShape(new Rectangle2D.Double(-50, -50, 100, 100));\r
-\r
- MonitorNode cn = nav.addNode(MonitorNode.class);\r
- cn.setZIndex(2);\r
- cn.setTransform(AffineTransform.getTranslateInstance(100, 50));\r
- cn.setBounds(new Rectangle2D.Double(0, 0, 100, 25));\r
-\r
- final ButtonNode button = nav.addNode(ButtonNode.class);\r
- button.setZIndex(3);\r
- button.addActionListener(new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent e) {\r
- if(rotate) {\r
- button.setText("Start rotation");\r
- rotate = false;\r
- } else {\r
- button.setText("Stop rotation");\r
- rotate = true;\r
- }\r
- }});\r
- button.setText("Stop rotation");\r
- button.setBounds(new Rectangle2D.Double(0, 0, 100, 20));\r
- button.setTransform(AffineTransform.getTranslateInstance(100, 75));\r
-\r
- SliderNode sn1 = nav.addNode(SliderNode.class);\r
- sn1.setZIndex(4);\r
- sn1.setTransform(AffineTransform.getTranslateInstance(100, 100));\r
- sn1.setBounds(new Rectangle2D.Double(0, 0, 150, 50));\r
- \r
- sn1.setTitle("Rotation speed 1");\r
- sn1.setMaximum(100);\r
- sn1.setValue(20);\r
- sn1.setMajorTickSpacing(20);\r
- sn1.setMinorTickSpacing(5);\r
- sn1.setPaintTicks(true);\r
-\r
- \r
- JSlider slider2 = new JSlider();\r
- slider2.setBorder(BorderFactory.createTitledBorder("Rotation speed 2"));\r
- slider2.setMaximum(100);\r
- slider2.setValue(50);\r
- slider2.setMajorTickSpacing(20);\r
- slider2.setMinorTickSpacing(5);\r
- slider2.setPaintTicks(true);\r
- SliderNode sn2 = nav.addNode(SliderNode.class);\r
- sn2.setZIndex(5);\r
-// sn2.setComponent(slider2);\r
- sn2.setTransform(AffineTransform.getTranslateInstance(250, 100));\r
- sn2.setBounds(new Rectangle2D.Double(0, 0, 150, 50));\r
- \r
- LabelNode cn2 = nav.addNode(LabelNode.class);\r
- cn2.setZIndex(6);\r
- cn2.setText("Name");\r
- cn2.setBounds(new Rectangle2D.Double(0, 0, 100, 25));\r
- cn2.setTransform(AffineTransform.getTranslateInstance(100, 30));\r
-\r
- MonitorNode cn3 = nav.addNode(MonitorNode.class);\r
- cn3.setZIndex(7);\r
- cn3.setTransform(AffineTransform.getTranslateInstance(250, 50));\r
- cn3.setBounds(new Rectangle2D.Double(0, 0, 100, 25));\r
- \r
- LabelNode cn4 = nav.addNode(LabelNode.class);\r
- cn4.setZIndex(8);\r
- cn4.setText("Phone number");\r
- cn4.setTransform(AffineTransform.getTranslateInstance(250, 30));\r
- cn4.setBounds(new Rectangle2D.Double(0, 0, 100, 25));\r
- \r
- transform2 = transform.addNode(TransformNode.class);\r
- transform2.setZIndex(9);\r
- \r
- ShapeNode box2 = transform2.addNode(ShapeNode.class);\r
- box2.setShape(new Rectangle2D.Double(-30, -30, 60, 60));\r
-\r
- Trend2DNode trend = nav.addNode(Trend2DNode.class);\r
- trend.setZIndex(10);\r
- trend.setBounds(new Rectangle2D.Double(0, 0, 200, 200));\r
- trend.setPosition(400, 200);\r
- List<Trend2DNode.TrendPoint> points = new ArrayList<Trend2DNode.TrendPoint>();\r
- int p = 0;\r
- for(p = 0; p < 20;) {\r
- points.add(new Trend2DNode.TrendPoint(p++, Math.random()));\r
- }\r
- trend.updatePoints(points);\r
- \r
- RulerNode ruler = nav.addNode(RulerNode.class);\r
- ruler.setZIndex(11);\r
-\r
-// String script =\r
-// "if(level === undefined) {\n"+\r
-// " var level = (time/10)%200;\n"+\r
-// " if(level > 100) level = 200 - level;\n"+\r
-// "}\n"+\r
-// "var y = 620;\n"+\r
-// "var height = 285*level/100;\n"+\r
-// "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+\r
-// "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+\r
-// "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";\r
-\r
- String script1 =\r
- "var y = 620;\n"+\r
- "var height = 285*level/100;\n"+\r
- "var r = (2*level).toString(16); var b = (2*(100-level)).toString(16);\n"+\r
- "var color = \"#\"+(r.length == 1 ? \"0\"+r : r)+\"00\"+(b.length == 1 ? \"0\"+b : b);\n"+\r
- "svg.getElement(\"fill\").setAttribute(\"fill\", 0, color)\n"+\r
- "svg.getElement(\"upperlevel\").setAttribute(\"fill\", 0, color)\n"+\r
- "svg.getElement(\"bottom\").setAttribute(\"fill\", 0, color)\n"+\r
- "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+\r
- "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+\r
- "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";\r
-\r
- String script2 =\r
- "var level = (time/10)%200;\n"+\r
- "if(level > 100) level = 200 - level;\n"+\r
- "var y = 620;\n"+\r
- "var height = 285*level/100;\n"+\r
- "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+\r
- "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+\r
- "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";\r
- \r
- sn1.setActionListener(new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent e) {\r
- Integer v = Integer.parseInt(e.getActionCommand());\r
- t1 = (float)v/1000;\r
- }});\r
- sn2.setActionListener(new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent e) {\r
- Integer v = Integer.parseInt(e.getActionCommand());\r
- t2 = (float)v/1000;\r
- }});\r
- \r
- svg1.setScript(script1);\r
- svg2.setScript(script1);\r
-\r
- while(!interrupted) {\r
- if(rotate) {\r
- transform.rotate(t1);\r
- transform2.rotate(t2);\r
- \r
- points.add(new Trend2DNode.TrendPoint(p++, Math.random()));\r
- trend.updatePoints(points);\r
- }\r
- svg1.setValue("level", new Double(t1*1000));\r
- svg2.setValue("level", new Double(t2*1000));\r
- \r
- svg3.animate(script2);\r
- svg4.animate(script2);\r
-\r
- repaint();\r
- try {\r
- Thread.sleep(1000);\r
- } catch (InterruptedException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- }\r
- }\r
- \r
- close();\r
- }\r
- \r
- public void repaint() {\r
- \r
- }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.scenegraph.example;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.JSlider;
+import org.simantics.scenegraph.g2d.G2DSceneGraph;
+import org.simantics.scenegraph.g2d.nodes.AnimatedSVGNode;
+import org.simantics.scenegraph.g2d.nodes.GridNode;
+import org.simantics.scenegraph.g2d.nodes.NavigationNode;
+import org.simantics.scenegraph.g2d.nodes.RulerNode;
+import org.simantics.scenegraph.g2d.nodes.ShapeNode;
+import org.simantics.scenegraph.g2d.nodes.TransformNode;
+import org.simantics.scenegraph.g2d.nodes.Trend2DNode;
+import org.simantics.scenegraph.swing.ButtonNode;
+import org.simantics.scenegraph.swing.LabelNode;
+import org.simantics.scenegraph.swing.MonitorNode;
+import org.simantics.scenegraph.swing.SliderNode;
+
+public class SampleThread implements Runnable {
+
+ public G2DSceneGraph sg = new G2DSceneGraph();
+ protected TransformNode transform = null;
+ protected TransformNode transform2 = null;
+
+ protected boolean interrupted = false;
+
+ public void start() {
+ interrupted = false;
+ Thread t = new Thread(this);
+ t.start();
+ }
+
+ public void stop() {
+ interrupted = true;
+ }
+
+ protected void close() {
+ }
+
+ protected boolean init() {
+ return true;
+ }
+
+ protected boolean rotate = true;
+ protected float t1 = 0;
+ protected float t2 = 0;
+
+ private String loadSVG(String filename) throws IOException {
+ String data = "";
+ BufferedReader reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(filename)));
+
+ while(reader.ready()) {
+ data += reader.readLine();
+ }
+
+ reader.close();
+ return data;
+ }
+
+ public void run() {
+ if(!init()) return;
+
+ final NavigationNode nav = sg.addNode(NavigationNode.class);
+ GridNode grid = nav.addNode(GridNode.class);
+ grid.setZIndex(1);
+
+// AnimatedSVGNode bmw = null;
+ AnimatedSVGNode svg1 = null;
+ AnimatedSVGNode svg2 = null;
+ AnimatedSVGNode svg3 = null;
+ AnimatedSVGNode svg4 = null;
+ try {
+ String data = loadSVG("tynnyri.svg");
+ svg1 = nav.addNode(AnimatedSVGNode.class);
+ svg1.setZIndex(20);
+ svg1.setData(data);
+ svg1.setTransform(AffineTransform.getTranslateInstance(0, 150));
+ svg1.useMipMap(false);
+
+ svg2 = nav.addNode(AnimatedSVGNode.class);
+ svg2.setZIndex(20);
+ svg2.setData(data);
+ svg2.setTransform(AffineTransform.getTranslateInstance(250, 150));
+ svg2.useMipMap(false);
+
+ svg3 = nav.addNode(AnimatedSVGNode.class);
+ svg3.setZIndex(20);
+ svg3.setData(data);
+ svg3.setTransform(AffineTransform.getTranslateInstance(500, 150));
+ svg3.useMipMap(false);
+
+ svg4 = nav.addNode(AnimatedSVGNode.class);
+ svg4.setZIndex(20);
+ svg4.setData(data);
+ svg4.setTransform(AffineTransform.getTranslateInstance(750, 150));
+ svg4.useMipMap(false);
+ } catch(IOException e) {
+ e.printStackTrace();
+ }
+
+// try {
+// bmw = nav.addNode(AnimatedSVGNode.class);
+// bmw.setZIndex(50);
+// bmw.setData(loadSVG("D:\\bemari.svg"));
+// bmw.setPosition(100, 100);
+//// bmw.setTargetSize(50, 50);
+// bmw.useMipMap(false);
+//
+// String init = "if(rotate === undefined || y === undefined || x === undefined) { var rotate = 0; var y = 0; var x = 0; }";
+// String left = "rotate = (rotate - 10)%360;";
+// String right = "rotate = (rotate + 10)%360;";
+// String up = "x -= (Math.cos(rotate*3.14/180))*20; y -= (Math.sin(rotate*3.14/180))*20; ";
+// String down = "x += (Math.cos(rotate*3.14/180))*20; y += (Math.sin(rotate*3.14/180))*20; ";
+//
+// String base =
+// "t.setValue(\"rotate\", rotate); "+
+// "t.setValue(\"x\", x); "+
+// "t.setValue(\"y\", y); "+
+// "var m = new Array(6); "+
+// "m[0] = Math.cos(rotate*3.14/180); "+
+// "m[2] = -Math.sin(rotate*3.14/180); "+
+// "m[4] = x; "+
+//
+// "m[1] = Math.sin(rotate*3.14/180); "+
+// "m[3] = Math.cos(rotate*3.14/180); "+
+// "m[5] = y; "+
+// "if(svg.getRoot().hasAttribute(\"transform\", 1)) {"+
+// " svg.getRoot().setAttribute(\"transform\", 1, \"matrix(\"+m.join(\",\")+\")\");"+
+// "} else {"+
+// " svg.getRoot().addAttribute(\"transform\", 1, \"matrix(\"+m.join(\",\")+\")\");"+
+// "}";
+// bmw.registerEventAnimation("LEFT", init+left+base);
+// bmw.registerEventAnimation("RIGHT", init+right+base);
+// bmw.registerEventAnimation("UP", init+up+base);
+// bmw.registerEventAnimation("DOWN", init+down+base);
+// } catch(IOException e) {
+// e.printStackTrace();
+// }
+//
+ transform = nav.addNode(TransformNode.class);
+ transform.setZIndex(3);
+ AffineTransform at = new AffineTransform();
+ at.translate(200, 200);
+ transform.setTransform(at);
+ ShapeNode box = transform.addNode(ShapeNode.class);
+ box.setZIndex(1);
+ box.setShape(new Rectangle2D.Double(-50, -50, 100, 100));
+
+ MonitorNode cn = nav.addNode(MonitorNode.class);
+ cn.setZIndex(2);
+ cn.setTransform(AffineTransform.getTranslateInstance(100, 50));
+ cn.setBounds(new Rectangle2D.Double(0, 0, 100, 25));
+
+ final ButtonNode button = nav.addNode(ButtonNode.class);
+ button.setZIndex(3);
+ button.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(rotate) {
+ button.setText("Start rotation");
+ rotate = false;
+ } else {
+ button.setText("Stop rotation");
+ rotate = true;
+ }
+ }});
+ button.setText("Stop rotation");
+ button.setBounds(new Rectangle2D.Double(0, 0, 100, 20));
+ button.setTransform(AffineTransform.getTranslateInstance(100, 75));
+
+ SliderNode sn1 = nav.addNode(SliderNode.class);
+ sn1.setZIndex(4);
+ sn1.setTransform(AffineTransform.getTranslateInstance(100, 100));
+ sn1.setBounds(new Rectangle2D.Double(0, 0, 150, 50));
+
+ sn1.setTitle("Rotation speed 1");
+ sn1.setMaximum(100);
+ sn1.setValue(20);
+ sn1.setMajorTickSpacing(20);
+ sn1.setMinorTickSpacing(5);
+ sn1.setPaintTicks(true);
+
+
+ JSlider slider2 = new JSlider();
+ slider2.setBorder(BorderFactory.createTitledBorder("Rotation speed 2"));
+ slider2.setMaximum(100);
+ slider2.setValue(50);
+ slider2.setMajorTickSpacing(20);
+ slider2.setMinorTickSpacing(5);
+ slider2.setPaintTicks(true);
+ SliderNode sn2 = nav.addNode(SliderNode.class);
+ sn2.setZIndex(5);
+// sn2.setComponent(slider2);
+ sn2.setTransform(AffineTransform.getTranslateInstance(250, 100));
+ sn2.setBounds(new Rectangle2D.Double(0, 0, 150, 50));
+
+ LabelNode cn2 = nav.addNode(LabelNode.class);
+ cn2.setZIndex(6);
+ cn2.setText("Name");
+ cn2.setBounds(new Rectangle2D.Double(0, 0, 100, 25));
+ cn2.setTransform(AffineTransform.getTranslateInstance(100, 30));
+
+ MonitorNode cn3 = nav.addNode(MonitorNode.class);
+ cn3.setZIndex(7);
+ cn3.setTransform(AffineTransform.getTranslateInstance(250, 50));
+ cn3.setBounds(new Rectangle2D.Double(0, 0, 100, 25));
+
+ LabelNode cn4 = nav.addNode(LabelNode.class);
+ cn4.setZIndex(8);
+ cn4.setText("Phone number");
+ cn4.setTransform(AffineTransform.getTranslateInstance(250, 30));
+ cn4.setBounds(new Rectangle2D.Double(0, 0, 100, 25));
+
+ transform2 = transform.addNode(TransformNode.class);
+ transform2.setZIndex(9);
+
+ ShapeNode box2 = transform2.addNode(ShapeNode.class);
+ box2.setShape(new Rectangle2D.Double(-30, -30, 60, 60));
+
+ Trend2DNode trend = nav.addNode(Trend2DNode.class);
+ trend.setZIndex(10);
+ trend.setBounds(new Rectangle2D.Double(0, 0, 200, 200));
+ trend.setPosition(400, 200);
+ List<Trend2DNode.TrendPoint> points = new ArrayList<Trend2DNode.TrendPoint>();
+ int p = 0;
+ for(p = 0; p < 20;) {
+ points.add(new Trend2DNode.TrendPoint(p++, Math.random()));
+ }
+ trend.updatePoints(points);
+
+ RulerNode ruler = nav.addNode(RulerNode.class);
+ ruler.setZIndex(11);
+
+// String script =
+// "if(level === undefined) {\n"+
+// " var level = (time/10)%200;\n"+
+// " if(level > 100) level = 200 - level;\n"+
+// "}\n"+
+// "var y = 620;\n"+
+// "var height = 285*level/100;\n"+
+// "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+
+// "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+
+// "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";
+
+ String script1 =
+ "var y = 620;\n"+
+ "var height = 285*level/100;\n"+
+ "var r = (2*level).toString(16); var b = (2*(100-level)).toString(16);\n"+
+ "var color = \"#\"+(r.length == 1 ? \"0\"+r : r)+\"00\"+(b.length == 1 ? \"0\"+b : b);\n"+
+ "svg.getElement(\"fill\").setAttribute(\"fill\", 0, color)\n"+
+ "svg.getElement(\"upperlevel\").setAttribute(\"fill\", 0, color)\n"+
+ "svg.getElement(\"bottom\").setAttribute(\"fill\", 0, color)\n"+
+ "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+
+ "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+
+ "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";
+
+ String script2 =
+ "var level = (time/10)%200;\n"+
+ "if(level > 100) level = 200 - level;\n"+
+ "var y = 620;\n"+
+ "var height = 285*level/100;\n"+
+ "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+
+ "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+
+ "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";
+
+ sn1.setActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ Integer v = Integer.parseInt(e.getActionCommand());
+ t1 = (float)v/1000;
+ }});
+ sn2.setActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ Integer v = Integer.parseInt(e.getActionCommand());
+ t2 = (float)v/1000;
+ }});
+
+ svg1.setScript(script1);
+ svg2.setScript(script1);
+
+ while(!interrupted) {
+ if(rotate) {
+ transform.rotate(t1);
+ transform2.rotate(t2);
+
+ points.add(new Trend2DNode.TrendPoint(p++, Math.random()));
+ trend.updatePoints(points);
+ }
+ svg1.setValue("level", new Double(t1*1000));
+ svg2.setValue("level", new Double(t2*1000));
+
+ svg3.animate(script2);
+ svg4.animate(script2);
+
+ repaint();
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ close();
+ }
+
+ public void repaint() {
+
+ }
+
+}