add functions to add and remove pixels from layer-tree
This commit is contained in:
@@ -1,10 +1,8 @@
|
||||
structure LayerTree =
|
||||
struct
|
||||
datatype tree =
|
||||
NODE of {key: int, value: Grid.t, left: tree, right: tree}
|
||||
| LEAF
|
||||
datatype t = NODE of {key: int, value: Grid.t, left: t, right: t} | LEAF
|
||||
|
||||
val emptyTree = LEAF
|
||||
val empty = LEAF
|
||||
|
||||
fun insert (newKey, newValue, tree) =
|
||||
case tree of
|
||||
@@ -65,15 +63,26 @@ struct
|
||||
else
|
||||
valuePixel) valueYAxis) value
|
||||
|
||||
fun makeEmptyGrid maxSide =
|
||||
Vector.tabulate (maxSide, fn _ =>
|
||||
Vector.tabulate (maxSide, fn _ => Grid.emptyPixel))
|
||||
|
||||
fun flatten (maxSide, tree) =
|
||||
foldl (helpFlatten, tree, makeEmptyGrid maxSide)
|
||||
foldl (helpFlatten, tree, Grid.makeEmpty maxSide)
|
||||
|
||||
fun changeGridSize (maxSide, tree) =
|
||||
let val f = Grid.changeGridSize maxSide
|
||||
in map (f, tree)
|
||||
end
|
||||
|
||||
fun addPixel (key, newX, newY, maxSide, pixel, tree) =
|
||||
let
|
||||
val grid =
|
||||
case get (key, tree) of
|
||||
SOME grid => grid
|
||||
| NONE => Grid.makeEmpty maxSide
|
||||
|
||||
val grid = Grid.updateGrid (grid, newX, newY, pixel)
|
||||
in
|
||||
insert (key, grid, tree)
|
||||
end
|
||||
|
||||
fun removePixel (key, newX, newY, maxSide, tree) =
|
||||
addPixel (key, newX, newY, maxSide, Grid.emptyPixel, tree)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user