123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- //
- // LineChartDataSet.swift
- // Charts
- //
- // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda
- // A port of MPAndroidChart for iOS
- // Licensed under Apache License 2.0
- //
- // https://github.com/danielgindi/Charts
- //
- import Foundation
- import CoreGraphics
- open class LineChartDataSet: LineRadarChartDataSet, LineChartDataSetProtocol
- {
- @objc(LineChartMode)
- public enum Mode: Int
- {
- case linear
- case stepped
- case cubicBezier
- case horizontalBezier
- }
-
- private func initialize()
- {
- // default color
- circleColors.append(NSUIColor(red: 140.0/255.0, green: 234.0/255.0, blue: 255.0/255.0, alpha: 1.0))
- }
-
- public required init()
- {
- super.init()
- initialize()
- }
-
- public override init(entries: [ChartDataEntry], label: String)
- {
- super.init(entries: entries, label: label)
- initialize()
- }
-
- // MARK: - Data functions and accessors
-
- // MARK: - Styling functions and accessors
-
- /// The drawing mode for this line dataset
- ///
- /// **default**: Linear
- open var mode: Mode = Mode.linear
-
- private var _cubicIntensity = CGFloat(0.2)
-
- /// Intensity for cubic lines (min = 0.05, max = 1)
- ///
- /// **default**: 0.2
- open var cubicIntensity: CGFloat
- {
- get
- {
- return _cubicIntensity
- }
- set
- {
- _cubicIntensity = newValue.clamped(to: 0.05...1)
- }
- }
- open var isDrawLineWithGradientEnabled = false
- open var gradientPositions: [CGFloat]?
-
- /// The radius of the drawn circles.
- open var circleRadius = CGFloat(8.0)
-
- /// The hole radius of the drawn circles
- open var circleHoleRadius = CGFloat(4.0)
-
- open var circleColors = [NSUIColor]()
-
- /// - Returns: The color at the given index of the DataSet's circle-color array.
- /// Performs a IndexOutOfBounds check by modulus.
- open func getCircleColor(atIndex index: Int) -> NSUIColor?
- {
- let size = circleColors.count
- let index = index % size
- if index >= size
- {
- return nil
- }
- return circleColors[index]
- }
-
- /// Sets the one and ONLY color that should be used for this DataSet.
- /// Internally, this recreates the colors array and adds the specified color.
- open func setCircleColor(_ color: NSUIColor)
- {
- circleColors.removeAll(keepingCapacity: false)
- circleColors.append(color)
- }
-
- open func setCircleColors(_ colors: NSUIColor...)
- {
- circleColors.removeAll(keepingCapacity: false)
- circleColors.append(contentsOf: colors)
- }
-
- /// Resets the circle-colors array and creates a new one
- open func resetCircleColors(_ index: Int)
- {
- circleColors.removeAll(keepingCapacity: false)
- }
-
- /// If true, drawing circles is enabled
- open var drawCirclesEnabled = true
-
- /// `true` if drawing circles for this DataSet is enabled, `false` ifnot
- open var isDrawCirclesEnabled: Bool { return drawCirclesEnabled }
-
- /// The color of the inner circle (the circle-hole).
- open var circleHoleColor: NSUIColor? = NSUIColor.white
-
- /// `true` if drawing circles for this DataSet is enabled, `false` ifnot
- open var drawCircleHoleEnabled = true
-
- /// `true` if drawing the circle-holes is enabled, `false` ifnot.
- open var isDrawCircleHoleEnabled: Bool { return drawCircleHoleEnabled }
-
- /// This is how much (in pixels) into the dash pattern are we starting from.
- open var lineDashPhase = CGFloat(0.0)
-
- /// This is the actual dash pattern.
- /// I.e. [2, 3] will paint [-- -- ]
- /// [1, 3, 4, 2] will paint [- ---- - ---- ]
- open var lineDashLengths: [CGFloat]?
-
- /// Line cap type, default is CGLineCap.Butt
- open var lineCapType = CGLineCap.butt
-
- /// formatter for customizing the position of the fill-line
- private var _fillFormatter: FillFormatter = DefaultFillFormatter()
-
- /// Sets a custom FillFormatterProtocol to the chart that handles the position of the filled-line for each DataSet. Set this to null to use the default logic.
- open var fillFormatter: FillFormatter?
- {
- get
- {
- return _fillFormatter
- }
- set
- {
- _fillFormatter = newValue ?? DefaultFillFormatter()
- }
- }
-
- // MARK: NSCopying
-
- open override func copy(with zone: NSZone? = nil) -> Any
- {
- let copy = super.copy(with: zone) as! LineChartDataSet
- copy.circleColors = circleColors
- copy.circleHoleColor = circleHoleColor
- copy.circleRadius = circleRadius
- copy.circleHoleRadius = circleHoleRadius
- copy.cubicIntensity = cubicIntensity
- copy.lineDashPhase = lineDashPhase
- copy.lineDashLengths = lineDashLengths
- copy.lineCapType = lineCapType
- copy.drawCirclesEnabled = drawCirclesEnabled
- copy.drawCircleHoleEnabled = drawCircleHoleEnabled
- copy.mode = mode
- copy._fillFormatter = _fillFormatter
- return copy
- }
- }
|