add functions to add and remove pixels from layer-tree

This commit is contained in:
2025-08-09 09:13:03 +01:00
parent e634bb25d7
commit 34c29bcbba
5 changed files with 35 additions and 14 deletions

View File

@@ -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