anchor.diff:          let setter = name => O ^-> Float * Float
           [getter; setter]
   
  +    /// Pseudo-property getting and setting a 2-element double array [x,y,z].
  +    let propF3 self name : list<CodeModel.Member> =
  +        let getter =
  +            (name => Float * Float * Float ^-> self)
  +            |> WithInline (sprintf "$0.%s([$1,$2,$3])" name)
  +        let setter = name => O ^-> Float * Float * Float
  +        [getter; setter]
  +
  +    /// Pseudo-property getting and setting something of the form [[x,y],[a,b]] with all floats.
  +    let propF4 self name : list<CodeModel.Member> =
  +        let getter =
  +            (name => Float2T * Float2T ^-> self)
  +            |> WithInline (sprintf "$0.%s([$1,$2])" name)
  +        let setter = name => O ^-> Float2T * Float2T
  +        [getter; setter]
  +
       let Cluster =
           let self = Type.New()
           ChainedClass "Cluster" self <| fun chained ->
  
positive.code:             "local" , String
          ]
  
      let interpolate argType = argType?a * argType?b ^-> argType
  
      let Scale = Class "Scale"
  
negative.code:     let ClipTransform =
          ChainedClassNewInherits "ClipTransform" StreamTransform <| fun chained ->
          [
              "extent" => getSetVal chained Float2x2T // TODO: check
          ]
  
      let Voronoi =
  