Vector3d endPoint = end.getWorldPosition();
Vector3d dir = new Vector3d();
hasOffsets = calculateOffset(startPoint, endPoint, start, list, end, dir, offset);
- System.out.println();
return new UpdateStruct2(start, startPoint, list, end, endPoint, dir, offset, hasOffsets, iter, direction == Direction.PREVIOUS, toRemove, updated);
}
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
}
}
- 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));
}
}
u.offset = offset;
- checkExpandPathLeg(u, PathLegUpdateType.NONE);
+ checkExpandPathLeg(u, PathLegUpdateType.NONE, updateEnds);
}
private static void ppNoDir(PipeControlPoint start, Vector3d startPoint, ArrayList<PipeControlPoint> list, PipeControlPoint end, Vector3d endPoint, boolean hasOffsets, int iter, boolean reversed, ArrayList<ExpandIterInfo> toRemove, PipeControlPoint updated) throws Exception {
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 {
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());
}
Point3d directedEndPoint = new Point3d(u.endPoint);
if (u.hasOffsets)
- directedEndPoint.add(u.offset);
+ directedEndPoint.sub(u.offset);
double mu[] = new double[2];
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) {
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);
}
return tr; // space for 90 deg
Vector3d dir = dcp.getDirectedControlPointDirection();
Vector3d dp = dcp.getWorldPosition();
- //Vector3d tp = tcp.getWorldPosition();
Vector3d op = other.getWorldPosition();
double u[] = new double[1];
Vector3d closest = MathTools.closestPointOnStraight(op, dp, dir,u);
R = tr / t;
if (R <= curr)
break;
- curr = R*1.01;
+ curr = R*1.001;
iter--;
}
return curr;
List<PipeControlPoint> list2 = pcps.get(i+1);
PipeControlPoint prev = list.get(list.size()-1);
PipeControlPoint next = list2.get(0);
- System.out.println();
if (prev == next) {
// Reverse the component on the boundary.
InlineComponent ic = (InlineComponent)prev.getPipelineComponent();