anchor.diff:  part of chronosgl;
   
   class Vector {
  -  
  +
     Float32List array;
   
     double get x => array[0];
     double get y => array[1];
     double get z => array[2];
   
  -  set x(double v)  => array[0] = v;
  -  set y(double v)  => array[1] = v;
  -  set z(double v)  => array[2] = v;
  +  set x(double v) => array[0] = v;
  +  set y(double v) => array[1] = v;
  +  set z(double v) => array[2] = v;
   
     // Careful, this shares the data...
  -  Vector.useList( this.array);
  -
  -  Vector.fromList( Float32List array) {
  -	this.array = new Float32List(3);
  -    this.array[0] = array[0];
  -    this.array[1] = array[1];
  -    this.array[2] = array[2];
  -  }
  -  
  -  Vector( [double x=0.0, double y=0.0, double z=0.0])
  -  {
  -	array = new Float32List(3);
  +  Vector.useList(this.array);
  +
  +  Vector.fromList(List<double> list) {
  +    this.array = new Float32List(3);
  +    this.array[0] = list[0];
  +    this.array[1] = list[1];
  +    this.array[2] = list[2];
  +  }
  +
  +  Vector.fromVector(Vector vector) {
  +    this.array = new Float32List(3);
  +    this.array[0] = vector[0];
  +    this.array[1] = vector[1];
  +    this.array[2] = vector[2];
  +  }
  +
  +  Vector([double x = 0.0, double y = 0.0, double z = 0.0]) {
  +    array = new Float32List(3);
       array[0] = x;
       array[1] = y;
       array[2] = z;
     }
  -  
  +
     double operator [](int index) {
       return array[index];
     }
  -  
   
     void operator []=(int index, double value) {
       array[index] = value;
     }
   
  -  Vector set( Vector v) {
  -      array[0] = v[0];
  -      array[1] = v[1];
  -      array[2] = v[2];
  -      return this;
  -  }
  -  
  +  Vector set(Vector v) {
  +    array[0] = v[0];
  +    array[1] = v[1];
  +    array[2] = v[2];
  +    return this;
  +  }
  +
     Vector copy() {
       return new Vector.fromList(this.array);
     }
  -  
  -  Vector add( Vector v) {
  -      array[0] += v[0];
  -      array[1] += v[1];
  -      array[2] += v[2];
  -      return this;
  -  }
  -
  -  Vector subtract( Vector v) {
  -      array[0] -= v[0];
  -      array[1] -= v[1];
  -      array[2] -= v[2];
  -      return this;
  -  }
  -
  -  Vector scale( num val) {
  -      array[0] *= val;
  -      array[1] *= val;
  -      array[2] *= val;
  -      return this;
  +
  +  Vector add(Vector v) {
  +    array[0] += v[0];
  +    array[1] += v[1];
  +    array[2] += v[2];
  +    return this;
  +  }
  +
  +  Vector subtract(Vector v) {
  +    array[0] -= v[0];
  +    array[1] -= v[1];
  +    array[2] -= v[2];
  +    return this;
  +  }
  +
  +  Vector scale(num val) {
  +    array[0] *= val;
  +    array[1] *= val;
  +    array[2] *= val;
  +    return this;
  +  }
  +
  +  Vector addScaledVector(Vector v, num val) {
  +    array[0] += v[0] * val;
  +    array[1] += v[1] *val;
  +    array[2] += v[2] *val;
  +    return this;
     }
   
     Vector negate() {
  
positive.code:     array[2] = -array[2];
      return this;
    }
    
    Vector normalize() {
      double x = array[0], y = array[1], z = array[2];
      double len = Math.sqrt(x * x + y * y + z * z);
  
      if (len==0) {
        array[0] = 0.0;
        array[1] = 0.0;
        array[2] = 0.0;
  
negative.code:     }
      return this;
    }
  
    // I think the from and to is swapped, but it's the same in glmatrix...
    Vector direction(Vector from, Vector to) {
      double x = from[0] - to[0],
          y = from[1] - to[1],
          z = from[2] - to[2],
          len = Math.sqrt(x * x + y * y + z * z);
  
      if (len == 0) {
        array[0] = 0.0;
        array[1] = 0.0;
        array[2] = 0.0;
  