@@ -0,0 +1,1367 @@
+package com.hitvol.vectboard;%0A%0Aimport java.util.ArrayList;%0Aimport java.util.LinkedList;%0Aimport java.util.List;%0A%0A/**%0A * Created by archevel on 2015-11-14.%0A */%0Apublic class Filament %7B%0A%0A    private final ArrayList%3CPoint%3E points;%0A%0A    public Filament() %7B%0A        this.points = new ArrayList%3C%3E();%0A    %7D%0A%0A    public List%3CPoint%3E getPoints() %7B%0A        return points;%0A    %7D%0A%0A    public void add(int x, int y) %7B%0A        points.add(new Point(x, y));%0A    %7D%0A%0A    public void addAll(List%3CPoint%3E points) %7B%0A        this.points.addAll(points);%0A    %7D%0A%0A    public static final class Point %7B%0A        public final int x;%0A        public final int y;%0A        public Point(int x, int y) %7B%0A            this.x = x;%0A            this.y = y;%0A        %7D%0A%0A        @Override%0A        public boolean equals(Object o) %7B%0A            if (this == o) return true;%0A            if (o == null %7C%7C getClass() != o.getClass()) return false;%0A%0A            Point point = (Point) o;%0A%0A            if (x != point.x) return false;%0A            return y == point.y;%0A%0A        %7D%0A%0A        @Override%0A        public int hashCode() %7B%0A            int result = x;%0A            result = 31 * result + y;%0A            return result;%0A        %7D%0A%0A        @Override%0A        public String toString() %7B%0A            return %22Point%7B%22 +%0A                    %22x=%22 + x +%0A                    %22, y=%22 + y +%0A                    '%7D';%0A        %7D%0A    %7D%0A%7D%0A

Add main shape abstraction