private getChordTicksArcDescriptors()

in src/chordChart.ts [1021:1069]


  private getChordTicksArcDescriptors(): ChordArcDescriptor[] {
    let groups: ChordGroup[] = this.data.groups;

    let maxValue: number =
      (!lodashIsempty(groups) && lodashMax(lodashMap(groups, (x: ChordGroup) => x.value))) || 0;
    let minValue: number =
      (!lodashIsempty(groups) && lodashMax(lodashMap(groups, (x: ChordGroup) => x.value))) || 0;

    let radiusCoeff: number =
      (this.radius / Math.abs(maxValue - minValue)) * 1.25;

    let formatter: IValueFormatter = create({
      format: ChordChart.DefaultFormatValue,
      value: maxValue,
    });

    groups.forEach((x: ChordArcDescriptor) => {
      let k: number = (x.endAngle - x.startAngle) / x.value,
        absValue: number = Math.abs(x.value),
        rangeValue: number[] = range(
          0,
          absValue,
          absValue - 1 < 0.15 ? 0.15 : absValue - 1
        );

      if (x.value < 0) {
        rangeValue = rangeValue.map((x) => x * -1).reverse();
      }

      for (let i: number = 1; i < rangeValue.length; i++) {
        let gapSize: number = Math.abs(rangeValue[i] - rangeValue[i - 1]) * radiusCoeff;

        if (gapSize < ChordChart.TicksFontSize) {
          if (rangeValue.length > 2 && i === rangeValue.length - 1) {
            rangeValue.splice(--i, 1);
          } else {
            rangeValue.splice(i--, 1);
          }
        }
      }

      x.angleLabels = rangeValue.map(
        (v, i) =>
          <any>{ angle: v * k + x.startAngle, label: formatter.format(v) }
      );
    });

    return <ChordArcDescriptor[]>groups;
  }