package org.simantics.processeditor.adapters; import javax.vecmath.Point3d; import javax.vecmath.Vector3d; import org.simantics.db.Graph; import org.simantics.db.Resource; import org.simantics.db.adaption.AdaptionException; import org.simantics.db.adaption.ResourceAdapter; import org.simantics.layer0.utils.EntityFactory; import org.simantics.layer0.utils.IEntity; import org.simantics.processeditor.ProcessResource; import org.simantics.processeditor.actions.PositionType; import org.simantics.processeditor.common.ControlPointTools; import org.simantics.processeditor.common.PipingTools2.Direction; import org.simantics.proconf.g3d.base.Constraint; import org.simantics.proconf.g3d.base.G3DTools; public class TurnComponentConstraintAdapter implements ResourceAdapter { @SuppressWarnings("unchecked") @Override public T adapt(Graph graph, Resource resource, Resource mia) throws AdaptionException { Constraint c = new Constraint(); assert(graph.isInstanceOf(resource, ProcessResource.plant3Dresource.TurnComponent)); IEntity ent = EntityFactory.create(graph,resource); IEntity pcp = ent.getSingleRelatedObject(ProcessResource.plant3Dresource.HasControlPoint); Point3d center = G3DTools.getPoint(pcp.getSingleRelatedObject(ProcessResource.g3dResource.HasWorldPosition)); Point3d p1 = ControlPointTools.getRealPosition(pcp, PositionType.NEXT); Point3d p2 = ControlPointTools.getRealPosition(pcp, PositionType.PREVIOUS); Vector3d dir1 = ControlPointTools.getPathLegDirection(pcp, Direction.NEXT); Vector3d dir2 = ControlPointTools.getPathLegDirection(pcp, Direction.PREVIOUS); c.points.add(center); c.points.add(p1); c.points.add(p2); c.dirs.add(dir1); c.dirs.add(dir2); return (T) c; } }