private LineSegmentInt inflateSegment(LineSegmentInt seg) { if (isOnGrid(seg.getP1()) || isOnGrid(seg.getP2())) { return new LineSegmentInt(inflatePoint2DInt(seg.getP1()), inflatePoint2DInt(seg.getP2())); } for (InflateData x : inflateX) { seg = seg.inflateXAlpha(x); } for (InflateData y : inflateY) { seg = seg.inflateYAlpha(y); } return seg; }
public List<LineSegmentInt> inflate(Collection<LineSegmentInt> segments) { final List<LineSegmentInt> result = new ArrayList<LineSegmentInt>(); LineSegmentInt last = null; final Collection<LineSegmentInt> cutSegments = cutSegments(segments); for (LineSegmentInt seg : inflateSegmentCollection(cutSegments)) { if (last != null && last.getP2().equals(seg.getP1()) == false) { result.add(new LineSegmentInt(last.getP2(), seg.getP1())); } result.add(seg); last = seg; } return result; }
Collection<LineSegmentInt> cutSegments(LineSegmentInt original) { final List<LineSegmentInt> result = new ArrayList<LineSegmentInt>(); Point2DInt cur = original.getP1(); final Collection<Point2DInt> cutPoints = cutPoints(original); for (Point2DInt inter : cutPoints) { if (cur.equals(inter)) { continue; } result.add(new LineSegmentInt(cur, inter)); cur = inter; } if (cur.equals(original.getP2()) == false) { result.add(new LineSegmentInt(cur, original.getP2())); } return result; }