X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Futils%2FComponentUtils.java;h=438e0bd6a96eae87cf8121640a11bfd350409161;hb=47a78f85f52d380243f8138a8104f79299c3c86c;hp=c20cf92102a2262a7429c8b41fc7fffda3484af2;hpb=71637e54f4df136cd53d5ba956285f5be108b798;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/utils/ComponentUtils.java b/org.simantics.plant3d/src/org/simantics/plant3d/utils/ComponentUtils.java index c20cf921..438e0bd6 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/utils/ComponentUtils.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/utils/ComponentUtils.java @@ -11,6 +11,7 @@ import javax.vecmath.Vector3d; import org.simantics.Simantics; import org.simantics.db.ReadGraph; +import org.simantics.db.RequestProcessor; import org.simantics.db.Resource; import org.simantics.db.common.request.ReadRequest; import org.simantics.db.common.utils.NameUtils; @@ -32,34 +33,41 @@ import org.simantics.plant3d.scenegraph.TurnComponent; import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint; import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint.Direction; import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint.PositionType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.simantics.plant3d.scenegraph.controlpoint.PipingRules; public class ComponentUtils { + private final static Logger LOGGER = LoggerFactory.getLogger(ComponentUtils.class); private static Map> clazzes = new HashMap>(); private static Map providers = new HashMap(); private static Map names = new HashMap(); - public static void preloadCache() { - Simantics.getSession().asyncRequest(new ReadRequest() { - - @Override - public void run(ReadGraph graph) throws DatabaseException { - List types = new ArrayList(); - types.add(Plant3D.URIs.Builtin_Straight); - types.add(Plant3D.URIs.Builtin_Elbow); - types.add(Plant3D.URIs.Builtin_ConcentricReducer); - types.add(Plant3D.URIs.Builtin_BranchSplitComponent); - types.add(Plant3D.URIs.Builtin_EccentricReducer); - types.add(Plant3D.URIs.Builtin_Elbow45); - types.add(Plant3D.URIs.Builtin_Elbow90); + public static void preloadCache(RequestProcessor session) { + try { + session.syncRequest(new ReadRequest() { - for (String typeURI : types) { - load(graph, typeURI); + @Override + public void run(ReadGraph graph) throws DatabaseException { + List types = new ArrayList(); + types.add(Plant3D.URIs.Builtin_Straight); + types.add(Plant3D.URIs.Builtin_Elbow); + types.add(Plant3D.URIs.Builtin_ConcentricReducer); + types.add(Plant3D.URIs.Builtin_BranchSplitComponent); + types.add(Plant3D.URIs.Builtin_EccentricReducer); + types.add(Plant3D.URIs.Builtin_Elbow45); + types.add(Plant3D.URIs.Builtin_Elbow90); + + for (String typeURI : types) { + load(graph, typeURI); + } } - } - }); + }); + } catch (DatabaseException e) { + LOGGER.error("ComponentUtils.preloadCache() failed unexpectedly", e); + } } private static GeometryProvider getProvider(ReadGraph graph, Resource type) throws DatabaseException { @@ -273,6 +281,7 @@ public class ComponentUtils { // Reducer requires pipe specs public Double diameter; + public Double thickness; public Double turnRadius; // Variable length @@ -323,6 +332,14 @@ public class ComponentUtils { public void setDiameter(Double diameter) { this.diameter = diameter; } + + public double getThickness() { + return thickness; + } + + public void setThickness(double thickness) { + this.thickness = thickness; + } public Double getTurnRadius() { return turnRadius; @@ -482,6 +499,11 @@ public class ComponentUtils { Vector3d v = new Vector3d(dir); if (insertAdjustable) { + // Prevent moving of adjacent components - always insert at end of a connected variable length component + if (position == PositionType.NEXT && component.getNext() != null || + position == PositionType.PREVIOUS && component.getPrevious() != null) + insertPosition = PositionType.PREVIOUS; + if (insertPosition == PositionType.NEXT) v.scale(newComponent.getControlPoint().getInlineLength()); else if (insertPosition == PositionType.SPLIT) @@ -508,14 +530,20 @@ public class ComponentUtils { case NEXT: if (toPcp.isDualInline()) toPcp = toPcp.getDualSub(); - newPcp.insert(toPcp, Direction.NEXT); newPcp.setWorldPosition(pos); + if (toPcp.getNext() != null) + PipingRules.splitVariableLengthComponent(newComponent, (InlineComponent)component, false); + else + newPcp.insert(toPcp, Direction.NEXT); break; case PREVIOUS: if (toPcp.isDualSub()) toPcp = toPcp.parent; - newPcp.insert(toPcp, Direction.PREVIOUS); newPcp.setWorldPosition(pos); + if (toPcp.getPrevious() != null) + PipingRules.splitVariableLengthComponent(newComponent, (InlineComponent)component, false); + else + newPcp.insert(toPcp, Direction.PREVIOUS); break; case SPLIT: PipingRules.splitVariableLengthComponent(newComponent, (InlineComponent)component, true); @@ -529,6 +557,7 @@ public class ComponentUtils { String n = root.getUniqueName("PipeRun"); other.setName(n); other.setPipeDiameter(inst.diameter); + other.setPipeThickness(inst.thickness); other.setTurnRadius(inst.turnRadius); root.addChild(other);