From 4c4c9907af3e0c629ddbaa6c03a8cb564dd0d544 Mon Sep 17 00:00:00 2001 From: Karim Date: Sat, 11 Jul 2026 02:18:09 +0200 Subject: [PATCH] Schnitt/Ansicht-Feinschliff: Kantenfilter, Print-Toggle, echte Fenster in der Ansicht MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vier Nutzer-Punkte: 1. Editieren im Schnitt funktioniert (Klick auf die Poché wählt das Bauteil, headless verifiziert) — die Störung waren die Kanten GESCHNITTENER Bauteile: der Extraktor projizierte auch deren Restkörper (Deckel-/ Bodenkanten quer durch die eigene Poché). computeSection filtert sie jetzt; Ansichtskanten ungeschnittener Bauteile (Rückwand-Fenster etc.) bleiben. 2. Verdeckte Kanten (gestrichelt) sind Standard AUS — zuschaltbar je Ebene (DrawingLevel.hiddenLines, Checkbox in der Schnittlinien-Sektion). 3. Display/Print-Umschalter wirkt jetzt in ALLEN 2D-Darstellungen (Grundriss, Schnitt, Ansicht, Zeichnung) — war fälschlich auf den Grundriss begrenzt. 4. Fenster/Türen in der Ansicht als echtes Bauteil: Blendrahmen-Fläche → Flügelfelder (aus der Flügeltabelle, ungleiche Breiten/Pfosten) → Glas, Kämpfer/Oberlicht-Teilung, DIN-Öffnungssymbol (dezent gestrichelt, Dreh/Kipp/Drehkipp je Anschlag); Türen mit Rahmen + Blatt-Fläche. 737/737 grün; headless verifiziert (Schnitt A + Ansicht Süd). --- src/App.tsx | 12 ++- src/i18n/de.ts | 1 + src/i18n/en.ts | 1 + src/model/types.ts | 5 + src/panels/ObjectInfoPanel.tsx | 11 ++ src/plan/generatePlan.ts | 12 ++- src/plan/toElevation.ts | 190 +++++++++++++++++++++++++++++++-- src/plan/toSection.ts | 13 +++ 8 files changed, 229 insertions(+), 16 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index c42d840..5267954 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5212,7 +5212,10 @@ export default function App() { activeLayer={activeLayerName} lineMode={lineMode} onLineModeChange={setLineMode} - lineModeEnabled={planActive} + // Display/Print wirkt in ALLEN 2D-Darstellungen (Grundriss, Schnitt, + // Ansicht, Zeichnung — hairline fliesst überall hin); nur die + // 3D-Perspektive kennt keine Papier-Linienstärken. + lineModeEnabled={activeLevel.kind !== "floor" || viewType === "grundriss"} snap={snap} onSnapChange={setSnap} /> @@ -6841,8 +6844,11 @@ function SectionPlanView({ ); const sectionPlan = useMemo( - () => (!isElevation && output ? generateSectionPlan(output, mono) : null), - [isElevation, output, mono], + () => + !isElevation && output + ? generateSectionPlan(output, mono, { hiddenLines: level.hiddenLines }) + : null, + [isElevation, output, mono, level.hiddenLines], ); const plan = isElevation ? elevationPlan : sectionPlan; const effStatus = isElevation ? (elevationPlan ? "ready" : "empty") : status; diff --git a/src/i18n/de.ts b/src/i18n/de.ts index 342f660..67aab4b 100644 --- a/src/i18n/de.ts +++ b/src/i18n/de.ts @@ -515,6 +515,7 @@ export const de = { "objinfo.sectionLine.endX": "Ende X", "objinfo.sectionLine.endY": "Ende Y", "objinfo.sectionLine.depth": "Schnitt-Tiefe (m)", + "objinfo.sectionLine.hiddenLines": "Verdeckte Kanten", "objinfo.sectionLine.depthHint": "leer = unbegrenzt", "objinfo.sectionLine.delete": "Schnittlinie löschen", "objinfo.extrudedSolid.section": "Extrusion", diff --git a/src/i18n/en.ts b/src/i18n/en.ts index 0fe867c..06be379 100644 --- a/src/i18n/en.ts +++ b/src/i18n/en.ts @@ -512,6 +512,7 @@ export const en: Record = { "objinfo.sectionLine.endX": "End X", "objinfo.sectionLine.endY": "End Y", "objinfo.sectionLine.depth": "Section depth (m)", + "objinfo.sectionLine.hiddenLines": "Hidden lines", "objinfo.sectionLine.depthHint": "empty = unlimited", "objinfo.sectionLine.delete": "Delete section line", "objinfo.extrudedSolid.section": "Extrusion", diff --git a/src/model/types.ts b/src/model/types.ts index 8d8173b..2b92396 100644 --- a/src/model/types.ts +++ b/src/model/types.ts @@ -777,6 +777,11 @@ export interface DrawingLevel { * Verhalten). */ depth?: number; + /** + * Verdeckte Kanten im Schnitt zeichnen (gestrichelt). Default AUS — sie + * legen sich sonst als blasses Liniengewirr über Poché und Ansichtskanten. + */ + hiddenLines?: boolean; } /** diff --git a/src/panels/ObjectInfoPanel.tsx b/src/panels/ObjectInfoPanel.tsx index 0f6dd99..df8a7ad 100644 --- a/src/panels/ObjectInfoPanel.tsx +++ b/src/panels/ObjectInfoPanel.tsx @@ -420,6 +420,17 @@ export function SectionLineSection({ /> + {/* Verdeckte Kanten (gestrichelt) — Default aus (blasses Liniengewirr). */} +
+ {t("objinfo.sectionLine.hiddenLines")} + host.onSetSectionLinePatch({ hiddenLines: e.target.checked })} + title={t("objinfo.sectionLine.hiddenLines")} + /> +
+ {/* Löschen: linePoints zurücksetzen (die Ebene bleibt bestehen). */}