fix(integrate): sort boundary edges as pairs
Assisted-by: GLM 5.3 Flash
This commit is contained in:
+15
-3
@@ -114,13 +114,25 @@ func (m *TriangleMesh2D) BoundaryEdges() []int {
|
||||
count[key(b, c)]++
|
||||
count[key(c, a)]++
|
||||
}
|
||||
edges := make([]int, 0, 8)
|
||||
sets := make([][2]int, 0, len(count))
|
||||
for e, n := range count {
|
||||
if n == 1 {
|
||||
edges = append(edges, e[0], e[1])
|
||||
sets = append(sets, e)
|
||||
}
|
||||
}
|
||||
slices.Sort(edges)
|
||||
// The pairs sort as pairs, never as one flat index list: a flat sort
|
||||
// interleaves the endpoints of unrelated edges and hands back pairs
|
||||
// the mesh does not carry.
|
||||
slices.SortFunc(sets, func(x, y [2]int) int {
|
||||
if x[0] != y[0] {
|
||||
return x[0] - y[0]
|
||||
}
|
||||
return x[1] - y[1]
|
||||
})
|
||||
edges := make([]int, 0, 2*len(sets))
|
||||
for _, e := range sets {
|
||||
edges = append(edges, e[0], e[1])
|
||||
}
|
||||
return edges
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user