~seh999/jcog/proto3

« back to all changes in this revision

Viewing changes to spacetime/src.tutorial/opencog/spacetime/tutorial/geom/GeometryMergeExample.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.geom;
2
 
 
3
 
import java.awt.Color;
4
 
import java.util.LinkedList;
5
 
import java.util.List;
6
 
 
7
 
import opencog.spacetime.geometry.GeometryMergeFactory;
8
 
import opencog.spacetime.geometry.Primitives;
9
 
import opencog.spacetime.math.MatrixBuilder;
10
 
import opencog.spacetime.plugin.JRViewer;
11
 
import opencog.spacetime.scene.Appearance;
12
 
import opencog.spacetime.scene.IndexedFaceSet;
13
 
import opencog.spacetime.scene.SceneGraphComponent;
14
 
import opencog.spacetime.scene.data.Attribute;
15
 
import opencog.spacetime.shader.CommonAttributes;
16
 
import opencog.spacetime.util.SceneGraphUtility;
17
 
 
18
 
 
19
 
/**
20
 
 * This example shows how to use the {@link GeometryMergeFactory}, which combines all geometries in a scene graph into
21
 
 * a single {@link IndexedFaceSet}.
22
 
 * 
23
 
 * @author Bernd Gonska
24
 
 *
25
 
 */
26
 
public class GeometryMergeExample {
27
 
 
28
 
        public static void main(String[] args) {
29
 
                // a little Scene (two boxes and a bangle, transfomation, appearance)
30
 
        IndexedFaceSet box= Primitives.box(2, .5, .5, false);
31
 
        IndexedFaceSet box2= Primitives.box(2, .6, 0.4, true);
32
 
        IndexedFaceSet zyl= Primitives.cylinder(20,1,0,.5,5);
33
 
        SceneGraphComponent original= new SceneGraphComponent();
34
 
        SceneGraphComponent childNode1= new SceneGraphComponent();
35
 
        MatrixBuilder.euclidean().translate(0,0,1).assignTo(childNode1);
36
 
        SceneGraphComponent childNode2= new SceneGraphComponent();
37
 
        Appearance app= new Appearance();
38
 
        app.setAttribute(CommonAttributes.POLYGON_SHADER+"."+CommonAttributes.DIFFUSE_COLOR, new Color(255,255,0));
39
 
        childNode2.setAppearance(app);
40
 
        original.addChild(childNode1);
41
 
        original.addChild(childNode2);
42
 
        original.setGeometry(box2);
43
 
        childNode1.setGeometry(box);
44
 
        childNode2.setGeometry(zyl);
45
 
// the Factory:
46
 
        GeometryMergeFactory mergeFact= new GeometryMergeFactory();             
47
 
// play with the following 3 optional settings (by default they are true)
48
 
        mergeFact.setRespectFaces(true);
49
 
        mergeFact.setRespectEdges(true);
50
 
        mergeFact.setGenerateVertexNormals(true);                       
51
 
// you can set some defaults:
52
 
        List defaultAtts= new LinkedList();
53
 
        List defaultAttValue= new LinkedList();
54
 
        List value= new LinkedList();
55
 
        defaultAtts.add(Attribute.COLORS);
56
 
        defaultAttValue.add(value);
57
 
        value.add(new double[]{0,1,0,1});// remember: only 4d colors
58
 
        mergeFact.setDefaultFaceAttributes(defaultAtts,defaultAttValue );
59
 
// merge a list of geometrys:
60
 
        //IndexedFaceSet[] list= new IndexedFaceSet[]{box2,zyl};
61
 
        //IndexedFaceSet result=mergeFact.mergeIndexedFaceSets(list);
62
 
// or  a complete tree:
63
 
        IndexedFaceSet result=mergeFact.mergeGeometrySets(original);
64
 
        SceneGraphComponent world = SceneGraphUtility.createFullSceneGraphComponent("world");
65
 
       SceneGraphComponent merged =  SceneGraphUtility.createFullSceneGraphComponent("merged");
66
 
       merged.setGeometry(result);
67
 
       MatrixBuilder.euclidean().translate(3,0,0).assignTo(merged);
68
 
       world.addChildren(merged, original);
69
 
        JRViewer.display(world);
70
 
        }
71
 
 
72
 
}