anchor.diff:    // Might as well use Vector3s to get depth, this is just easier to work with for now
     int depth;
     bool visible = true;
  +  
  +  // Assumes point is on line
  +  List<LineSegment> split(Vector2 position) {
  +    List<LineSegment> newLines = new List<LineSegment>();
  +    newLines.add(new LineSegment(this.start, position));
  +    newLines.add(new LineSegment(position, this.end));
  +    return newLines;
  +  }
   }
   
   class LineGroup {
  
positive.code:   // Of those two lines, second line will not be drawn.
    // Until another line segment in new line intersects, all will be marked as hidden.
    // On next intersection, split lines and hide first of the two new lines.
    //Lines.add(b);
  }
  
  void drawLineSegments() {
    for (int i = 0; i < Lines.length; i++) {
      var material = new LineBasicMaterial(linewidth: 100.0, color: 0x0077dd);
      var geometry = new Geometry();
      for (int j = 0; j < Lines[i].length; j++) {
        LineSegment line = Lines[i][j];
        // TODO: Negate y here?
        geometry.vertices.add(new Vector3(line.start.x, line.start.y, 0.0));
        geometry.vertices.add(new Vector3(line.end.x, line.end.y, 0.0));
  
negative.code:   void add(LineSegment line) => Line.add(line);
    num get length => Line.length;
    LineSegment operator [](int index) => Line[index];
    void insert(int index, LineSegment line) => Line.insert(index, line);
    LineSegment removeAt(int index) => Line.removeAt(index);
  }
  
  List<LineGroup> Lines = new List<LineGroup>();
  