forked from 1b-agent/opencadstudio-upstream
fix(scene): rescale dash pattern when projecting wires to paper space
`viewport_content_wires` cloned model-space tessellations and overwrote `points` with paper-space projections (× scale) but left `pattern_length` and `pattern` at their model-coord values (pre-multiplied by PSLTSCALE's 1/vp_scale). The GPU then compared a paper-coord distance against a model-coord pattern, so dashed linetypes in viewport content collapsed to solid (a typical 9 mm paper line fell inside the first 180 mm dash). Multiply the projected wire's pattern by the same vp scale used for the points. Works for both PSLTSCALE on (paper-uniform dashes) and off (dashes shrink with viewport scale). Adds two diagnostic examples used to track this down: - inspect_lt: which layers/entities carry dashed linetypes - inspect_block: enumerate entities + linetypes inside a named block
This commit is contained in:
1 parent
66243e53ca
commit
a73dffdd76
3 files changed
+250
No files matched your search
@@ -1987,6 +1987,12 @@ impl Scene {
|
||||
out.points = clipped;
|
||||
out.color = [r * 0.80, g * 0.80, b * 0.80, a * 0.85];
|
||||
out.line_weight_px = wire.line_weight_px;
|
||||
// Wire's pattern was sized for model-space coords during
|
||||
// tessellation; we just projected points into paper coords
|
||||
// (× scale), so rescale the dash pattern by the same factor
|
||||
// to keep dimensional consistency in the GPU shader.
|
||||
out.pattern_length = wire.pattern_length * scale;
|
||||
out.pattern = wire.pattern.map(|v| v * scale);
|
||||
out.vp_scissor = Some([vp_x0, vp_y0, vp_x1, vp_y1]);
|
||||
projected.push(out);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user