~seh999/jcog/proto3

« back to all changes in this revision

Viewing changes to spacetime/src.tutorial/opencog/spacetime/tutorial/tool/DragEventTool02.java

  • Committer: SeH
  • Date: 2009-09-19 22:59:48 UTC
  • Revision ID: seh999@gmail.com-20090919225948-q3ab80xa57i74mm6
start of major jReality refactoring

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
package opencog.spacetime.tutorial.tool;
2
 
 
3
 
import java.awt.Color;
4
 
 
5
 
import opencog.spacetime.geometry.Primitives;
6
 
import opencog.spacetime.math.Matrix;
7
 
import opencog.spacetime.math.MatrixBuilder;
8
 
import opencog.spacetime.plugin.JRViewer;
9
 
import opencog.spacetime.scene.Appearance;
10
 
import opencog.spacetime.scene.IndexedFaceSet;
11
 
import opencog.spacetime.scene.IndexedLineSet;
12
 
import opencog.spacetime.scene.PointSet;
13
 
import opencog.spacetime.scene.SceneGraphComponent;
14
 
import opencog.spacetime.scene.data.Attribute;
15
 
import opencog.spacetime.scene.data.StorageModel;
16
 
import opencog.spacetime.shader.DefaultGeometryShader;
17
 
import opencog.spacetime.shader.DefaultLineShader;
18
 
import opencog.spacetime.shader.DefaultPointShader;
19
 
import opencog.spacetime.shader.DefaultPolygonShader;
20
 
import opencog.spacetime.shader.ShaderUtility;
21
 
import opencog.spacetime.tools.DragEventTool;
22
 
import opencog.spacetime.tools.FaceDragEvent;
23
 
import opencog.spacetime.tools.FaceDragListener;
24
 
import opencog.spacetime.tools.LineDragEvent;
25
 
import opencog.spacetime.tools.LineDragListener;
26
 
import opencog.spacetime.tools.PointDragEvent;
27
 
import opencog.spacetime.tools.PointDragListener;
28
 
 
29
 
 
30
 
public class DragEventTool02 {
31
 
 
32
 
        public static void main(String[] args) {
33
 
                SceneGraphComponent cmp = new SceneGraphComponent();            
34
 
                cmp.setGeometry(Primitives.icosahedron());      
35
 
                
36
 
                cmp.setGeometry(Primitives.icosahedron());
37
 
                Appearance ap = new Appearance();
38
 
                cmp.setAppearance(ap);
39
 
                setupAppearance(ap);
40
 
                
41
 
                DragEventTool t = new DragEventTool();
42
 
                
43
 
                t.addPointDragListener(new PointDragListener() {
44
 
 
45
 
                        public void pointDragStart(PointDragEvent e) {
46
 
                                System.out.println("start dragging vertex "+e.getIndex());                              
47
 
                        }
48
 
 
49
 
                        public void pointDragged(PointDragEvent e) {
50
 
                                PointSet pointSet = e.getPointSet();
51
 
                                double[][] points=new double[pointSet.getNumPoints()][];
52
 
                        pointSet.getVertexAttributes(Attribute.COORDINATES).toDoubleArrayArray(points);
53
 
                        points[e.getIndex()]=e.getPosition();  
54
 
                        pointSet.setVertexAttributes(Attribute.COORDINATES,StorageModel.DOUBLE_ARRAY.array(3).createReadOnly(points));                  
55
 
                        }
56
 
 
57
 
                        public void pointDragEnd(PointDragEvent e) {
58
 
                        }                       
59
 
                });
60
 
                t.addLineDragListener(new LineDragListener() {
61
 
                        
62
 
                        private IndexedLineSet lineSet;
63
 
                        private double[][] points;
64
 
                        
65
 
                        public void lineDragStart(LineDragEvent e) {
66
 
                                System.out.println("start dragging line "+e.getIndex());
67
 
                                
68
 
                                lineSet = e.getIndexedLineSet();
69
 
                                points=new double[lineSet.getNumPoints()][];
70
 
                                lineSet.getVertexAttributes(Attribute.COORDINATES).toDoubleArrayArray(points);
71
 
                        }
72
 
 
73
 
                        public void lineDragged(LineDragEvent e) {
74
 
                                double[][] newPoints=(double[][])points.clone();
75
 
                                Matrix trafo=new Matrix();
76
 
                                MatrixBuilder.euclidean().translate(e.getTranslation()).assignTo(trafo);
77
 
                                int[] lineIndices=e.getLineIndices();
78
 
                                for(int i=0;i<lineIndices.length;i++){
79
 
                                        newPoints[lineIndices[i]]=trafo.multiplyVector(points[lineIndices[i]]);
80
 
                                }
81
 
                                lineSet.setVertexAttributes(Attribute.COORDINATES,StorageModel.DOUBLE_ARRAY.array(3).createReadOnly(newPoints));        
82
 
                        }
83
 
 
84
 
                        public void lineDragEnd(LineDragEvent e) {
85
 
                        }                       
86
 
                });
87
 
                t.addFaceDragListener(new FaceDragListener() {
88
 
                        
89
 
                        private IndexedFaceSet faceSet;
90
 
                        private double[][] points;
91
 
                        
92
 
                        public void faceDragStart(FaceDragEvent e) {
93
 
                                faceSet = e.getIndexedFaceSet();
94
 
                                points=new double[faceSet.getNumPoints()][];
95
 
                                points = faceSet.getVertexAttributes(Attribute.COORDINATES).toDoubleArrayArray(null);
96
 
                        }
97
 
 
98
 
                        public void faceDragged(FaceDragEvent e) {
99
 
                                double[][] newPoints=(double[][])points.clone();
100
 
                                Matrix trafo=new Matrix();
101
 
                                MatrixBuilder.euclidean().translate(e.getTranslation()).assignTo(trafo);
102
 
                                int[] faceIndices=e.getFaceIndices();
103
 
                                for(int i=0;i<faceIndices.length;i++){
104
 
                                        newPoints[faceIndices[i]]=trafo.multiplyVector(points[faceIndices[i]]);
105
 
                                }
106
 
                                faceSet.setVertexAttributes(Attribute.COORDINATES,StorageModel.DOUBLE_ARRAY.array(3).createReadOnly(newPoints));        
107
 
                        }
108
 
 
109
 
                        public void faceDragEnd(FaceDragEvent e) {
110
 
                        }                       
111
 
                });
112
 
                
113
 
                cmp.addTool(t);         
114
 
 
115
 
            JRViewer.display(cmp);
116
 
        }
117
 
        
118
 
        private static void setupAppearance(Appearance ap) {
119
 
                DefaultGeometryShader dgs;
120
 
                DefaultPolygonShader dps;
121
 
                DefaultLineShader dls;
122
 
                DefaultPointShader dpts;
123
 
                dgs = ShaderUtility.createDefaultGeometryShader(ap, true);
124
 
                dgs.setShowFaces(true);
125
 
                dgs.setShowLines(true);
126
 
                dgs.setShowPoints(true);
127
 
                dps = (DefaultPolygonShader) dgs.createPolygonShader("default");
128
 
                dps.setDiffuseColor(Color.blue);
129
 
                dls = (DefaultLineShader) dgs.createLineShader("default");
130
 
                dls.setDiffuseColor(Color.yellow);
131
 
                dls.setTubeRadius(.03);
132
 
                dpts = (DefaultPointShader) dgs.createPointShader("default");
133
 
                dpts.setDiffuseColor(Color.red);
134
 
                dpts.setPointRadius(.05);
135
 
        }
136
 
 
137
 
}