1 package org.simantics.plant3d.scenegraph;
3 import java.util.Collection;
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;
16 import vtk.vtkRenderer;
18 public abstract class GeometryNode extends P3DNode implements ParameterizedNode, NodeHighlighter {
20 private GeometryComponent component;
22 public GeometryNode() {
23 component = new GeometryComponent() {
25 protected double[] getColor() {
26 return GeometryNode.this.getColor();
30 protected double[] getSelectedColor() {
31 return GeometryNode.this.getSelectedColor();
37 public void visualize(VtkView panel) {
39 component.visualize(panel);
40 update(panel.getRenderer());
43 public void updateParameters() {
44 component.updateParameters();
48 public Map<String, Object> getParameterMap() {
49 return component.getParameterMap();
52 public Map<String, Object> getCalculatedParameters() {
53 return component.getCalculatedParameters();
56 public void setParametersUpdated(boolean parametersUpdated) {
57 component.setParametersUpdated(parametersUpdated);
60 public void setParameterMap(Map<String, Object> parameters) {
61 Set<String> ids = component.setParameterMap(parameters);
62 for (String id : ids) {
63 firePropertyChanged(id);
67 @RelatedGetObj(Plant3D.URIs.hasGeometry)
68 public GeometryProvider getGeometry() {
69 return component.getGeometry();
72 @RelatedSetObj(Plant3D.URIs.hasGeometry)
73 public void setGeometry(final GeometryProvider provider) {
74 if (provider != null && provider.equals(component.getGeometry()))
76 component.setGeometry(provider);
77 firePropertyChanged(Plant3D.URIs.hasGeometry);
81 public Collection<vtkProp3D> getActors() {
82 return component.getActors();
86 public void stopVisualize() {
87 component.stopVisualize();
91 public void highlight(HighlightEventType type) {
92 component.highlight(type);
96 protected double[] getSelectedColor() {
97 return new double[]{1,0,0};
100 protected double[] getColor() {
101 return new double[]{1,1,0};
104 public void update(vtkRenderer ren) {
105 vtkUtil.updateTransform(getActors(), getWorldPosition(), getWorldOrientation());