1507c2bf00
ResourceManager.tsx, generatePlan.ts und toWalls3d.ts sind nach Bauteil- Domäne in src/ui/resourceManager/, src/plan/generatePlan/ und src/plan/toWalls3d/ aufgeteilt (reine Verschiebung, keine Verhaltens- änderung). App.tsx verliert weitere Handler-Gruppen an eigene Hooks (useExportHandlers, useImportHandling, useKeyboardShortcuts) sowie Hit-Testing an src/viewport/planHitTest.ts. Unbenutzte Rust-geometry-Crate (durch WASM-Joins abgelöst) sowie der alte OCCT/HLR-Schnitt-Spike (hlr.ts/occt.ts, vite occt-Aliases) entfernt. Neu: PDF-Import als Rasterbild (src/io/pdfImport.ts) + gemeinsamer Bild-Asset-Helfer (src/io/imageAsset.ts) für Plan- und Layout-Bilder. tsc -b sauber, vitest 891/891 grün.
97 lines
3.3 KiB
TypeScript
97 lines
3.3 KiB
TypeScript
// Bündelt die PDF-/DXF-Plan-Export-Handler (Papier-/Modell-Space-Export der
|
|
// aktuellen Grundriss-Ansicht) — die Schnellexporte (CSV/IFC/OBJ/STL) liegen
|
|
// bereits in useProjectFileActions(). Nur aus App.tsx herausgezogen, um die
|
|
// Funktion zu entlasten — reine Verlagerung, keine Verhaltensänderung.
|
|
//
|
|
// Extrahiert aus App.tsx. Bezeichner englisch, Kommentare deutsch (CONVENTIONS.md).
|
|
|
|
import { generatePlan } from "../plan/generatePlan";
|
|
import type { CategoryDisplayResolver } from "../plan/generatePlan";
|
|
import type { DetailLevel } from "../ui/TopBar";
|
|
import type { DisplayResolver } from "../viewport/Viewport3D";
|
|
import { savePlanPdf } from "../export/exportPdf";
|
|
import { savePlanDxf } from "../export/exportDxf";
|
|
import type { ExportPdfDecision } from "../ui/ExportPdfDialog";
|
|
import type { ExportDxfDecision } from "../ui/ExportDxfDialog";
|
|
import { projectToWorldCoords } from "../model/geoRebase";
|
|
import type { Project } from "../model/types";
|
|
|
|
export function useExportHandlers(opts: {
|
|
project: Project;
|
|
activeLevelId: string;
|
|
activeLevelName: string;
|
|
visibleCodes: Set<string>;
|
|
categoryDisplay: CategoryDisplayResolver & DisplayResolver;
|
|
detail: DetailLevel;
|
|
referenceLines: boolean;
|
|
planColorMode: "color" | "mono";
|
|
setExportOpen: (open: boolean) => void;
|
|
setExportDxfOpen: (open: boolean) => void;
|
|
}): {
|
|
onExportPdf: (decision: ExportPdfDecision) => Promise<void>;
|
|
onExportDxf: (decision: ExportDxfDecision) => void;
|
|
} {
|
|
const {
|
|
project,
|
|
activeLevelId,
|
|
activeLevelName,
|
|
visibleCodes,
|
|
categoryDisplay,
|
|
detail,
|
|
referenceLines,
|
|
planColorMode,
|
|
setExportOpen,
|
|
setExportDxfOpen,
|
|
} = opts;
|
|
|
|
const onExportPdf = async (decision: ExportPdfDecision) => {
|
|
const plan = generatePlan(
|
|
project,
|
|
activeLevelId,
|
|
visibleCodes,
|
|
categoryDisplay,
|
|
detail,
|
|
referenceLines,
|
|
planColorMode === "mono",
|
|
);
|
|
await savePlanPdf(plan, {
|
|
scaleDenominator: decision.scaleDenominator,
|
|
paper: decision.paper,
|
|
orientation: decision.orientation,
|
|
title: activeLevelName,
|
|
subtitle: project.name,
|
|
fileName: `${project.name}-${activeLevelName}`,
|
|
});
|
|
setExportOpen(false);
|
|
};
|
|
|
|
// DXF-Export: erzeugt den Plan mit EXAKT denselben Eingaben wie die Ansicht und
|
|
// schreibt ihn als Modell-Space-DXF in echten Metern (1:1). Layer aus den
|
|
// Kategorie-Ebenen; jede Entity auf ihrem Kategorie-Layer.
|
|
const onExportDxf = (decision: ExportDxfDecision) => {
|
|
// Georeferenziert exportieren: bei gesetztem Standort-Bezug (geoAnchor)
|
|
// schreibt der Modell-DXF die ECHTEN LV95-Koordinaten (weit vom Nullpunkt),
|
|
// damit die Datei in anderer CAD-Software lagerichtig ankommt — auch wenn
|
|
// lokal nahe (0,0) gezeichnet wurde. Ohne Bezug bleibt alles lokal.
|
|
// (Der Papier-/Layout-Export bleibt bewusst in lokalen Koordinaten.)
|
|
const exportProject = projectToWorldCoords(project);
|
|
const plan = generatePlan(
|
|
exportProject,
|
|
activeLevelId,
|
|
visibleCodes,
|
|
categoryDisplay,
|
|
detail,
|
|
referenceLines,
|
|
planColorMode === "mono",
|
|
);
|
|
savePlanDxf(plan, exportProject, {
|
|
title: activeLevelName,
|
|
includeHatches: decision.includeHatches,
|
|
fileName: `${project.name}-${activeLevelName}`,
|
|
});
|
|
setExportDxfOpen(false);
|
|
};
|
|
|
|
return { onExportPdf, onExportDxf };
|
|
}
|