Compare commits

..

2 Commits

Author SHA1 Message Date
Samu Andras 00342601bf feat: add new axis interface 2022-10-17 19:42:22 +02:00
Samu Andras b48b701657 feat: new protocol for chained functions, and added support for explicit Y ranges. X coming as well 2022-09-29 19:05:28 +02:00
10 changed files with 35 additions and 21 deletions
@@ -41,11 +41,19 @@ public class ChartData: ObservableObject {
}
var normalisedYRange: Double {
return rangeY == nil ? (normalisedPoints.max() ?? 0.0) - (normalisedPoints.min() ?? 0.0) : 1
if let _ = rangeY {
return 1
}
return (normalisedPoints.max() ?? 0.0) - (normalisedPoints.min() ?? 0.0)
}
var normalisedXRange: Double {
return rangeX == nil ? (normalisedValues.max() ?? 0.0) - (normalisedValues.min() ?? 0.0) : 1
if let _ = rangeX {
return 1
}
return (normalisedValues.max() ?? 0.0) - (normalisedValues.min() ?? 0.0)
}
var isInNegativeDomain: Bool {
@@ -201,7 +201,7 @@ extension Path {
let convertedXValues = data.map { CGFloat($0.0) * rect.width }
let convertedYPoints = data.map { CGFloat($0.1) * rect.height }
path.move(to: CGPoint(x: convertedXValues[0], y: 0))
path.move(to: .zero)
var point1 = CGPoint(x: convertedXValues[0], y: convertedYPoints[0])
path.addLine(to: point1)
for pointIndex in 1..<data.count {
@@ -8,10 +8,4 @@ extension View {
public func chartStyle(_ style: ChartStyle) -> some View {
self.environmentObject(style)
}
public func toStandardCoordinateSystem() -> some View {
self
.rotationEffect(.degrees(180), anchor: .center)
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
}
}
@@ -17,11 +17,13 @@ struct ChartGridShape_Previews: PreviewProvider {
Group {
ChartGridShape(numberOfHorizontalLines: 5, numberOfVerticalLines: 0)
.stroke()
.toStandardCoordinateSystem()
.rotationEffect(.degrees(180), anchor: .center)
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
ChartGridShape(numberOfHorizontalLines: 4, numberOfVerticalLines: 4)
.stroke()
.toStandardCoordinateSystem()
.rotationEffect(.degrees(180), anchor: .center)
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
}
.padding()
}
@@ -43,7 +43,8 @@ public struct Line: View {
IndicatorPoint()
.position(self.getClosestPointOnPath(geometry: geometry,
touchLocation: self.touchLocation))
.toStandardCoordinateSystem()
.rotationEffect(.degrees(180), anchor: .center)
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
}
}
.onAppear {
@@ -14,12 +14,14 @@ struct LineBackgroundShape_Previews: PreviewProvider {
GeometryReader { geometry in
LineBackgroundShape(data: [(0, -0.5), (0.25, 0.8), (0.5,-0.6), (0.75,0.6), (1, 1)])
.fill(Color.red)
.toStandardCoordinateSystem()
.rotationEffect(.degrees(180), anchor: .center)
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
}
GeometryReader { geometry in
LineBackgroundShape(data: [(0, 0), (0.25, 0.5), (0.5,0.8), (0.75, 0.6), (1, 1)])
.fill(Color.blue)
.toStandardCoordinateSystem()
.rotationEffect(.degrees(180), anchor: .center)
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
}
}
}
@@ -11,6 +11,7 @@ struct LineBackgroundShapeView: View {
backgroundColor.endColor]),
startPoint: .bottom,
endPoint: .top))
.toStandardCoordinateSystem()
.rotationEffect(.degrees(180), anchor: .center)
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
}
}
@@ -20,11 +20,13 @@ struct LineShape_Previews: PreviewProvider {
Group {
LineShape(data: [(0, 0), (0.25, 0.5), (0.5,0.8), (0.75, 0.6), (1, 1)])
.stroke()
.toStandardCoordinateSystem()
.rotationEffect(.degrees(180), anchor: .center)
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
LineShape(data: [(0, -0.5), (0.25, 0.8), (0.5,-0.6), (0.75,0.6), (1, 1)], lineStyle: .straight)
.stroke()
.toStandardCoordinateSystem()
.rotationEffect(.degrees(180), anchor: .center)
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
}
}
}
@@ -31,7 +31,8 @@ struct LineShapeView: View, Animatable {
startPoint: .leading,
endPoint: .trailing),
style: StrokeStyle(lineWidth: chartProperties.lineWidth, lineJoin: .round))
.toStandardCoordinateSystem()
.rotationEffect(.degrees(180), anchor: .center)
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
.clipped()
if chartProperties.showChartMarks {
MarkerShape(data: chartData.normalisedData)
@@ -39,7 +40,8 @@ struct LineShapeView: View, Animatable {
.fill(.white,
strokeBorder: chartMarkColor,
lineWidth: chartProperties.lineWidth)
.toStandardCoordinateSystem()
.rotationEffect(.degrees(180), anchor: .center)
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
}
}
}
@@ -13,11 +13,13 @@ struct MarkerShape_Previews: PreviewProvider {
Group {
MarkerShape(data: [(0, 0), (0.25, 0.5), (0.5,0.8), (0.75, 0.6), (1, 1)])
.stroke()
.toStandardCoordinateSystem()
.rotationEffect(.degrees(180), anchor: .center)
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
MarkerShape(data: [(0, -0.5), (0.25, 0.8), (0.5,-0.6), (0.75,0.6), (1, 1)])
.stroke()
.toStandardCoordinateSystem()
.rotationEffect(.degrees(180), anchor: .center)
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
}
}
}