X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fscenegraph%2Fcontrolpoint%2FPipingRules.java;h=6c121d80857da7b7c920c37f73d774b14d191b62;hb=bdc6f4000e1d4c4cd3c8d4bbf1af16490d019692;hp=a0ff359e8479a8c0f2b23889aee55ef7dd28018e;hpb=c107c8c7654c47da1cbc57336a524efe0f48d77a;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/controlpoint/PipingRules.java b/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/controlpoint/PipingRules.java index a0ff359e..6c121d80 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/controlpoint/PipingRules.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/controlpoint/PipingRules.java @@ -51,6 +51,8 @@ public class PipingRules { private static Object ruleMutex = new Object(); public static void requestUpdate(PipeControlPoint pcp) { + if (!PipingRules.enabled) + return; if (DEBUG) System.out.println("PipingRules request " + pcp); synchronized (updateMutex) { if (!requestUpdates.contains(pcp)) @@ -59,6 +61,9 @@ public class PipingRules { } public static boolean update() throws Exception { + if (!PipingRules.enabled) + return false; + if (requestUpdates.size() == 0) return false; @@ -304,6 +309,10 @@ public class PipingRules { else if (us.end.equals(updated)) lengthChange = PathLegUpdateType.PREV; } + if (us == null) { + System.out.println("Null update struct " + start); + return; + } updatePathLeg(us, lengthChange); } @@ -316,6 +325,10 @@ public class PipingRules { // else if (us.end.equals(updated)) // lengthChange = PathLegUpdateType.PREV; // } + if (us == null) { + System.out.println("Null update struct " + start); + return; + } updatePathLeg(us, lengthChange); } @@ -1629,8 +1642,9 @@ public class PipingRules { PipeControlPoint pcp = pipeRun.getControlPoints().iterator().next(); while (pcp.getPrevious() != null) { PipeControlPoint prev = pcp.getPrevious(); - if (prev.getPipeRun() != pipeRun) - break; + if (prev.getPipeRun() != pipeRun && prev.getPipeRun() != null) { // bypass possible corruption + break; + } pcp = prev; } if (pcp.isDualSub()) { @@ -1800,11 +1814,19 @@ public class PipingRules { } List runPcps = getControlPoints(pipeRun); if (runPcps.size() != count) { - System.out.println("Run " + pipeRun.getName() + " contains unconnected control points"); + System.out.println("Run " + pipeRun.getName() + " contains unconnected control points, found " + runPcps.size() + " connected, " + pcps.size() + " total."); + for (PipeControlPoint pcp : pcps) { + if (!runPcps.contains(pcp)) { + System.out.println("Unconnected " + pcp + " " + pcp.getPipelineComponent()); + } + } } for (PipeControlPoint pcp : pcps) { + if (pcp.getPipeRun() == null) { + System.out.println("PipeRun ref missing " + pcp + " " + pcp.getPipelineComponent()); + } if (!pcp.isDirected() && pcp.getNext() == null && pcp.getPrevious() == null) - System.out.println("Orphan undirected " + pcp); + System.out.println("Orphan undirected " + pcp + " " + pcp.getPipelineComponent()); } for (PipeControlPoint pcp : pcps) { if (pcp.getParentPoint() == null) {