diff options
| author | Ruben Beltran del Rio <jj@r.bdr.sh> | 2026-02-08 22:13:22 +0100 |
|---|---|---|
| committer | Ruben Beltran del Rio <jj@r.bdr.sh> | 2026-02-08 22:27:28 +0100 |
| commit | bc4115836358bad4d7a45f731ae7f500e0580ea4 (patch) | |
| tree | 72475c87a34ae8d36fc8e5a539fd36c743d5921d /Map | |
| parent | 48d57547429de856cd4e9c0d942bdd4cd40e523c (diff) | |
Diffstat (limited to 'Map')
| -rw-r--r-- | Map/Data/MapDocument.swift | 26 | ||||
| -rw-r--r-- | Map/Presentation/Complex Components/MapRender/MapRenderView.swift | 19 |
2 files changed, 44 insertions, 1 deletions
diff --git a/Map/Data/MapDocument.swift b/Map/Data/MapDocument.swift index df77abf..4d3350c 100644 --- a/Map/Data/MapDocument.swift +++ b/Map/Data/MapDocument.swift @@ -60,9 +60,33 @@ struct MapDocument: FileDocument { @MainActor func exportAsImage(withEvolution selectedEvolution: StageType) -> NSImage? { + let renderableMap = RenderableMap.from(self.parsed) + let mapSize = Dimensions.Map.size + let vertexSize = CGSize(width: 25.0, height: 25.0) + let useSmartLabels = UserDefaults.standard.bool(forKey: "useSmartLabelPositioning") + + var labelPositions: [Int: CGPoint] = [:] + if useSmartLabels { + let axisLines = [ + Line(start: CGPoint(x: 0, y: 0), end: CGPoint(x: 0, y: mapSize.height)), + Line( + start: CGPoint(x: 0, y: mapSize.height), + end: CGPoint(x: mapSize.width, y: mapSize.height)), + ] + for vertex in renderableMap.vertices { + labelPositions[vertex.id] = SmartLabelPositioning.calculateOptimalLabelPosition( + for: vertex, mapSize: mapSize, vertexSize: vertexSize, + edges: renderableMap.edges, opportunities: renderableMap.opportunities, + inertias: renderableMap.inertias, axisLines: axisLines, + allVertices: renderableMap.vertices, notes: renderableMap.notes) + } + } + let renderView = MapRenderView( parsedMap: self.parsed, - evolution: .constant(selectedEvolution)) + evolution: .constant(selectedEvolution), + precomputedMap: renderableMap, + precomputedLabelPositions: labelPositions) let renderer = ImageRenderer(content: renderView) return renderer.nsImage diff --git a/Map/Presentation/Complex Components/MapRender/MapRenderView.swift b/Map/Presentation/Complex Components/MapRender/MapRenderView.swift index e2e5004..3811e55 100644 --- a/Map/Presentation/Complex Components/MapRender/MapRenderView.swift +++ b/Map/Presentation/Complex Components/MapRender/MapRenderView.swift @@ -38,6 +38,25 @@ struct MapRenderView: View { @State private var smartLabelPositions: [Int: CGPoint] = [:] @State private var parseTask: Task<Void, Never>? + init( + parsedMap: WmapParser.Map, evolution: Binding<StageType>, + onDragVertex: @escaping (Vertex, CGFloat, CGFloat) -> Void = { _, _, _ in } + ) { + self.parsedMap = parsedMap + self._evolution = evolution + self.onDragVertex = onDragVertex + } + + init( + parsedMap: WmapParser.Map, evolution: Binding<StageType>, precomputedMap: RenderableMap, + precomputedLabelPositions: [Int: CGPoint] = [:] + ) { + self.parsedMap = parsedMap + self._evolution = evolution + self._renderableMap = State(initialValue: precomputedMap) + self._smartLabelPositions = State(initialValue: precomputedLabelPositions) + } + let mapSize = Dimensions.Map.size let padding = Dimensions.Map.padding |