Repro: build a box, activate Rectangle, click exactly on the MIDPOINT of a vertical silhouette edge of a side wall (the boundary between the visible wall and a back-facing face), then click the wall's bottom-front corner. Both snaps report correctly (midpoint / vertex), but no geometry is created.
Cause: the drawing plane is locked from event.hitFaceId at the first click. On a silhouette edge the raycast often hits no face, so the tool falls back to the ground plane — where both corners share an x and the rectangle is degenerate, so nothing is drawn and the user gets no feedback.
Expected (classic CAD): when the first point comes from a hard snap on an edge/vertex and no face was hit, infer the plane from the snapped geometry (an adjacent face of the snapped edge), or at least report that the rectangle was degenerate instead of silently dropping it.
Workaround used in tests/e2e-playwright/delete-edge-snap.spec.ts: approach the midpoint from a few cm inside the face so the raycast hits the wall, and let the 15 px snap radius pull the point onto the midpoint.
Repro: build a box, activate Rectangle, click exactly on the MIDPOINT of a vertical silhouette edge of a side wall (the boundary between the visible wall and a back-facing face), then click the wall's bottom-front corner. Both snaps report correctly (midpoint / vertex), but no geometry is created.
Cause: the drawing plane is locked from
event.hitFaceIdat the first click. On a silhouette edge the raycast often hits no face, so the tool falls back to the ground plane — where both corners share an x and the rectangle is degenerate, so nothing is drawn and the user gets no feedback.Expected (classic CAD): when the first point comes from a hard snap on an edge/vertex and no face was hit, infer the plane from the snapped geometry (an adjacent face of the snapped edge), or at least report that the rectangle was degenerate instead of silently dropping it.
Workaround used in
tests/e2e-playwright/delete-edge-snap.spec.ts: approach the midpoint from a few cm inside the face so the raycast hits the wall, and let the 15 px snap radius pull the point onto the midpoint.