X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fscenegraph%2FNozzle.java;fp=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fscenegraph%2FNozzle.java;h=9c4ad6f6ce280d46df3ce31d0b1c383f31e39841;hb=a460e609147d064dd3da464bcf1626845e0f93b4;hp=0000000000000000000000000000000000000000;hpb=3e2205a22ddee674f7936da114f5d520bd83e0ff;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/Nozzle.java b/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/Nozzle.java new file mode 100644 index 00000000..9c4ad6f6 --- /dev/null +++ b/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/Nozzle.java @@ -0,0 +1,153 @@ +package org.simantics.plant3d.scenegraph; + +import java.util.HashMap; +import java.util.Map; + +import javax.vecmath.Quat4d; +import javax.vecmath.Vector3d; + +import org.simantics.g3d.property.annotations.GetPropertyValue; +import org.simantics.objmap.graph.annotations.DynamicGraphType; +import org.simantics.objmap.graph.annotations.GetType; +import org.simantics.objmap.graph.annotations.RelatedGetObj; +import org.simantics.objmap.graph.annotations.RelatedGetValue; +import org.simantics.objmap.graph.annotations.RelatedSetObj; +import org.simantics.objmap.graph.annotations.RelatedSetValue; +import org.simantics.objmap.graph.annotations.SetType; +import org.simantics.plant3d.ontology.Plant3D; +import org.simantics.plant3d.scenegraph.controlpoint.ControlPointFactory; +import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint; + + +@DynamicGraphType(Plant3D.URIs.Nozzle) +public class Nozzle extends PipelineComponent { + + private String type; + private PipeControlPoint controlPoint; + + @GetType(Plant3D.URIs.Nozzle) + public String getType() { + return type; + } + + @SetType(Plant3D.URIs.Nozzle) + public void setType(String type) throws Exception{ + this.type = type; + _createCP(); + + } + + private int id = 0; + + @RelatedGetValue(Plant3D.URIs.HasNozzleId) + @GetPropertyValue(name="Nozzle ID", value=Plant3D.URIs.HasNozzleId, tabId="Default") + public int getNozzleId() { + return id; + } + + @RelatedSetValue(Plant3D.URIs.HasNozzleId) + public void setNozzleId(int id) { + if (id == this.id) + return; + this.id = id; + firePropertyChanged(Plant3D.URIs.HasNozzleId); + } + + private void _createCP() throws Exception{ + if (controlPoint != null) + return; + if (getPipeRun() != null) { + controlPoint = ControlPointFactory.create(this); + // TODO : these should not be needed. + controlPoint.setDeletable(false); + controlPoint.setFixed(true); + } + } + + @RelatedSetObj(Plant3D.URIs.HasPipeRun) + @Override + public void setPipeRun(PipeRun pipeRun) { + super.setPipeRun(pipeRun); + try { + _createCP(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + firePropertyChanged(Plant3D.URIs.HasPipeRun); + } + + @RelatedGetObj(Plant3D.URIs.HasPipeRun) + @Override + public PipeRun getPipeRun() { + return super.getPipeRun(); + } + + @Override + public PipeControlPoint getControlPoint() { + return controlPoint; + } + + + @Override + public void setPosition(Vector3d position) { + super.setPosition(position); + updateCP(); + } + + @Override + public void setOrientation(Quat4d orientation) { + super.setOrientation(orientation); + updateCP(); + } + + private void updateCP() { + if (controlPoint == null) + return; + if (controlPoint.getPipeRun() == null) + return; + controlPoint._setWorldPosition(getWorldPosition()); + controlPoint._setWorldOrientation(getWorldOrientation()); + } + + + @Override + public Map updateParameterMap() { + Map map = new HashMap(); + + PipeRun pipeRun = getPipeRun(); + if (pipeRun != null) { + map.put("length", pipeRun.getPipeDiameter() * 2.0); + map.put("radius", pipeRun.getPipeDiameter() * 0.5); + } + return map; + } + + @Override + protected double[] getColor() { + return new double[]{0.7,0.7,0.7}; + } + + @Override + protected double[] getSelectedColor() { + return new double[]{0.5,0,0.5}; + } + + public boolean isConnected() { + PipeControlPoint pcp = getControlPoint(); + return (pcp.getNext() != null || pcp.getPrevious() != null); + } + + public boolean isNextConnected() { + PipeControlPoint pcp = getControlPoint(); + return (pcp.getNext() != null); + } + + public boolean isPrevConnected() { + PipeControlPoint pcp = getControlPoint(); + return (pcp.getNext() != null); + } + + +}