fix: skip degenerate triangle for 3-corner Face3D

acadrust Face3D encodes triangles by setting fourth_corner == third_corner.
The fill builder was emitting a zero-area second triangle for these cases.
Now checks the p2==p3 distance and skips the second triangle.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
Hakan SevenandClaude Sonnet 4.6 committed 2026-04-28 21:57:38 +03:00
1 parent 298098e764
commit 517af91245
1 file changed
+11 -4
+11 -4
View File
@@ -69,14 +69,21 @@ impl Face3DGpu {
let p = &wire.key_vertices;
let v = |i: usize| Face3DVertex { position: p[i], color };
let dx = p[3][0] - p[2][0];
let dy = p[3][1] - p[2][1];
let dz = p[3][2] - p[2][2];
let is_triangle = dx * dx + dy * dy + dz * dz < 1e-10;
// Triangle 1: p0, p1, p2
vertices.push(v(0));
vertices.push(v(1));
vertices.push(v(2));
// Triangle 2: p0, p2, p3
vertices.push(v(0));
vertices.push(v(2));
vertices.push(v(3));
// Triangle 2 only for quads (triangles have p3 == p2).
if !is_triangle {
vertices.push(v(0));
vertices.push(v(2));
vertices.push(v(3));
}
}
let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {