anchor.diff:          area / (float atlasSize.X * float atlasSize.Y)
   
       /// Creates an empty TexturePacking with the given size.
  -    static member Empty (size : V2i) : TexturePacking<'a> =
  +    static member Empty (size : V2i, allowRotate : bool) : TexturePacking<'a> =
           if size.AnySmallerOrEqual 0 then
  -            TexturePacking<'a>(V2i.Zero, BvhTree2d.empty, HashMap.empty)
  +            TexturePacking<'a>(V2i.Zero, allowRotate, BvhTree2d.empty, HashMap.empty)
           else
               let bb = Box2i(V2i.Zero, size - V2i.II)
  -            TexturePacking<'a>(size, BvhTree2d.ofList [bb, createBox bb, bb], HashMap.empty)
  +            TexturePacking<'a>(size, allowRotate, BvhTree2d.ofList [bb, createBox bb, bb], HashMap.empty)
  +            
  +    static member Empty (size : V2i) : TexturePacking<'a> =
  +        TexturePacking<'a>.Empty(size, true)
   
       /// 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>> =
  
positive.code:             //failwithf "bad free: %s" str
              Log.warn "bad free: %s" str
      
      do validate()
  
      
      /// All free MaxRects.
  
negative.code:                 (free, merge rect adjacent)
                  ||> Seq.fold (fun free a -> addFree a free)
                  
              TexturePacking(atlasSize, allowRotate, free, used)
          | ValueNone ->
              x
  
  