=== versions === python 3.12.0 | numpy 2.5.4 | rasterio 1.5.2 | shapely 2.2.0 | manifold3d 3.5.5 | pyvista 0.49.2 === Step 1: mosaic two GLO-30 tiles onto a 40 m grid === Copernicus_DSM_COG_10_N54_00_W004_00_DEM.tif NaNs left: 370,380 Copernicus_DSM_COG_10_N54_00_W003_00_DEM.tif NaNs left: 0 grid 1126 x 751 vertices at 40 m | 0.0 - 970.8 m === Step 2: one horizontal and vertical scale for the whole model === scale 1:100,000 | cell 0.40 mm | whole model 450 x 300 x 24.4 mm 3 x 2 tiles of 150 x 150 mm = 15 x 15 km each === Step 3: interlocking outlines with a printing clearance === exact partition: sum of tile areas 135,000.000 mm2 | whole model 135,000.000 mm2 | overlap between tiles 0.000000 mm2 clearance between neighbouring tiles: min 0.200 mm, max 0.283 mm over 11 joints === Step 4: cut six tiles and prove they fit === tile A1: 573,472 triangles | watertight True | oriented True | 243.2 cm3 | footprint 159.8 x 159.8 mm, height 24.4 mm tile A2: 566,728 triangles | watertight True | oriented True | 270.5 cm3 | footprint 159.8 x 149.8 mm, height 22.8 mm tile B1: 570,664 triangles | watertight True | oriented True | 233.5 cm3 | footprint 159.8 x 159.8 mm, height 21.4 mm tile B2: 564,120 triangles | watertight True | oriented True | 282.7 cm3 | footprint 159.8 x 149.8 mm, height 23.9 mm tile C1: 566,816 triangles | watertight True | oriented True | 246.4 cm3 | footprint 149.8 x 159.8 mm, height 20.5 mm tile C2: 560,310 triangles | watertight True | oriented True | 263.1 cm3 | footprint 149.8 x 149.8 mm, height 21.5 mm pairwise overlap between tiles: 0.0000 mm3 whole model 1544.08 cm3 | tiles 1539.37 cm3 | removed by the clearance 4.71 cm3 === Step 5: straight edges with holes for filament dowels === 14 dowels, each 19.8 mm long; every pinned tile watertight and oriented: True pin holes per tile: A1 4, A2 4, B1 6, B2 6, C1 4, C2 4 plastic above and below each hole: 1.55 mm === figures === wrote 01-tile-layout, 02-joint-clearance, 03-stl-preview-tiles, 04-joint-closeups