anchor.diff:    }
   
     PointSmoother get pointSmoother=>_newPointSmoother;
  +
  +  void addLine(String name, Line line) {
  +    if (line.points == null || line.validPoints.isEmpty) return;
  +    lines[name] = line;
  +    this.smoothLines.clear();
  +    this._currentPointSmoother = null;
  +  }
     
     void removeLines() {
  -    this.lines = new Map<String, Line>();
  -    this.smoothLines = new Map<String, Line>();
  +    this.lines.clear();
  +    this.smoothLines.clear();
  +    this._currentPointSmoother = null;
     }
     
     void removeLine(String s) {
  
positive.code:     this.canvas.onMouseOut.listen((_)=>this.mouseDrag = false);
      this.canvas.onMouseMove.listen((var e) {
        if (this.mouseDrag) {
          if(this._beingRendered) return;
          this._beingRendered = true;
          var offset = toRectangle(e.offset) - toRectangle(this.oldOffset);
          this.rectangle = _shift(this.rectangle, offset);
          this.oldOffset = e.offset;
          clear();
          plot();
          this._beingRendered=false;
        }
      });
    }
  
negative.code:     this.context.clearRect(0,0,canvas.width, canvas.height);
    }
  
    void plot() {
      if(axes.values.map((Axis a)=>a.sizeFluid).contains(true) && !this.mouseDrag)
        rectangle = _zoom(lines.values.map((Line l)=>l.rectangle).reduce((value, element)=>value.boundingBox(element)), 1.1);
  