forked from 1b-agent/opencadstudio-upstream
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:
1 parent
298098e764
commit
517af91245
1 file changed
+11
-4
@@ -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 {
|
||||
|
||||
Reference in new issue
Block a user