Schnittebenen 2D↔3D Phase 1+2, native Fenster, Hell/Dunkel-Theme, SWISSIMAGE-Import

- Schnittebenen: 3D-Live-Schnitt folgt der gewählten Grundriss-Schnittlinie
  (section3dCutId/sectionPlaneFromLevel), Schalter "Im 3D schneiden" im
  Objekt-Info, Doppelklick auf Schnittlinie springt in 2D-Schnittansicht,
  unsichtbare Ebenen blenden ihre Führungslinie aus
- Eigene native Tauri-Fenster für Kontext-Import/Zeichnungsebenen/
  Ebenen-Einstellungen/Ressourcen/Einstellungen + klassische Menüleiste
  (AppMenuBar) neben der Wortmarke
- Hell/Dunkel-Umschalter (Einstellungen → Darstellung), persistiert,
  flackerfrei vor erstem Render gesetzt
- SWISSIMAGE-Luftbild-Import (swisstopo WMS) als Kontext-Hintergrundebene
- UI-Politur: Werkzeug-Panel Symbole/Liste umschaltbar, Topbar-Quick-Access-
  Icons entfernt, Zahnrad→Einstellungen in Panel-Köpfen, Footerbar/
  Snap-Marker/Maß-HUD auf helle Pillen-Sprache umgestellt
