fix: shell vertex ID→map lookup, fix SEGFAULT
CI / Build & Test (push) Failing after 11s
CI / Release Build (push) Failing after 31s

This commit is contained in:
茂之钳
2026-07-24 10:11:59 +00:00
parent 080776930f
commit bfe2ecbe95
6 changed files with 808 additions and 5 deletions
+8 -5
View File
@@ -1,5 +1,6 @@
#include "vde/brep/modeling.h"
#include <cmath>
#include <map>
#include <algorithm>
#include <cassert>
@@ -746,14 +747,16 @@ BrepModel shell(const BrepModel& body, int open_face, double thickness) {
BrepModel result;
// ── 1. Offset all vertices inward ──
std::vector<int> outer_vid(body.num_vertices()); // map old id → new outer id
std::vector<int> inner_vid(body.num_vertices()); // map old id → new inner id
std::map<int, int> outer_vid; // vertex ID → new outer vertex ID
std::map<int, int> inner_vid; // vertex ID → new inner vertex ID
for (size_t i = 0; i < body.num_vertices(); ++i) {
Point3D p_outer = body.vertex(static_cast<int>(i)).point;
const auto& v = body.vertex(static_cast<int>(i));
int vid = v.id;
Point3D p_outer = v.point;
Point3D p_inner = offset_vertex(body, static_cast<int>(i), -thickness);
outer_vid[i] = result.add_vertex(p_outer);
inner_vid[i] = result.add_vertex(p_inner);
outer_vid[vid] = result.add_vertex(p_outer);
inner_vid[vid] = result.add_vertex(p_inner);
}
std::vector<int> all_faces;