- setEnabled(true);
- InlineComponent comp = (InlineComponent)node;
-
- PipelineComponent prev = comp.getPrevious();
- PipelineComponent next = comp.getNext();
- if (prev.getControlPoint().isInline() && !prev.getControlPoint().isFixed())
- prev = prev.getPrevious();
- if (next.getControlPoint().isInline() && !next.getControlPoint().isFixed()) {
- next = next.getNext();
+ InlineComponent comp = (InlineComponent) node;
+ if (comp.isVariableLength()) {
+ setEnabled(false);
+ } else if (comp.getNext() == null || comp.getPrevious() == null) {
+ setEnabled(true);
+ inline = false;
+ dir = comp.getControlPoint().getInlineDir();
+ dir.normalize();
+ } else {
+ setEnabled(true);
+ inline = true;
+ PipelineComponent prev = comp.getPrevious();
+ PipelineComponent next = comp.getNext();
+ if (prev == null || next == null) {
+ // TODO : we should support open ended translation (when translated component is
+ // the first or last of the run).
+ setEnabled(false);
+ return;
+ }
+ if (prev.getControlPoint().isInline() && !prev.getControlPoint().isFixedLength()
+ && prev.getPrevious() != null)
+ prev = prev.getPrevious();
+ if (next.getControlPoint().isInline() && !next.getControlPoint().isFixedLength()
+ && next.getNext() != null) {
+ next = next.getNext();
+ }
+ Point3d ns = new Point3d();
+ Point3d ne = new Point3d();
+ Point3d ps = new Point3d();
+ Point3d pe = new Point3d();
+ next.getEnds(ns, ne);
+ prev.getEnds(ps, pe);
+ dir = comp.getControlPoint().getInlineDir();
+ // We may have offsets in the path leg, hence we have to project the
+ // coordinates.
+ Vector3d wp = node.getWorldPosition();
+ if (prev.getControlPoint().isVariableLength())
+ s = MathTools.closestPointOnStraight(ps, wp, dir);
+ else
+ s = MathTools.closestPointOnStraight(pe, wp, dir);
+ if (next.getControlPoint().isVariableLength())
+ e = MathTools.closestPointOnStraight(ne, wp, dir);
+ else
+ e = MathTools.closestPointOnStraight(ns, wp, dir);
+ // Remove component's own space from end points to get actual movement range
+ double l = comp.getControlPoint().getInlineLength();
+ Vector3d ld = new Vector3d(dir);
+ ld.scale(l);
+ s.add(ld);
+ e.sub(ld);