]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/example/SampleThread.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scenegraph.swing / src / org / simantics / scenegraph / example / SampleThread.java
diff --git a/bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/example/SampleThread.java b/bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/example/SampleThread.java
new file mode 100644 (file)
index 0000000..16b02ef
--- /dev/null
@@ -0,0 +1,332 @@
+/*******************************************************************************\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