samer@0
|
1 /*
|
samer@0
|
2 */
|
samer@0
|
3 package samer.j3d;
|
samer@0
|
4
|
samer@0
|
5 import samer.core.*;
|
samer@0
|
6 import samer.core.types.*;
|
samer@0
|
7 import samer.maths.*;
|
samer@0
|
8 import samer.tools.*;
|
samer@0
|
9 import java.io.*;
|
samer@0
|
10 import java.awt.event.*;
|
samer@0
|
11 import javax.media.j3d.*;
|
samer@0
|
12 import javax.vecmath.*;
|
samer@0
|
13
|
samer@0
|
14 public class J3DViewerImmediate extends Util implements Task
|
samer@0
|
15 {
|
samer@0
|
16 Root root=new Root();
|
samer@0
|
17 Background bg;
|
samer@0
|
18 Geometry geom;
|
samer@0
|
19 Appearance app;
|
samer@0
|
20 Viewer V;
|
samer@0
|
21
|
samer@0
|
22 TaskList tasks;
|
samer@0
|
23 VDouble speed, scale;
|
samer@0
|
24 GraphicsContext3D gc;
|
samer@0
|
25 Transform3D mt=new Transform3D();
|
samer@0
|
26 Canvas3D canvas;
|
samer@0
|
27 float angle=0;
|
samer@0
|
28
|
samer@0
|
29 public J3DViewerImmediate(Matrix P, VVector A) throws Exception
|
samer@0
|
30 {
|
samer@0
|
31 if (P==null) {
|
samer@0
|
32 Shell.print("creating PointsMatrix");
|
samer@0
|
33 P=new Matrix("PointsMatrix",A.size(),3);
|
samer@0
|
34 new MatrixAgent(P).execute("load",Shell.env());
|
samer@0
|
35 }
|
samer@0
|
36 // create scene
|
samer@0
|
37 bg=new Background(new Color3f(0.26f,0.23f,0.35f));
|
samer@0
|
38 // geom=new MatrixPointArrayAlpha(P,A);
|
samer@0
|
39 // app=transparent(0,points(new Appearance()));
|
samer@0
|
40 geom= // new MatrixPointArray(P,A);
|
samer@0
|
41 new MatrixPoints4D(P,A);
|
samer@0
|
42 app=transparent(0,points());
|
samer@0
|
43 V=new Viewer("particles");
|
samer@0
|
44 // remember to stop canvas renderers
|
samer@0
|
45
|
samer@0
|
46
|
samer@0
|
47 root.addChild(V);
|
samer@0
|
48 root.compile();
|
samer@0
|
49 root.golive();
|
samer@0
|
50
|
samer@0
|
51 // Shell.registerAgent(this);
|
samer@0
|
52 // Shell.exposeCommands(this);
|
samer@0
|
53
|
samer@0
|
54
|
samer@0
|
55 Shell.push(V.node);
|
samer@0
|
56 speed=new VDouble("speed",0.1);
|
samer@0
|
57 scale=new VDouble("scale",1);
|
samer@0
|
58 Shell.pop();
|
samer@0
|
59
|
samer@0
|
60 canvas=V.V.canvas;
|
samer@0
|
61 canvas.stopRenderer();
|
samer@0
|
62
|
samer@0
|
63 tasks=(TaskList)Shell.get("taskList");
|
samer@0
|
64 tasks.addTask(this);
|
samer@0
|
65 }
|
samer@0
|
66
|
samer@0
|
67 public void stopping() { Shell.print("view stopping"); }
|
samer@0
|
68 public void starting() {
|
samer@0
|
69 Shell.print("view starting");
|
samer@0
|
70 if (gc==null) gc = canvas.getGraphicsContext3D();
|
samer@0
|
71 gc.setAppearance(app);
|
samer@0
|
72 // gc.setBackground(bg);
|
samer@0
|
73 }
|
samer@0
|
74
|
samer@0
|
75 public void run() {
|
samer@0
|
76 mt.rotY(angle+=speed.value);
|
samer@0
|
77 mt.setScale(scale.value);
|
samer@0
|
78 gc.clear();
|
samer@0
|
79 gc.setModelTransform(mt);
|
samer@0
|
80 gc.draw(geom);
|
samer@0
|
81 canvas.swap();
|
samer@0
|
82 }
|
samer@0
|
83
|
samer@0
|
84 public void dispose()
|
samer@0
|
85 {
|
samer@0
|
86 // Shell.deregisterAgent(this);
|
samer@0
|
87 tasks.removeTask(this);
|
samer@0
|
88 V.dispose();
|
samer@0
|
89 }
|
samer@0
|
90 } |