From 6b5c0d9ba135dcfbe804ef2366398f7f8508e168 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Mon, 7 Jul 2025 02:36:29 +0100 Subject: [PATCH] preparation for functorising quad tree --- dotscape | Bin 978616 -> 978616 bytes fcore/quad-tree.sml | 50 +++++++++++++++++++++++++------------------- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/dotscape b/dotscape index d42c2bf2dbbecaa1f5d1870a7e0599d3dc2dced4..c9a1f971d57b2fd9c6452cac282ad7be97ce162f 100755 GIT binary patch delta 36048 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 delta 36025 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 eY orelse y >= Vector.length yAxis then @@ -129,11 +134,17 @@ struct let val yAxis = Vector.sub (grid, x) val data = Vector.sub (yAxis, y) - val ex = x + size - val ey = y + size - val item = {x = x, y = y, ex = ex, ey = ey, data = data} in - BinTree.insert (item, bintree) + if data = ignoreData then + bintree + else + let + val ex = x + size + val ey = y + size + val item = {x = x, y = y, ex = ex, ey = ey, data = data} + in + BinTree.insert (item, bintree) + end end else let @@ -164,25 +175,22 @@ struct , xClickPoints , yClickPoints ) ({x, ex, y, ey, data}, acc) = - if data = 0 then - acc - else - let - val ex = if ex = x then x + 1 else ex - val ey = if ey = y then y + 1 else ey + let + val ex = if ex = x then x + 1 else ex + val ey = if ey = y then y + 1 else ey - val x = getClickPoint (xClickPoints, x) - val y = getClickPoint (yClickPoints, y) - val ex = getClickPoint (xClickPoints, ex) - val ey = getClickPoint (yClickPoints, ey) + val x = getClickPoint (xClickPoints, x) + val y = getClickPoint (yClickPoints, y) + val ex = getClickPoint (xClickPoints, ex) + val ey = getClickPoint (yClickPoints, ey) - val startX = Ndc.fromPixelX (x, windowWidth, windowHeight) - val endX = Ndc.fromPixelX (ex, windowWidth, windowHeight) - val startY = Ndc.fromPixelY (y, windowWidth, windowHeight) - val endY = Ndc.fromPixelY (ey, windowWidth, windowHeight) - in - Ndc.ltrbToVertexRgb (startX, startY, endX, endY, 0.0, 0.0, 0.0) :: acc - end + val startX = Ndc.fromPixelX (x, windowWidth, windowHeight) + val endX = Ndc.fromPixelX (ex, windowWidth, windowHeight) + val startY = Ndc.fromPixelY (y, windowWidth, windowHeight) + val endY = Ndc.fromPixelY (ey, windowWidth, windowHeight) + in + Ndc.ltrbToVertexRgb (startX, startY, endX, endY, 0.0, 0.0, 0.0) :: acc + end in fun toTriangles ( windowWidth