X-Git-Url: https://git.r.bdr.sh/rbdr/map/blobdiff_plain/5e8ff4850c4827125fe12788dd5b153c4f636f48..91fd86189477e6c690c6487d51d80bc58c8ecb63:/Map/MapRenderComponents/MapVertices.swift diff --git a/Map/MapRenderComponents/MapVertices.swift b/Map/MapRenderComponents/MapVertices.swift index 71f85be..24d49b8 100644 --- a/Map/MapRenderComponents/MapVertices.swift +++ b/Map/MapRenderComponents/MapVertices.swift @@ -15,12 +15,7 @@ struct MapVertices: View { var body: some View { ForEach(vertices, id: \.id) { vertex in - Path { path in - path.addEllipse( - in: CGRect( - origin: CGPoint(x: w(vertex.position.x), y: h(vertex.position.y)), size: vertexSize - )) - }.fill(color.foreground) + getVertexShape(vertex).fill(color.foreground) Text(vertex.label).foregroundColor(color.secondary).offset( CGSize( width: w(vertex.position.x) + vertexSize.width + padding, @@ -35,6 +30,52 @@ struct MapVertices: View { func w(_ dimension: CGFloat) -> CGFloat { max(0.0, min(mapSize.width, dimension * mapSize.width / 100.0)) } + + func getVertexShape(_ vertex: Vertex) -> Path { + switch vertex.shape { + case .circle: + return Path { path in + path.addEllipse( + in: CGRect( + origin: CGPoint(x: w(vertex.position.x), y: h(vertex.position.y)), size: vertexSize + )) + } + case .square: + return Path { path in + path.addRect( + CGRect( + x: w(vertex.position.x), y: h(vertex.position.y), width: vertexSize.width, + height: vertexSize.height + )) + } + case .triangle: + return Path { path in + path.move(to: CGPoint(x: w(vertex.position.x), y: h(vertex.position.y) + vertexSize.height)) + path.addLine( + to: CGPoint( + x: w(vertex.position.x) + vertexSize.width, y: h(vertex.position.y) + vertexSize.height) + ) + path.addLine( + to: CGPoint(x: w(vertex.position.x) + vertexSize.width / 2.0, y: h(vertex.position.y))) + path.addLine( + to: CGPoint(x: w(vertex.position.x), y: h(vertex.position.y) + vertexSize.height)) + path.closeSubpath() + } + case .x: + return Path { path in + path.move(to: CGPoint(x: w(vertex.position.x), y: h(vertex.position.y))) + path.addLine( + to: CGPoint( + x: w(vertex.position.x) + vertexSize.width, y: h(vertex.position.y) + vertexSize.height) + ) + path.closeSubpath() + path.move(to: CGPoint(x: w(vertex.position.x) + vertexSize.width, y: h(vertex.position.y))) + path.addLine( + to: CGPoint(x: w(vertex.position.x), y: h(vertex.position.y) + vertexSize.height)) + path.closeSubpath() + }.strokedPath(StrokeStyle(lineWidth: 5.0, lineCap: .butt)) + } + } } struct MapVertices_Previews: PreviewProvider {