]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/GeometryNode.java
54c14a14ad9a09e3336f21e4696b7bed88936c1f
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / scenegraph / GeometryNode.java
1 package org.simantics.plant3d.scenegraph;
2
3 import java.util.Collection;
4 import java.util.Map;
5 import java.util.Set;
6
7 import org.simantics.g3d.scenegraph.GeometryProvider;
8 import org.simantics.g3d.scenegraph.NodeHighlighter;
9 import org.simantics.g3d.vtk.common.VtkView;
10 import org.simantics.g3d.vtk.utils.vtkUtil;
11 import org.simantics.objmap.graph.annotations.RelatedGetObj;
12 import org.simantics.objmap.graph.annotations.RelatedSetObj;
13 import org.simantics.plant3d.ontology.Plant3D;
14
15 import vtk.vtkProp3D;
16 import vtk.vtkRenderer;
17
18 public abstract class GeometryNode extends P3DNode implements ParameterizedNode, NodeHighlighter {
19         
20         private GeometryComponent component;
21
22         public GeometryNode() {
23                 component = new GeometryComponent() {
24                         @Override
25                         protected double[] getColor() {
26                                 return GeometryNode.this.getColor();
27                         }
28                         
29                         @Override
30                         protected double[] getSelectedColor() {
31                                 return GeometryNode.this.getSelectedColor();
32                         }
33                 };
34         }
35         
36         @Override
37         public void visualize(VtkView panel) {
38                 updateParameters();
39                 component.visualize(panel);
40         }
41         
42         public void updateParameters() {
43                 component.updateParameters();
44         }
45         
46
47         public Map<String, Object> getParameterMap() {
48                 return component.getParameterMap();
49         }
50         
51         public Map<String, Object> getCalculatedParameters() {
52                 return component.getCalculatedParameters();
53         }
54         
55         public void setParametersUpdated(boolean parametersUpdated) {
56                 component.setParametersUpdated(parametersUpdated);
57         }
58         
59         public void setParameterMap(Map<String, Object> parameters) {
60                 Set<String> ids = component.setParameterMap(parameters);
61                 for (String id : ids) {
62                         firePropertyChanged(id);
63                 }
64         }
65         
66         @RelatedGetObj(Plant3D.URIs.hasGeometry)
67         public GeometryProvider getGeometry() {
68                 return component.getGeometry();
69         }
70         
71         @RelatedSetObj(Plant3D.URIs.hasGeometry)
72         public void setGeometry(final GeometryProvider provider) {
73                 if (provider != null && provider.equals(component.getGeometry()))
74                         return;
75                 component.setGeometry(provider);
76                 firePropertyChanged(Plant3D.URIs.hasGeometry);
77         }
78
79         @Override
80         public Collection<vtkProp3D> getActors() {
81                 return component.getActors();
82         }
83         
84         @Override
85         public void stopVisualize() {
86                 component.stopVisualize();
87         }
88         
89         @Override
90         public void highlight(HighlightEventType type) {
91                 component.highlight(type);
92                 
93         }
94         
95         protected double[] getSelectedColor() {
96                 return new double[]{1,0,0};
97         }
98         
99         protected double[] getColor() {
100                 return new double[]{1,1,0};
101         }
102         
103         public void update(vtkRenderer ren) {
104                 vtkUtil.updateTransform(getActors(), getWorldPosition(), getWorldOrientation());
105         }
106
107 }