1
package opencog.spacetime.tutorial.tool;
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;
30
public class DragEventTool02 {
32
public static void main(String[] args) {
33
SceneGraphComponent cmp = new SceneGraphComponent();
34
cmp.setGeometry(Primitives.icosahedron());
36
cmp.setGeometry(Primitives.icosahedron());
37
Appearance ap = new Appearance();
38
cmp.setAppearance(ap);
41
DragEventTool t = new DragEventTool();
43
t.addPointDragListener(new PointDragListener() {
45
public void pointDragStart(PointDragEvent e) {
46
System.out.println("start dragging vertex "+e.getIndex());
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));
57
public void pointDragEnd(PointDragEvent e) {
60
t.addLineDragListener(new LineDragListener() {
62
private IndexedLineSet lineSet;
63
private double[][] points;
65
public void lineDragStart(LineDragEvent e) {
66
System.out.println("start dragging line "+e.getIndex());
68
lineSet = e.getIndexedLineSet();
69
points=new double[lineSet.getNumPoints()][];
70
lineSet.getVertexAttributes(Attribute.COORDINATES).toDoubleArrayArray(points);
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]]);
81
lineSet.setVertexAttributes(Attribute.COORDINATES,StorageModel.DOUBLE_ARRAY.array(3).createReadOnly(newPoints));
84
public void lineDragEnd(LineDragEvent e) {
87
t.addFaceDragListener(new FaceDragListener() {
89
private IndexedFaceSet faceSet;
90
private double[][] points;
92
public void faceDragStart(FaceDragEvent e) {
93
faceSet = e.getIndexedFaceSet();
94
points=new double[faceSet.getNumPoints()][];
95
points = faceSet.getVertexAttributes(Attribute.COORDINATES).toDoubleArrayArray(null);
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]]);
106
faceSet.setVertexAttributes(Attribute.COORDINATES,StorageModel.DOUBLE_ARRAY.array(3).createReadOnly(newPoints));
109
public void faceDragEnd(FaceDragEvent e) {
115
JRViewer.display(cmp);
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);