## Evaluate a bridged graph at sample points and report WHICH AXIS MOVED.
##
## evaluate_density_batch returns dst.y - src.y, so a graph that writes its
## height into another component answers zero. Reporting the whole displacement
## is the only way to tell "the field is flat here" from "the field went
## somewhere the density does not read".
##
## Args: <graph.json>
extends SceneTree
func _init() -> void:
var a := OS.get_cmdline_user_args()
var g: ProcNodeGraph = GraphImporter.import_from_json(FileAccess.get_file_as_string(a[0]))
if g == null:
push_error("import returned null"); quit(1); return
var pts := PackedVector3Array()
for i in range(9):
var t := -16.0 + 4.0 * float(i)
pts.append(Vector3(t, 0.0, t))
var arr := []
arr.resize(Mesh.ARRAY_MAX)
arr[Mesh.ARRAY_VERTEX] = pts
var am := ArrayMesh.new()
am.add_surface_from_arrays(Mesh.PRIMITIVE_POINTS, arr)
var host := ProcGeometryNode.new()
host.use_gpu = false
host.set_input_mesh(am)
host.set_graph(g)
get_root().add_child(host)
var m: ArrayMesh = host.bake_mesh()
var d: PackedFloat32Array = g.evaluate_density_batch(pts)
if m == null or m.get_surface_count() == 0:
print("no mesh out"); quit(1); return
var v: PackedVector3Array = m.surface_get_arrays(0)[Mesh.ARRAY_VERTEX]
print(" in -> out displacement density")
for i in range(mini(v.size(), pts.size())):
var dd := v[i] - pts[i]
print(" (%6.1f,%5.1f,%6.1f) -> (%7.2f,%7.2f,%7.2f) d(%6.2f,%6.2f,%6.2f) %9.4f"
% [pts[i].x, pts[i].y, pts[i].z, v[i].x, v[i].y, v[i].z, dd.x, dd.y, dd.z, d[i]])
quit()