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=e8e39c081d7c1461e297777bd08336335a9641e9;hb=8a0cd33ffd13d79465f8a7b54ae19945599a99bf;hp=58873b0f1003d5f64156b3c16a42def1cb8cccd4;hpb=f14dcbc36aa8931a68795716d5ebcb3808d6bce5;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 58873b0f..e8e39c08 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 @@ -864,7 +864,8 @@ public class PipingRules { double l2next = icp.getInlineLength(); double l2 = l2prev + l2next; double l2s = l2 * l2; - if (l > l2s) { + double diff = l - l2s; + if (diff >= MIN_INLINE_LENGTH) { if (allowInsertRemove) { dir.normalize(); double length = Math.sqrt(l) - l2; // true length of the variable length component @@ -925,12 +926,17 @@ public class PipingRules { } } - private static void ppNoOffset(UpdateStruct2 u) throws Exception { + /** + * Recalculates offset vector based on current direction, and calls checkExpandPathLeg + * @param u + * @param updateEnds + * @throws Exception + */ + private static void ppNoOffset(UpdateStruct2 u, boolean updateEnds) throws Exception { if (DEBUG) System.out.println("PipingRules.ppNoOffset() " + u); Vector3d offset = new Vector3d(); if (u.hasOffsets) { - u.dir.normalize(); for (PipeControlPoint icp : u.list) { if (icp.isOffset()) { offset.add(icp.getSizeChangeOffsetVector(u.dir)); @@ -939,7 +945,7 @@ public class PipingRules { } } u.offset = offset; - checkExpandPathLeg(u, PathLegUpdateType.NONE); + checkExpandPathLeg(u, PathLegUpdateType.NONE, updateEnds); } private static void ppNoDir(PipeControlPoint start, Vector3d startPoint, ArrayList list, PipeControlPoint end, Vector3d endPoint, boolean hasOffsets, int iter, boolean reversed, ArrayList toRemove, PipeControlPoint updated) throws Exception { @@ -949,7 +955,7 @@ public class PipingRules { Vector3d dir = new Vector3d(); Vector3d offset = new Vector3d(); hasOffsets = calculateOffset(startPoint, endPoint, start, list, end, dir, offset); - ppNoOffset(new UpdateStruct2(start, startPoint, list, end, endPoint, dir, null, hasOffsets, iter, reversed, toRemove, updated)); + ppNoOffset(new UpdateStruct2(start, startPoint, list, end, endPoint, dir, null, hasOffsets, iter, reversed, toRemove, updated),true); } private static void checkExpandPathLeg(UpdateStruct2 u, PathLegUpdateType lengthChange) throws Exception { @@ -988,16 +994,19 @@ public class PipingRules { other = u.end; position = u.startPoint; dcpStart = true; + if (!u.reversed) + canMoveOther = true; inlineEnd = u.end.isInline(); } else { dcp = u.end; other = u.start; position = u.endPoint; + if (u.reversed) + canMoveOther = true; inlineEnd = u.start.isInline(); } - canMoveOther = !(other == u.updated); - + Vector3d directedDirection = direction(dcp, dcpStart ? Direction.NEXT : Direction.PREVIOUS); if (directedDirection == null) { //updateTurnControlPointTurn(dcp, dcp.getPrevious(), dcp.getNext()); @@ -1037,9 +1046,9 @@ public class PipingRules { canMoveOther = true; } if (aligned) { - if (u.start.isInline() || u.end.isInline() || u.start.asFixedAngle() || u.end.asFixedAngle()) - processPathLeg(u, true, false); - checkExpandPathLeg(u, lengthChange, inlineEnd); + //if (u.start.isInline() || u.end.isInline() || u.start.asFixedAngle() || u.end.asFixedAngle()) + // processPathLeg(u, true, false); + checkExpandPathLeg(u, lengthChange, inlineEnd || u.start.isInline() || u.end.isInline() || u.start.asFixedAngle() || u.end.asFixedAngle()); } else { if (u.iter > 0) { @@ -1075,11 +1084,11 @@ public class PipingRules { System.out.println("PipingRules.updateDirectedPipeRun() moved end " + other + " to " + closest); other.setWorldPosition(closest); if (dcpStart) { - ppNoOffset(new UpdateStruct2(u.start, u.startPoint, u.list, u.end, new Vector3d(closest), directedDirection, null, u.hasOffsets, u.iter, u.reversed, u.toRemove, u.updated)); + ppNoOffset(new UpdateStruct2(u.start, u.startPoint, u.list, u.end, new Vector3d(closest), directedDirection, null, u.hasOffsets, u.iter, u.reversed, u.toRemove, u.updated),true); if (u.end.getNext() != null) updatePathLegNext(u.end, u.updated, PathLegUpdateType.NEXT); } else { - ppNoOffset(new UpdateStruct2(u.start, new Vector3d(closest), u.list, u.end, u.endPoint, directedDirection, null, u.hasOffsets, u.iter, u.reversed, u.toRemove, u.updated)); + ppNoOffset(new UpdateStruct2(u.start, new Vector3d(closest), u.list, u.end, u.endPoint, directedDirection, null, u.hasOffsets, u.iter, u.reversed, u.toRemove, u.updated),true); if (u.start.getPrevious() != null) updatePathLegPrev(u.start, u.updated, PathLegUpdateType.PREV); } @@ -1286,7 +1295,7 @@ public class PipingRules { R = tr / t; if (R <= curr) break; - curr = R*1.01; + curr = R*1.001; iter--; } return curr;