X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fscenegraph%2Fcontrolpoint%2FControlPointFactory.java;h=441d1276477c08c1c1b710ea456a210b27eefed4;hb=HEAD;hp=193cdd27d16745d6483b83ee99a802185604ca06;hpb=a460e609147d064dd3da464bcf1626845e0f93b4;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/controlpoint/ControlPointFactory.java b/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/controlpoint/ControlPointFactory.java index 193cdd27..441d1276 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/controlpoint/ControlPointFactory.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/controlpoint/ControlPointFactory.java @@ -6,12 +6,13 @@ import java.util.Map; import org.simantics.Simantics; import org.simantics.db.ReadGraph; +import org.simantics.db.RequestProcessor; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; import org.simantics.db.request.Read; import org.simantics.plant3d.ontology.Plant3D; import org.simantics.plant3d.scenegraph.PipelineComponent; -import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint.Type; +import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint.PointType; import org.simantics.plant3d.utils.Item; import org.simantics.plant3d.utils.P3DUtil; @@ -20,14 +21,14 @@ public class ControlPointFactory { private static Map cache = new HashMap(); - public static void preloadCache() throws Exception { - List items = P3DUtil.getEnds(); - items.addAll(P3DUtil.getInlines()); - items.addAll(P3DUtil.getNozzles()); - items.addAll(P3DUtil.getTurns()); + public static void preloadCache(RequestProcessor session, String libUri) throws Exception { + List items = P3DUtil.getEnds(session, libUri); + items.addAll(P3DUtil.getInlines(session, libUri)); + items.addAll(P3DUtil.getNozzles(session, libUri)); + items.addAll(P3DUtil.getTurns(session, libUri)); for (Item item : items) { - Instruction inst = createInstruction(item.getUri()); + Instruction inst = createInstruction(session, item.getUri()); cache.put(item.getUri(), inst); } } @@ -35,7 +36,7 @@ public class ControlPointFactory { public static PipeControlPoint create(PipelineComponent component) throws Exception { Instruction inst = cache.get(component.getType()); if (inst == null) { - inst = createInstruction(component.getType()); + inst = createInstruction(Simantics.getSession(), component.getType()); cache.put(component.getType(), inst); } if (inst == null) { @@ -45,6 +46,9 @@ public class ControlPointFactory { PipeControlPoint pcp = new PipeControlPoint(component); pcp.setType(inst.type); pcp.setFixed(inst.fixed); + pcp.setMod(inst.mod); + pcp.setRotate(inst.isRotate); + pcp.setReverse(inst.isReverse); switch(inst.type) { case END: @@ -56,10 +60,13 @@ public class ControlPointFactory { sub.parent = pcp; sub.setType(inst.type); sub.setFixed(inst.fixed); + sub.setMod(inst.mod); sub.setSub(true); -// pcp.setOffset(0.0); + sub.setDeletable(false); if (inst.isOffset) pcp.setOffset(0.0); + if (inst.isSizeChange) + pcp.setSizeChange(true); } break; @@ -72,16 +79,18 @@ public class ControlPointFactory { private static class Instruction { - Type type; + PointType type; boolean fixed; + boolean mod; boolean isOffset; boolean isSizeChange; - + boolean isRotate; + boolean isReverse; } - private static Instruction createInstruction(final String type) throws Exception { - return Simantics.getSession().syncRequest(new Read() { + private static Instruction createInstruction(RequestProcessor session, final String type) throws Exception { + return session.syncRequest(new Read() { @Override public Instruction perform(ReadGraph graph) throws DatabaseException { Resource res = graph.getResource(type); @@ -90,19 +99,27 @@ public class ControlPointFactory { i.fixed = false; i.isOffset = false; i.isSizeChange = false; - i.type = Type.INLINE; + i.isRotate = false; + i.isReverse = false; + i.type = PointType.INLINE; + i.mod = false; if (graph.isInheritedFrom(res, p3d.Nozzle)) { i.fixed = true; i.isOffset = false; i.isSizeChange = false; - i.type = Type.END; + i.type = PointType.END; } else if (graph.isInheritedFrom(res, p3d.InlineComponent)){ - i.type = Type.INLINE; + i.type = PointType.INLINE; if (graph.hasStatement(res,p3d.VariableLengthInlineComponent)) { i.fixed = false; } else if (graph.hasStatement(res,p3d.FixedLengthInlineComponent)) { i.fixed = true; + } else if (graph.hasStatement(res,p3d.AdjustableLengthInlineComponent)) { + i.fixed = true; + i.mod = true; + } else { + throw new DatabaseException("Inline component type " + res + " does not have length configuration."); } if (graph.hasStatement(res,p3d.SizeChangeComponent)) { @@ -112,17 +129,26 @@ public class ControlPointFactory { if (graph.hasStatement(res,p3d.OffsetComponent)) { i.isOffset = true; } + if (graph.hasStatement(res,p3d.RotateComponent)) { + i.isRotate = true; + } + + if (graph.hasStatement(res,p3d.ReverseComponent)) { + i.isReverse = true; + } } else if (graph.isInheritedFrom(res, p3d.TurnComponent)) { - i.type = Type.TURN; + i.type = PointType.TURN; if (graph.hasStatement(res,p3d.VariableAngleTurnComponent)) { i.fixed = false; } else if (graph.hasStatement(res,p3d.FixedAngleTurnComponent)) { i.fixed = true; + } else { + throw new DatabaseException("Turn component type " + res + " does not have angle configuration."); } } else if (graph.isInheritedFrom(res, p3d.EndComponent)) { i.fixed = false; - i.type = Type.END; + i.type = PointType.END; } else { return null; }