2D-Massstab: dpi-Berechnung fälschlich mit devicePixelRatio multipliziert
CSS-Pixel sind laut Spezifikation physisch konstant 1/96 Zoll, unabhängig von devicePixelRatio (der beschreibt nur die Geräte-Pixel-Dichte hinter einem CSS-Pixel, relevant für Rasterungs-Schärfe, nicht für die physische Grösse). Die Papier-Massstab-Umrechnung in PlanView.tsx nahm bisher 96 * devicePixelRatio an und verfälschte dadurch den angezeigten wie gemessenen Massstab auf jedem Retina-/HiDPI-Bildschirm um genau den Faktor devicePixelRatio (per Lineal am Bildschirm nachgemessen). Betrifft nur die Bildschirmanzeige, nicht den PDF/DXF-Export (eigene Berechnung).
This commit is contained in:
+12
-6
@@ -78,13 +78,19 @@ function visibleEdgeRuns(scr: Vec2[], noStroke: number[]): Vec2[][] {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Papier-Massstab (docs/design/plans-output.md §3): Der Plan IST Papier-Space.
|
* Papier-Massstab (docs/design/plans-output.md §3): Der Plan IST Papier-Space.
|
||||||
* dpi = 96·devicePixelRatio (CSS definiert 1px = 1/96 inch). Strichstärken sind
|
* dpi = 96 (CSS definiert 1 CSS-px = 1/96 inch, UNABHÄNGIG von devicePixelRatio —
|
||||||
* in mm Papier definiert und werden über diese dpi in konstante Bildschirm-Pixel
|
* das gilt genauso auf Retina/HiDPI-Displays und bei OS-Skalierung, da der
|
||||||
* umgerechnet (zusammen mit vector-effect:non-scaling-stroke bleiben sie beim
|
* Browser CSS-px genau dafür physisch konstant hält, egal wie viele Geräte-px
|
||||||
* Zoomen papierkonstant). Live wird zusätzlich gelesen, falls sich der Monitor
|
* dahinterstecken). Strichstärken sind in mm Papier definiert und werden über
|
||||||
* (devicePixelRatio) ändert.
|
* diese dpi in konstante Bildschirm-Pixel umgerechnet (zusammen mit
|
||||||
|
* vector-effect:non-scaling-stroke bleiben sie beim Zoomen papierkonstant).
|
||||||
|
* BUGFIX: früher fälschlich `96 · devicePixelRatio` — das verwechselte die
|
||||||
|
* Geräte-px-Dichte (für Tessellierung/Rasterung relevant, siehe
|
||||||
|
* `pxPerMeterForView` weiter unten) mit der physischen CSS-px-Grösse und
|
||||||
|
* verdoppelte/halbierte den gemessenen Massstab auf jedem Retina-Bildschirm
|
||||||
|
* (per Lineal am Bildschirm nachgemessen falsch).
|
||||||
*/
|
*/
|
||||||
const dpi = (): number => 96 * (window.devicePixelRatio || 1);
|
const dpi = (): number => 96;
|
||||||
/** mm Papier → Bildschirm-Pixel (für non-scaling-stroke / dasharray). */
|
/** mm Papier → Bildschirm-Pixel (für non-scaling-stroke / dasharray). */
|
||||||
const mmToPx = (mm: number): number => (mm / 25.4) * dpi();
|
const mmToPx = (mm: number): number => (mm / 25.4) * dpi();
|
||||||
|
|
||||||
|
|||||||
@@ -108,8 +108,8 @@ const MONO_INK = "#111111";
|
|||||||
|
|
||||||
// ── Linienstärken in PAPIER-Millimeter (vgl. docs/design/plans-output.md §3.2) ──
|
// ── Linienstärken in PAPIER-Millimeter (vgl. docs/design/plans-output.md §3.2) ──
|
||||||
// Alle Stricharten sind in mm Papier definiert; die PlanView rechnet sie über
|
// Alle Stricharten sind in mm Papier definiert; die PlanView rechnet sie über
|
||||||
// dpi = 96·devicePixelRatio in konstante Bildschirm-Pixel um (non-scaling-stroke),
|
// dpi = 96 in konstante Bildschirm-Pixel um (non-scaling-stroke), damit Linien
|
||||||
// damit Linien beim Zoomen ihre Papiergröße behalten und der Massstab stimmt.
|
// beim Zoomen ihre Papiergröße behalten und der Massstab stimmt.
|
||||||
|
|
||||||
/** Default-Schichtfuge zwischen den Materialschichten in mm — Haarlinie (0.02),
|
/** Default-Schichtfuge zwischen den Materialschichten in mm — Haarlinie (0.02),
|
||||||
* gleiche Stärke wie die Schraffur-Tinte. Pro Fuge im Wandstil überschreibbar
|
* gleiche Stärke wie die Schraffur-Tinte. Pro Fuge im Wandstil überschreibbar
|
||||||
|
|||||||
Reference in New Issue
Block a user