DXF-Import: Platzierungsoption (relativ zu 0 ODER in Ansichtsmitte)

This commit is contained in:
2026-07-05 15:17:09 +02:00
parent 376aa67566
commit dd76ec89fd
5 changed files with 99 additions and 2 deletions
+36 -1
View File
@@ -36,6 +36,12 @@ export interface ImportDecision {
categoryMode: CategoryMode;
/** Ob die Meshes als Kontext-Geometrie übernommen werden. */
importMeshes: boolean;
/**
* Platzierung der importierten Geometrie: `origin` = 1:1 an den DXF-Koordinaten
* (relativ zum Nullpunkt); `viewCenter` = der Gesamt-Umriss wird in die Mitte
* des aktuellen Ausschnitts geschoben.
*/
placement: "origin" | "viewCenter";
/** Die geparsten Konturen-Sätze (für die spätere 2D-Konvertierung). */
parsed: DxfImportResult;
}
@@ -127,6 +133,7 @@ export function ImportDialog({
layers.length > 0 ? "byLayer" : "active",
);
const [importMeshes, setImportMeshes] = useState<boolean>(true);
const [placement, setPlacement] = useState<"origin" | "viewCenter">("origin");
const canImport =
!isDwg && !loading && (hasDrawings || (hasMeshes && importMeshes));
@@ -137,7 +144,7 @@ export function ImportDialog({
targetKind === "existing"
? ({ kind: "existing", levelId: existingLevelId } as const)
: ({ kind: "new", name: newName } as const);
onImport({ target, categoryMode, importMeshes, parsed });
onImport({ target, categoryMode, importMeshes, placement, parsed });
};
return (
@@ -295,6 +302,34 @@ export function ImportDialog({
</section>
)}
{/* Platzierung: an den DXF-Koordinaten (relativ zu 0) ODER in die
Mitte des aktuellen Ausschnitts geschoben. */}
{hasDrawings && (
<section className="imp-section">
<div className="imp-section-title">
{t("import.placement.heading")}
</div>
<label className="imp-radio">
<input
type="radio"
name="imp-place"
checked={placement === "origin"}
onChange={() => setPlacement("origin")}
/>
<span>{t("import.placement.origin")}</span>
</label>
<label className="imp-radio">
<input
type="radio"
name="imp-place"
checked={placement === "viewCenter"}
onChange={() => setPlacement("viewCenter")}
/>
<span>{t("import.placement.viewCenter")}</span>
</label>
</section>
)}
{/* Mesh-Behandlung. */}
{hasMeshes && (
<section className="imp-section">