fix(scene): greek text rect renders filled at the text's own color
Greek rects rendered through fill_tris went through the face3d 0.45
dim path; the pre-boost (color × 1/0.45) compensated only until clamp
hit at 1.0, leaving bright user colors washed out. The earlier outline
workaround dodged the dim but lost the filled box visual that AutoCAD
uses for "text lives here".
- face3d pipeline now skips the 0.45 dim when `wire.points` is
empty. PolyfaceMesh / PolygonMesh keep their dim (both points and
fill_tris populated); greek and MultiLeader background-fill emit
`points: vec![]` so they render at the literal color.
- All three greek paths (top-level, block-defn, MultiLeader) emit a
2-triangle filled rect instead of an outline / boosted fill.
- Greek rects are clamped to single-line height so 5-line MText
doesn't blow the box up to the full text-block height. MultiLeader
emits one rect per line — keeps the per-row visual hint.
- BatchEntry/StyleKey gain an `is_fill_only` discriminator so greek
batches never collide with regular wire batches; otherwise the
finalized WireModel could carry both points and fill_tris and
defeat the pipeline-side empty-points check.
Xref fade still applies to the resolved color via the existing
`fade_toward_bg` path, so xref greek stays faded as expected.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
1f1aa80f17
commit
ddd0a2de16
4 changed files with 173 additions and 107 deletions
|
|
@ -85,13 +85,22 @@ impl Face3DGpu {
|
|||
vertices.push(v(3));
|
||||
}
|
||||
|
||||
// PolyfaceMesh / PolygonMesh pre-triangulated fills.
|
||||
// PolyfaceMesh / PolygonMesh / unlit fills (text greek, MultiLeader
|
||||
// background). Wires whose `points` are empty carry pure 2-D fills
|
||||
// that should render at their literal color — applying the 0.45
|
||||
// AO-style dim to them would wash out user-picked colors. Wires
|
||||
// with both fill_tris and points (mesh edges + faces) keep the dim
|
||||
// so PolyfaceMesh / PolygonMesh still look 3-D-shaded.
|
||||
for wire in all_wires {
|
||||
if wire.fill_tris.is_empty() {
|
||||
continue;
|
||||
}
|
||||
let [r, g, b, a] = wire.color;
|
||||
let fill_color = [r * 0.45, g * 0.45, b * 0.45, a];
|
||||
let fill_color = if wire.points.is_empty() {
|
||||
[r, g, b, a]
|
||||
} else {
|
||||
[r * 0.45, g * 0.45, b * 0.45, a]
|
||||
};
|
||||
for &position in &wire.fill_tris {
|
||||
vertices.push(Face3DVertex {
|
||||
position,
|
||||
|
|
|
|||
Loading…
Reference in a new issue