- if (next == null) {
- UpdateStruct2 us = createUS(tcp, Direction.NEXT, 0, new ArrayList<PipingRules.ExpandIterInfo>(), tcp);
- if (us != null)
- next = us.dir;
- }
- if (prev == null) {
- UpdateStruct2 us = createUS(tcp, Direction.PREVIOUS, 0, new ArrayList<PipingRules.ExpandIterInfo>(), tcp);
- if (us != null) {
- prev = us.dir;
- }
- }
-
- if (!tcp.isFixed()) {
-
-
- if (next == null || prev == null) {
- if (tcp.getTurnAngle() != null)
- return tcp.getTurnAngle();
- return Math.PI; // FIXME : argh
- }
- double turnAngle = prev.angle(next);
-
- double angle = Math.PI - turnAngle;
-
- Vector3d turnAxis = new Vector3d();
- turnAxis.cross(prev, next);
- if (turnAxis.lengthSquared() > MathTools.NEAR_ZERO) {
- double elbowRadius = tcp.getPipelineComponent().getPipeRun().getTurnRadius();
- double R = elbowRadius / Math.tan(angle * 0.5);
-
- turnAxis.normalize();
- tcp.setTurnAngle(turnAngle);
- tcp.setLength(R);// setComponentOffsetValue(R);
- tcp.setTurnAxis(turnAxis);
- // tcp.setPosition(tcp.getPosition());
- } else {
- turnAngle = 0.0;
- tcp.setTurnAngle(0.0);
- tcp.setLength(0.0);
- tcp.setTurnAxis(new Vector3d(MathTools.Y_AXIS));
- }
-
- updateControlPointOrientation(tcp);
-
- if (DEBUG)
- System.out.println("PipingTools.updateTurnControlPointTurn " + prev + " " + next + " " + turnAngle + " " + turnAxis);
- return turnAngle;
- } else {
-
- if (prev != null && next != null) {
- // Nothing to do
- } else if (prev == null) {
- if (!tcp._getReversed())
- tcp.setReversed(true);
- } else if (next == null) {
- if (tcp._getReversed())
- tcp.setReversed(false);
- }
-
- Vector3d dir = null;
- if (!tcp._getReversed()) {
- dir = prev;
- } else {
- dir = next;
- }
- if (dir == null) {
- return Math.PI; // FIXME : argh
- }
-
- Quat4d q = PipeControlPoint.getControlPointOrientationQuat(dir, tcp.getRotationAngle() != null ? tcp.getRotationAngle() : 0.0);
- Vector3d v = new Vector3d();
- MathTools.rotate(q, MathTools.Y_AXIS,v);
- tcp.setTurnAxis(v);
- tcp.setWorldOrientation(q);
- return tcp.getTurnAngle();
- }
+ if (next == null) {
+ UpdateStruct2 us = createUS(tcp, Direction.NEXT, 0, new ArrayList<PipingRules.ExpandIterInfo>(), tcp);
+ if (us != null)
+ next = us.dir;
+ }
+ if (prev == null) {
+ UpdateStruct2 us = createUS(tcp, Direction.PREVIOUS, 0, new ArrayList<PipingRules.ExpandIterInfo>(), tcp);
+ if (us != null) {
+ prev = us.dir;
+ }
+ }
+
+ if (!tcp.isFixed()) {
+
+
+ if (next == null || prev == null) {
+ if (tcp.getTurnAngle() != null)
+ return tcp.getTurnAngle();
+ return Math.PI; // FIXME : argh
+ }
+ double turnAngle = prev.angle(next);
+
+ double angle = Math.PI - turnAngle;
+
+ Vector3d turnAxis = new Vector3d();
+ turnAxis.cross(prev, next);
+ if (turnAxis.lengthSquared() > MathTools.NEAR_ZERO) {
+ double elbowRadius = ((TurnComponent)tcp.getPipelineComponent()).getTurnRadius();
+ double R = elbowRadius / Math.tan(angle * 0.5);
+
+ turnAxis.normalize();
+ tcp.setTurnAngle(turnAngle);
+ tcp.setLength(R);// setComponentOffsetValue(R);
+ tcp.setTurnAxis(turnAxis);
+ // tcp.setPosition(tcp.getPosition());
+ } else {
+ turnAngle = 0.0;
+ tcp.setTurnAngle(0.0);
+ tcp.setLength(0.0);
+ tcp.setTurnAxis(new Vector3d(MathTools.Y_AXIS));
+ }
+
+ updateControlPointOrientation(tcp);
+
+ if (DEBUG)
+ System.out.println("PipingTools.updateTurnControlPointTurn " + prev + " " + next + " " + turnAngle + " " + turnAxis);
+ return turnAngle;
+ } else {
+
+ if (prev != null && next != null) {
+ // Nothing to do
+ } else if (prev == null) {
+ if (!tcp._getReversed())
+ tcp.setReversed(true);
+ } else if (next == null) {
+ if (tcp._getReversed())
+ tcp.setReversed(false);
+ }
+
+ Vector3d dir = null;
+ if (!tcp._getReversed()) {
+ dir = prev;
+ } else {
+ dir = next;
+ dir.negate();
+ }
+ if (dir == null) {
+ return Math.PI; // FIXME : argh
+ }
+
+ Quat4d q = PipeControlPoint.getControlPointOrientationQuat(dir, tcp.getRotationAngle() != null ? tcp.getRotationAngle() : 0.0);
+ Vector3d v = new Vector3d();
+ MathTools.rotate(q, MathTools.Y_AXIS,v);
+ tcp.setTurnAxis(v);
+ tcp.setWorldOrientation(q);
+ if (tcp.getTurnAngle() != null)
+ return tcp.getTurnAngle();
+ return Math.PI; // FIXME : argh
+ }