Skip to content

Commit 3dac8b8

Browse files
sync scratch
1 parent 13da464 commit 3dac8b8

File tree

1 file changed

+66
-18
lines changed

1 file changed

+66
-18
lines changed

src/Scratch/Program.fs

Lines changed: 66 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,6 +1147,19 @@ let builderSketch () =
11471147

11481148
()
11491149

1150+
let createQuadtreeWithValue (ox : int) (oy : int) (w : int) (h : int) (e : int) (splitLimit : int) (value : float32) : QNodeRef =
1151+
let size = V2i(w, h)
1152+
let xs = Array.zeroCreate<float32> (w * h)
1153+
for y = 0 to size.Y - 1 do
1154+
for x = 0 to size.X - 1 do
1155+
let i = y * size.X + x
1156+
xs.[i] <- value
1157+
1158+
let a = Layer(Defs.Heights1f, xs, DataMapping(V2l(ox, oy), size, exponent = e))
1159+
1160+
let config = { BuildConfig.Default with SplitLimitPowerOfTwo = int splitLimit }
1161+
Quadtree.Build config [| a |]
1162+
11501163
let builderTest_20240112 () =
11511164

11521165
let cpTree =
@@ -1209,28 +1222,18 @@ let builderTest_20240112 () =
12091222
newTree
12101223

12111224

1212-
let createQuadtreeWithValue (ox : int) (oy : int) (w : int) (h : int) (e : int) (splitLimit : int) (value : float32) =
1213-
let size = V2i(w, h)
1214-
let xs = Array.zeroCreate<float32> (w * h)
1215-
for y = 0 to size.Y - 1 do
1216-
for x = 0 to size.X - 1 do
1217-
let i = y * size.X + x
1218-
xs.[i] <- value
1219-
1220-
let a = Layer(Defs.Heights1f, xs, DataMapping(V2l(ox, oy), size, exponent = e))
1221-
1222-
let config = { BuildConfig.Default with SplitLimitPowerOfTwo = int splitLimit }
1223-
Quadtree.Build config [| a |]
1224-
1225+
12251226
let sw = Stopwatch()
12261227

12271228
// (1) create 10x10 base grid with 1m tiles
12281229
//let store = @"W:\Datasets\Vgm\Data\2023-09-04_quadtree"
1229-
let baseGrid = createQuadtreeWithValue 0 0 10 10 0 8 42.0f
1230+
let baseGrid = createQuadtreeWithValue 0 0 2 2 0 8 42.0f
12301231

1231-
let singleTile = createQuadtreeWithValue 3 7 2 3 -2 8 101.0f
1232+
let singleTileA = createQuadtreeWithValue 0 0 1 1 -1 8 50.0f
1233+
let singleTileB = createQuadtreeWithValue 2 2 1 1 -1 8 52.0f
12321234

1233-
let originalQuadtree = Quadtree.Merge Dominance.MoreDetailedOrSecond baseGrid singleTile
1235+
let originalQuadtree = Quadtree.Merge Dominance.MoreDetailedOrSecond baseGrid singleTileA
1236+
let originalQuadtree = Quadtree.Merge Dominance.MoreDetailedOrSecond originalQuadtree singleTileB
12341237

12351238
// (2) take all leaf nodes as test patches
12361239
// (these should be the original data that was merged together)
@@ -1245,6 +1248,8 @@ let builderTest_20240112 () =
12451248
let builder = Builder()
12461249
for n in patches do builder.Add n
12471250

1251+
//builder.Export(Path.GetFullPath("20240202_buildertest")) |> ignore
1252+
12481253
builder.Print()
12491254

12501255
// (4) build new and better quadtree
@@ -1255,18 +1260,61 @@ let builderTest_20240112 () =
12551260
let countMergeNodes = newAndBetterTree |> Quadtree.CountMergeNodes true
12561261
printfn "new quadtree has %d leaf nodes and %d merge nodes" countLeafNodes countMergeNodes
12571262

1258-
let options = SerializationOptions.NewInMemoryStore(verbose = true)
1263+
let options = SerializationOptions.NewInMemoryStore(verbose = false)
12591264
let id = newAndBetterTree |> Quadtree.Save options
12601265
printfn "saved quadtree id = %A" id
12611266

1267+
let xs =
1268+
Query.All Query.Config.Default originalQuadtree
1269+
|> Seq.collect (fun x -> x.GetSamples<float32>(Defs.Heights1f))
1270+
|> Array.ofSeq
1271+
1272+
for (c, h) in xs do
1273+
printfn "%5d %5d %5d %10.2f" c.X c.Y c.Exponent h
1274+
1275+
()
1276+
1277+
let buildSerializationTest_20240202 () =
1278+
1279+
let path = Path.GetFullPath("c:/tmp/20240202_quadtreetest")
1280+
1281+
printfn "path = %s" path
1282+
1283+
let builder = Builder()
12621284

1285+
createQuadtreeWithValue 0 0 2 2 0 8 42.0f |> builder.Add
1286+
createQuadtreeWithValue 0 0 1 1 -1 8 50.0f |> builder.Add
1287+
createQuadtreeWithValue 2 2 1 1 -1 8 52.0f |> builder.Add
1288+
1289+
let options = SerializationOptions.NewInMemoryStore(verbose = false)
1290+
1291+
for i = 1 to 10 do
1292+
let idInMem = builder.Save options
1293+
let idFile = builder.Export(path)
1294+
1295+
printfn "saved builder to memory, id = %A" idInMem
1296+
printfn "saved builder to file , id = %A" idFile
1297+
1298+
let builderReloadedInMem = Builder.Load options idInMem
1299+
match builderReloadedInMem with
1300+
| None -> printfn "reloaded from memory = None"
1301+
| Some x -> printfn "reloaded from memory, %d patches" (x.GetPatches() |> Seq.length)
1302+
1303+
let builderReloadedFile = Builder.Import(path, idFile)
1304+
match builderReloadedFile with
1305+
| None -> printfn "reloaded from file = None"
1306+
| Some x -> printfn "reloaded from file, %d patches" (x.GetPatches() |> Seq.length)
1307+
1308+
()
12631309

12641310
[<EntryPoint>]
12651311
let main argv =
12661312

1313+
buildSerializationTest_20240202 ()
1314+
12671315
//builderTest_20240112 ()
12681316

1269-
builderSketch ()
1317+
//builderSketch ()
12701318

12711319
//madorjan20211103 ()
12721320

0 commit comments

Comments
 (0)