@@ -1147,6 +1147,19 @@ let builderSketch () =
1147
1147
1148
1148
()
1149
1149
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
+
1150
1163
let builderTest_20240112 () =
1151
1164
1152
1165
let cpTree =
@@ -1209,28 +1222,18 @@ let builderTest_20240112 () =
1209
1222
newTree
1210
1223
1211
1224
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
+
1225
1226
let sw = Stopwatch()
1226
1227
1227
1228
// (1) create 10x10 base grid with 1m tiles
1228
1229
//let store = @"W:\Datasets\Vgm\Data\2023-09-04_quadtree"
1229
- let baseGrid = createQuadtreeWithValue 0 0 10 10 0 8 42.0 f
1230
+ let baseGrid = createQuadtreeWithValue 0 0 2 2 0 8 42.0 f
1230
1231
1231
- let singleTile = createQuadtreeWithValue 3 7 2 3 - 2 8 101.0 f
1232
+ let singleTileA = createQuadtreeWithValue 0 0 1 1 - 1 8 50.0 f
1233
+ let singleTileB = createQuadtreeWithValue 2 2 1 1 - 1 8 52.0 f
1232
1234
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
1234
1237
1235
1238
// (2) take all leaf nodes as test patches
1236
1239
// (these should be the original data that was merged together)
@@ -1245,6 +1248,8 @@ let builderTest_20240112 () =
1245
1248
let builder = Builder()
1246
1249
for n in patches do builder.Add n
1247
1250
1251
+ //builder.Export(Path.GetFullPath("20240202_buildertest")) |> ignore
1252
+
1248
1253
builder.Print()
1249
1254
1250
1255
// (4) build new and better quadtree
@@ -1255,18 +1260,61 @@ let builderTest_20240112 () =
1255
1260
let countMergeNodes = newAndBetterTree |> Quadtree.CountMergeNodes true
1256
1261
printfn " new quadtree has %d leaf nodes and %d merge nodes" countLeafNodes countMergeNodes
1257
1262
1258
- let options = SerializationOptions.NewInMemoryStore( verbose = true )
1263
+ let options = SerializationOptions.NewInMemoryStore( verbose = false )
1259
1264
let id = newAndBetterTree |> Quadtree.Save options
1260
1265
printfn " saved quadtree id = %A " id
1261
1266
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()
1262
1284
1285
+ createQuadtreeWithValue 0 0 2 2 0 8 42.0 f |> builder.Add
1286
+ createQuadtreeWithValue 0 0 1 1 - 1 8 50.0 f |> builder.Add
1287
+ createQuadtreeWithValue 2 2 1 1 - 1 8 52.0 f |> 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
+ ()
1263
1309
1264
1310
[<EntryPoint>]
1265
1311
let main argv =
1266
1312
1313
+ buildSerializationTest_ 20240202 ()
1314
+
1267
1315
//builderTest_20240112 ()
1268
1316
1269
- builderSketch ()
1317
+ // builderSketch ()
1270
1318
1271
1319
//madorjan20211103 ()
1272
1320
0 commit comments