anchor.diff:                  (free, merge rect adjacent)
                   ||> Seq.fold (fun free a -> addFree a free)
                   
  -            TexturePacking(atlasSize, free, used)
  +            TexturePacking(atlasSize, allowRotate, free, used)
           | ValueNone ->
               x
   
  
positive.code:         area / (float atlasSize.X * float atlasSize.Y)
  
      /// Creates an empty TexturePacking with the given size.
      static member Empty (size : V2i) : TexturePacking<'a> =
          if size.AnySmallerOrEqual 0 then
              TexturePacking<'a>(V2i.Zero, BvhTree2d.empty, HashMap.empty)
          else
              let bb = Box2i(V2i.Zero, size - V2i.II)
              TexturePacking<'a>(size, BvhTree2d.ofList [bb, createBox bb, bb], HashMap.empty)
  
      /// Tries to add an element with the given size and (optionally) returns a new TexturePacking.
      member x.TryAdd(id : 'a, size : V2i) : option<TexturePacking<'a>> =
  
negative.code:                         )
  
                      let result =
                          TexturePacking(atlasSize, allowRotate, free, HashMap.add id rect used)
  
                      Some result
                  | ValueNone ->
  