1
package opencog.spacetime.tutorial.geom;
4
import java.util.LinkedList;
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;
20
* This example shows how to use the {@link GeometryMergeFactory}, which combines all geometries in a scene graph into
21
* a single {@link IndexedFaceSet}.
23
* @author Bernd Gonska
26
public class GeometryMergeExample {
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);
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);