8f77d04283
Root cause: add_vertex returns array index but copy_brep/merge_brep/extract_face_fragment keyed by v.id (next_id_ value). When vertices and edges are interleaved, v.id != array index → map lookup fails → OOB access. Fixes in brep_boolean.cpp: - copy_brep: key by vertex index (vi) instead of v.id - merge_brep: key by vi, value = best_idx (array index) not result.vertex(id).id - extract_face_fragment: use body.vertex(e.v_start) directly (e.v_start is array index) - face_bounds/face_centroid/faces_intersect: same direct access pattern Also fixed same pattern in brep_heal.cpp, brep_validate.cpp, step_export.cpp