package org.simantics.plant3d.scenegraph; import java.util.Collection; import java.util.Map; import java.util.Set; import org.simantics.g3d.scenegraph.GeometryProvider; import org.simantics.g3d.scenegraph.NodeHighlighter; import org.simantics.g3d.vtk.common.VtkView; import org.simantics.g3d.vtk.utils.vtkUtil; import org.simantics.objmap.graph.annotations.RelatedGetObj; import org.simantics.objmap.graph.annotations.RelatedSetObj; import org.simantics.plant3d.ontology.Plant3D; import vtk.vtkProp3D; import vtk.vtkRenderer; public abstract class GeometryNode extends P3DNode implements ParameterizedNode, NodeHighlighter { private GeometryComponent component; public GeometryNode() { component = new GeometryComponent() { @Override protected double[] getColor() { return GeometryNode.this.getColor(); } @Override protected double[] getSelectedColor() { return GeometryNode.this.getSelectedColor(); } }; } @Override public void visualize(VtkView panel) { updateParameters(); component.visualize(panel); update(panel.getRenderer()); } public void updateParameters() { component.updateParameters(); } public Map getParameterMap() { return component.getParameterMap(); } public Map getCalculatedParameters() { return component.getCalculatedParameters(); } public Map getTotalParameters() { return component.getTotalParameters(); } public void setParametersUpdated(boolean parametersUpdated) { component.setParametersUpdated(parametersUpdated); } public void setParameterMap(Map parameters) { Set ids = component.setParameterMap(parameters); for (String id : ids) { firePropertyChanged(id); } } @RelatedGetObj(Plant3D.URIs.hasGeometry) public GeometryProvider getGeometry() { return component.getGeometry(); } @RelatedSetObj(Plant3D.URIs.hasGeometry) public void setGeometry(final GeometryProvider provider) { if (provider != null && provider.equals(component.getGeometry())) return; component.setGeometry(provider); firePropertyChanged(Plant3D.URIs.hasGeometry); } @Override public Collection getActors() { return component.getActors(); } @Override public void stopVisualize() { component.stopVisualize(); } @Override public void highlight(HighlightEventType type) { component.highlight(type); } protected double[] getSelectedColor() { return new double[]{1,0,0}; } protected double[] getColor() { return new double[]{1,1,0}; } public void update(vtkRenderer ren) { vtkUtil.updateTransform(getActors(), getWorldPosition(), getWorldOrientation()); } }