#!/usr/bin/env python3 """Find VFMSH tiles intersecting a small region without reading mesh payloads.""" import argparse import glob import os import resource import struct def main(): parser = argparse.ArgumentParser() parser.add_argument("directory") parser.add_argument("--lod", type=int, required=True) parser.add_argument("--bounds", nargs=6, type=float, required=True, metavar=("XMIN", "XMAX", "YMIN", "YMAX", "ZMIN", "ZMAX")) args = parser.parse_args() xmin, xmax, ymin, ymax, zmin, zmax = args.bounds matches = 0 for path in sorted(glob.glob(os.path.join(args.directory, "*.vfmesh"))): with open(path, "rb") as stream: if stream.read(8) != b"VFMSH001": continue version, voxel_um, tile_count = struct.unpack("<3I", stream.read(12)) stream.seek(40, 1) if version != 1: continue for _ in range(tile_count): key = struct.unpack("<4i", stream.read(16)) surface_count, _, vertex_count, index_count, mask_count = struct.unpack( "<5I", stream.read(20)) extent = 32.0 * (1 << key[3]) * voxel_um / 1_000_000.0 x0, y0, z0 = (key[axis] * extent for axis in range(3)) intersects = (key[3] == args.lod and index_count > 0 and x0 <= xmax and x0 + extent >= xmin and y0 <= ymax and y0 + extent >= ymin and z0 <= zmax and z0 + extent >= zmin) if intersects: matches += 1 print(f"[VFMeshTileWindow] scene={os.path.basename(path)} key={key} " f"vertices={vertex_count} indices={index_count} " f"extent_m={extent:.3f}") stream.seek(vertex_count * 24 + index_count * 4 + mask_count, 1) print(f"[VFMeshTileWindowSummary] matching_tiles={matches} " f"peak_rss_kib={resource.getrusage(resource.RUSAGE_SELF).ru_maxrss}") if __name__ == "__main__": main()