- Neues Dachziegel-Material (RoofingTiles013A)
This commit is contained in:
2026-07-20 10:51:37 +02:00
parent 0ab0361e3d
commit 68a0459d0e
90 changed files with 7730 additions and 1849 deletions
+92
View File
@@ -16,16 +16,25 @@ export const en: Record<TranslationKey, string> = {
"view3d.group": "3D view",
"view3d.front": "Front",
"view3d.front.hint": "Front view (frontal)",
"view3d.front.abbr": "F",
"view3d.back": "Back",
"view3d.back.hint": "Back view (rear)",
"view3d.back.abbr": "B",
"view3d.top": "Top",
"view3d.top.hint": "Top view (straight down)",
"view3d.top.abbr": "T",
"view3d.side": "Right",
"view3d.side.hint": "Right side view (90° to the front)",
"view3d.side.abbr": "R",
"view3d.left": "Left",
"view3d.left.hint": "Left side view (90° to the front, opposite Right)",
"view3d.left.abbr": "L",
"view3d.perspective": "Perspective",
"view3d.perspective.hint": "Free perspective (3/4 view)",
"topbar.views": "Views",
"topbar.views.menu": "Pick a view (Front/Back/Left/Right/Top)",
"topbar.axo": "Axonometric",
"topbar.axo.hint": "3D axonometric (free 3/4 view)",
"view3d.iso": "Isometric",
"view3d.iso.hint": "Isometric view (equiangular from front-top-right)",
"view3d.isoFrontLeft": "Front Left",
@@ -85,6 +94,7 @@ export const en: Record<TranslationKey, string> = {
"display.style.shaded": "Shaded",
"display.style.shadedEdges": "Shaded with edges",
"display.style.white": "White",
"display.style.contour": "Contours only",
"display.style.textured": "Textured",
"display.style.wireframe": "Wireframe",
"display.style.hidden": "Hidden line",
@@ -97,6 +107,40 @@ export const en: Record<TranslationKey, string> = {
"topbar.resources": "Resources",
"topbar.resources.hint": "Show/hide the resources window",
// Menu bar (Topbar, AppMenuBar).
"menu.edit": "Edit",
"menu.edit.undo": "Undo",
"menu.edit.redo": "Redo",
"menu.edit.delete": "Delete",
"menu.view": "View",
"menu.view.floorplan": "Floor plan",
"menu.view.perspective": "Perspective",
"menu.view.referenceLines": "Reference lines",
"menu.window": "Window",
"menu.window.resources": "Resources",
"menu.window.settings": "Settings",
"menu.window.drawingLevels": "Drawing Levels (Window)",
"menu.window.layerSettings": "Layer Settings (active layer)",
"menu.window.contextImport": "Import Location",
// Native macOS system menu bar (appMenu.ts) — separate namespace since it
// also shows File/Export/Transform, unlike the in-app AppMenuBar.
"menu.native.file": "File",
"menu.native.open": "Open…",
"menu.native.saveAs": "Save As…",
"menu.native.import": "Import…",
"menu.native.export": "Export",
"menu.native.exportSchedule": "Schedule (CSV)",
"menu.native.edit": "Edit",
"menu.native.move": "Move",
"menu.native.mirror": "Mirror",
"menu.native.rotate": "Rotate",
"menu.native.view": "View",
"menu.native.window": "Window",
"menu.native.panels": "Panels",
"menu.native.about": "About Dossier",
"menu.native.quit": "Quit",
// Layout menu.
"layout.title": "Workspace",
"layout.placeholder": "Workspace …",
@@ -147,6 +191,12 @@ export const en: Record<TranslationKey, string> = {
"ribbon.group.components": "Components",
"ribbon.group.sections": "Sections",
"ribbon.group.custom": "Custom bar",
"tools.view.label": "Display",
"tools.view.list": "List",
"tools.view.icons": "Icons",
"tools.cat.2d": "2D",
"tools.cat.3d": "3D",
"tools.cat.edit": "Modify",
"ribbon.custom.add": " Add",
"ribbon.custom.empty": "Pick elements via “+ Add”",
"ribbon.empty": "No tools in this tab yet",
@@ -291,6 +341,16 @@ export const en: Record<TranslationKey, string> = {
"objinfo.kind.extrudedSolid": "Extrusion",
"objinfo.kind.column": "Column",
"objinfo.kind.roof": "Roof",
"objinfo.kind.contextObject": "Context object",
// ── Context object attributes (object info panel) ───────────────────────
"objinfo.contextObject.section": "Georeferencing",
"objinfo.contextObject.type": "Type",
"objinfo.contextObject.type.importedMesh": "Imported mesh",
"objinfo.contextObject.type.terrainMesh": "Terrain",
"objinfo.contextObject.type.contourSet": "Contours",
"objinfo.contextObject.lv95E": "LV95 East (E)",
"objinfo.contextObject.lv95N": "LV95 North (N)",
"objinfo.contextObject.noAnchor": "No location reference in project",
// ── Roof attributes (object info panel) ─────────────────────────────────
"objinfo.roof.section": "Roof",
"objinfo.roof.shape": "Roof shape",
@@ -499,6 +559,9 @@ export const en: Record<TranslationKey, string> = {
"objinfo.stair.direction": "Run direction",
"objinfo.stair.direction.up": "Upwards",
"objinfo.stair.direction.down": "Downwards",
"objinfo.stair.arrow": "Arrow",
"objinfo.stair.arrow.line": "Open",
"objinfo.stair.arrow.filled": "Filled",
"objinfo.stair.refFloor": "Reference floor",
"objinfo.stair.bottom": "Bottom (UK)",
"objinfo.stair.top": "Top (OK)",
@@ -520,6 +583,7 @@ export const en: Record<TranslationKey, string> = {
"objinfo.sectionLine.kind.elevation": "Elevation",
"objinfo.sectionLine.name": "Name",
"objinfo.sectionLine.flip": "Flip view direction",
"objinfo.sectionLine.cut3d": "Cut in 3D",
"objinfo.sectionLine.startX": "Start X",
"objinfo.sectionLine.startY": "Start Y",
"objinfo.sectionLine.endX": "End X",
@@ -553,6 +617,8 @@ export const en: Record<TranslationKey, string> = {
"nav.show": "Show",
"nav.categoryVisible": "{name} visible",
"nav.categorySelect": "Make {name} the active layer (drawing target)",
"nav.categorySettings": "Layer settings for {name}",
"nav.drawingLevelsWindow": "Open drawing levels as its own window",
// Badges.
"badge.floor": "Floor",
@@ -567,6 +633,7 @@ export const en: Record<TranslationKey, string> = {
"display.active": "Active only",
"display.grey": "Others grey",
"display.grey_locked": "Others grey & locked",
"display.locked": "Others locked",
// Dock.
"dock.resize": "Adjust width",
@@ -687,6 +754,7 @@ export const en: Record<TranslationKey, string> = {
"resources.title": "Resources",
"resources.label": "Resource manager",
"resources.close": "Close",
"resources.loading": "Connecting to the main window…",
"resources.tab.components": "Components",
"resources.tab.hatches": "Hatches",
"resources.tab.lines": "Lines",
@@ -769,6 +837,8 @@ export const en: Record<TranslationKey, string> = {
"resources.field.frameWidth": "Frame width (m)",
"resources.field.insetFromFace": "Layer inset (m)",
"resources.field.insetFace": "Inset from face",
"resources.field.innerLayerRecess": "Reveal recess (innermost layer)",
"resources.field.innerLayerRecess.hint": "The innermost wall layer (usually plasterboard/wood lining) steps back all around this window's reveal by its own thickness, instead of finishing flush with the other layers — changes the 3D wall geometry, not just the frame position.",
"resources.field.transomHeight": "Transom height (m)",
"resources.field.mullionRows": "Transom rows",
"resources.frameKind.zarge": "Lining",
@@ -1134,9 +1204,15 @@ export const en: Record<TranslationKey, string> = {
"site.contourSet": "Contour set",
"site.empty": "No context loaded. Import a DXF file (contour lines or mesh).",
"site.delete": "Remove",
"site.deleteLayer": "Remove entire layer",
"site.group.imported": "Buildings",
"site.group.terrain": "Terrain",
"site.group.contours": "Contours",
"site.type.mesh": "Mesh",
"site.type.contours": "Contours",
"site.type.terrain": "Terrain",
"site.type.image": "Aerial",
"site.group.image": "Aerial imagery",
"site.dwgHint": "DWG? Convert it to DXF first with the free ODA File Converter.",
"site.terrainFailed": "No terrain could be generated (too few/collinear contour points).",
@@ -1242,6 +1318,9 @@ export const en: Record<TranslationKey, string> = {
"settings.title": "Settings",
"settings.section.workspace": "Workspace",
"settings.section.display": "Display",
"settings.theme": "Appearance",
"settings.theme.light": "Light",
"settings.theme.dark": "Dark",
"settings.marqueeColor": "Selection box color",
"settings.marqueeColor.hint":
"Color of the marquee selection box drawn while dragging a selection in the plan view.",
@@ -1269,8 +1348,10 @@ export const en: Record<TranslationKey, string> = {
"ctxImport.title": "Import location",
"ctxImport.close": "Close",
"ctxImport.geoAnchor": "Georeferenced from: {label}",
"ctxImport.geoAnchor.coords": "E {e} / N {n} / H {h}",
"ctxImport.geoAnchor.reset": "Reset",
"ctxImport.geoAnchor.reset.hint": "Clears the location reference — the next import sets it again.",
"ctxImport.rawHint": "Imported at its real LV95 coordinates (far from the origin). Then use \"New reference point\" to bring it to a convenient model point — the IFC/DXF export still writes the real coordinates.",
"ctxImport.location": "Place / address",
"ctxImport.searchPlaceholder": "e.g. Bundesplatz Bern",
"ctxImport.search": "Search",
@@ -1278,6 +1359,12 @@ export const en: Record<TranslationKey, string> = {
"ctxImport.noResults": "No matches.",
"ctxImport.searchError": "Search failed.",
"ctxImport.radius": "Radius",
"ctxImport.refPoint": "Reference point (model origin)",
"ctxImport.refPoint.e": "LV95 East (E)",
"ctxImport.refPoint.n": "LV95 North (N)",
"ctxImport.refPoint.h": "Elevation (m a.s.l.)",
"ctxImport.refPoint.hint": "Optional: real coordinate of the reference point (like ArchiCAD's survey point). East/North (LV95) set which model point maps to (0,0); the elevation (m a.s.l.) is anchored informationally and written as the site datum elevation on IFC export. Empty = the search centre becomes the origin.",
"ctxImport.refPoint.anchorLabel": "Reference point {e} / {n}",
"ctxImport.sources": "Sources",
"ctxImport.src.swissBuildings": "Swisstopo buildings",
"ctxImport.buildings.off": "Off",
@@ -1285,6 +1372,8 @@ export const en: Record<TranslationKey, string> = {
"ctxImport.buildings.v2": "Real 2.0 (stable)",
"ctxImport.buildings.v3": "Real 3.0 (Beta)",
"ctxImport.src.swissTerrain": "Swisstopo terrain",
"ctxImport.src.swissImage": "SWISSIMAGE aerial (2D backdrop)",
"ctxImport.src.swissImageDrape": "Drape aerial onto terrain (3D)",
"ctxImport.terrain.resolution": "Resolution",
"ctxImport.terrain.res2": "2 m (fast)",
"ctxImport.terrain.res05": "0.5 m (fine, larger tiles)",
@@ -1367,6 +1456,7 @@ export const en: Record<TranslationKey, string> = {
"viewport3d.section.label": "Section plane",
"viewport3d.section.show": "Section plane on",
"viewport3d.section.hide": "Section plane off",
"viewport3d.section.bound": "Clear 3D section (bound to section line)",
"viewport3d.grip.vertex": "Drag wall endpoint",
"viewport3d.grip.edge": "Drag edge",
"viewport3d.grip.height": "Drag height",
@@ -1384,6 +1474,8 @@ export const en: Record<TranslationKey, string> = {
"elements.kind.opening": "Opening",
"elements.kind.stair": "Stair",
"elements.kind.extrusion": "Extrusion",
"elements.kind.roof": "Roof",
"elements.kind.column": "Column",
// Views / view snapshots (DOSSIER A2).
"viewsnap.title": "Views",