ftZbPath method

dynamic ftZbPath(
  1. dynamic x,
  2. dynamic fty,
  3. dynamic w,
  4. dynamic fth,
  5. dynamic zb,
)

Implementation

ftZbPath(x, fty, w, fth, zb) {
  double margin = 4; //上下间距
  double y = fty+margin;//y坐标
  double h = fth-margin*2;//实际绘制高度
  var pathData = {};
  var linePath = []; //静态绘制线
  // var lastLinePath = []; //最新动态绘制线
  var txtPath = [];
  //绘制背景线
  double minPoint = kFtMm[zb]['min'], maxPoint = kFtMm[zb]['max'];
  double yScale = 0;
  int i = 0, il = 0, toFix = 0, j = 0, jj = 0;
  double px = 0, py = 0, leftW = 0;

  var ftPro = indicator.config[zb];
  var ftData = zbData[zb];
  //计算y轴缩放比
  if (maxPoint == minPoint) {
    yScale = h;
  } else {
    yScale = (maxPoint - minPoint) / h;
  }
  kElement['ft']![zb]['sc'] = yScale;

  //==================背景线===============
  var yValueAry = [];
  double y0 = Tools.priceToY(h, 0, minPoint, yScale);
  if (zb == Indicator['VOLUME']) {
    y+=margin;
    yValueAry = [0, (h / 2).round(), y0]; //如果是成交量 添加0值背景虚线 不添加最后一根线
  } else if (zb == Indicator['BBI']) {
    //如果是BBI指标 不添加0值背景线
    yValueAry = [0, (h / 2).round(), h];
  } else {
    yValueAry = [0, y0, (h / 2).round(), h];
  }
  //=================y轴=================
  if (isShowY) {
    //绘制y轴
    var vValueAry = [];
    //计算y轴刻度值
    if (zb == Indicator['VOLUME']) {
      toFix = 2;
      //设置y轴
      if (maxPoint > 9999) {
        vValueAry.addAll([
          Tools.bigNumWithStr(maxPoint, toFix),
          Tools.bigNumWithStr(maxPoint / 2, toFix),
          "0"
        ]);
      } else {
        toFix = 0;
        vValueAry.addAll([
          Tools.toFixed(maxPoint, toFix),
          Tools.toFixed((maxPoint) * 0.5, toFix),
          "0"
        ]);
      }
    } else {
      //设置y轴
      toFix = klineState.widget.propertys['priceDigits'];
      //从大到小
      vValueAry.add(Tools.toFixed(maxPoint, toFix));
      if (zb != Indicator['BBI']) {
        vValueAry.add(""); //0值不显示 用空串替换
      }
      vValueAry.add(Tools.toFixed((maxPoint + minPoint) * 0.5, toFix));
      vValueAry.add(Tools.toFixed(minPoint, toFix));
    }

    double padding = 10;
    double fzbystrx = x + w - padding;
    //y轴竖线
    var yLinePath = [
      // [
      //   "moveTo",
      //   [x + w, y]
      // ],
      // [
      //   "lineTo",
      //   [x + w, y + h]
      // ]
    ];
    linePath.add({
      'zb': zb,
      'stroke': {'style': PaintingStyle.stroke},
      'linePath': yLinePath,
    });
    //y轴文本
    i = 0;
    il = yValueAry.length;
    for (; i < il; i++) {
      if (i == 0) {
        txtPath.add([
          vValueAry[i],
          fzbystrx,
          y + yValueAry[i],
          {'xlayout': 'right'}
        ]);
      } else if (i == il - 1) {
        txtPath.add([
          vValueAry[i],
          fzbystrx,
          y + yValueAry[i],
          {'ylayout': 'bottom', 'xlayout': 'right'}
        ]);
      } else {
        txtPath.add([
          vValueAry[i],
          fzbystrx,
          y + yValueAry[i],
          {'ylayout': 'center', 'xlayout': 'right'}
        ]);
      }

      // yLinePath.addAll([
      //   [
      //     "moveTo",
      //     [x + w, y + yValueAry[i]]
      //   ],
      //   [
      //     "lineTo",
      //     [x + w + 5, y + yValueAry[i]]
      //   ]
      // ]);
    }
  }

  //=====================指标线====================
  //计算开始索引和结束索引
  var startIndex = kStartI - 1 < 0 ? kStartI : kStartI - 1;
  var stopIndex = kStopI + 1 > chartData.kDataL
      ? chartData.kDataL
      : kStopI + 1;
  if (startIndex == kStartI - 1) {
    leftW = kWG;
  } else {
    leftW = 0;
  }
  //设置指标配置属性和计算结果

  var fzbdrawx = x;
  num wlx = kW / 2;//kW % 2 == 0 ? kW / 2 : (kW / 2) as int;
  num lx = 0;
  if (zb == Indicator['VOLUME']) {
    //创建一条数据
    var upPath = [];
    var upLineData = {
      'zb': zb,
      'stroke': {
        'color': style[ColorType['upColor']],
        'style': PaintingStyle.fill
      },
      'linePath': upPath,
      'drawRect': kW > 1,
    };
    linePath.add(upLineData);
    //创建一条数据
    // var lastUpPath = [];
    // var lastUpLineData = {
    //   'zb': zb,
    //   'stroke': {
    //     'color': style[ColorType['upColor']],
    //     'style': PaintingStyle.fill
    //   },
    //   'linePath': lastUpPath,
    //   'drawRect': kW > 1,
    // };
    // lastLinePath.add(lastUpLineData);
    //创建一条数据
    var downPath = [];
    var downLineData = {
      'zb': zb,
      'stroke': {
        'color': style[ColorType['downColor']],
        'style': PaintingStyle.fill
      },
      'linePath': downPath,
      'drawRect': kW > 1,
    };
    linePath.add(downLineData);
    //创建一条数据
    // var lastDownPath = [];
    // var lastDownLineData = {
    //   'zb': zb,
    //   'stroke': {
    //     'color': style[ColorType['downColor']],
    //     'style': PaintingStyle.fill
    //   },
    //   'linePath': lastDownPath,
    //   'drawRect': kW > 1,
    // };
    // lastLinePath.add(lastDownLineData);
    //获取数据
    var cjl2 = ftData["VOL"];
    cjl2 = cjl2.sublist(startIndex, stopIndex);
    var cjl2l = cjl2.length;
    j = 0;
    jj = 0;

    for (; j < cjl2l; j++) {
      px = ((j + 1) * kWG + kStartX - kW - leftW);//.floor();
      py = Tools.priceToY(h, cjl2[j]['volume'], minPoint, yScale);
      var cjlh = Tools.max(1, h - py - 1.2);
      if (kW > 1) {
        if (cjl2[j]['close'] > cjl2[j]['open']) {
          // if (stopIndex == chartData.kDataL && j == cjl2l - 1) {
          //   //最后一根
          //   lastUpPath.add([
          //     "drawRect",
          //     [fzbdrawx + px, y + py, kW.floor(), cjlh]
          //   ]);
          // } else {
            upPath.add([
              "drawRect",
              [fzbdrawx + px, y + py, kW, cjlh]
            ]);
          // }
        } else {
          // if (stopIndex == chartData.kDataL && j == cjl2l - 1) {
          //   //最后一根
          //   lastDownPath.add([
          //     "drawRect",
          //     [fzbdrawx + px, y + py, kW.floor(), cjlh]
          //   ]);
          // } else {
            downPath.add([
              "drawRect",
              [fzbdrawx + px, y + py, kW, cjlh]
            ]);
          // }
        }
      } else {
        if (cjl2[j]['close'] > cjl2[j]['open']) {
          // if (stopIndex == chartData.kDataL && j == cjl2l - 1) {
          //   //最后一根
          //   lastUpPath.add([
          //     "moveTo",
          //     [fzbdrawx + px, y + py + cjlh]
          //   ]);
          //   lastUpPath.add([
          //     "lineTo",
          //     [fzbdrawx + px, y + py]
          //   ]);
          // } else {
            upPath.add([
              "moveTo",
              [fzbdrawx + px, y + py + cjlh]
            ]);
            upPath.add([
              "lineTo",
              [fzbdrawx + px, y + py]
            ]);
          // }
        } else {
          // if (stopIndex == chartData.kDataL && j == cjl2l - 1) {
          //   //最后一根
          //   lastDownPath.add([
          //     "moveTo",
          //     [fzbdrawx + px, y + py + cjlh]
          //   ]);
          //   lastDownPath.add([
          //     "lineTo",
          //     [fzbdrawx + px, y + py]
          //   ]);
          // } else {
            downPath.add([
              "moveTo",
              [fzbdrawx + px, y + py + cjlh]
            ]);
            downPath.add([
              "lineTo",
              [fzbdrawx + px, y + py]
            ]);
          // }
        }
      }
    }
    for (var cjlv in ftData.keys) {
      if (cjlv == "VOL") continue;
      //创建一条数据
      var path = [];
      linePath.add({
        'zb': zb,
        'stroke': {
          'color': ftPro['style'][cjlv]['color'],
          'strokeWidth': ftPro['style'][cjlv]['strokeWidth'],
        },
        'linePath': path,
      });
      //创建一条数据
      // var lastPath = [];
      // lastLinePath.add({
      //   'zb': zb,
      //   'stroke': {
      //     'color': ftPro['style'][cjlv]['color'],
      //     'strokeWidth': ftPro['style'][cjlv]['strokeWidth'],
      //   },
      //   'linePath': lastPath,
      // });
      //获取数据
      cjl2 = ftData[cjlv];
      cjl2 = cjl2.sublist(startIndex, stopIndex);
      var cjl2l2 = cjl2.length;
      j = 0;
      jj = 0;
      for (; j < cjl2l2; j++) {
        if (cjlv != "VOL") {
          if (!Tools.isNaN(cjl2[j])) {
            px = ((j + 1) * kWG + kStartX - kW - leftW);//.floor();
            py = Tools.priceToY(h, cjl2[j], minPoint, yScale); //成交量方向写死1
            // print('py ${py} ${py.runtimeType}');
            lx = wlx + px;
            if (jj == 0) {
              path.add([
                "moveTo",
                [fzbdrawx + lx, y + py]
              ]);
            } else {
              // if (stopIndex == chartData.kDataL && j == cjl2l2 - 1) {
              //   //最后一根
              //   lastPath.add(["moveTo", path[path.length - 1][1]]);
              //   lastPath.add([
              //     "lineTo",
              //     [fzbdrawx + lx, y + py]
              //   ]);
              // } else {
                path.add([
                  "lineTo",
                  [fzbdrawx + lx, y + py]
                ]);
              // }
            }
            jj++;
          }
        }
      }
    }
  } else if (zb == Indicator['MACD']) {
    for (var macdv in ftData.keys) {
      //获取数据
      var macd2 = ftData[macdv];
      macd2 = macd2.sublist(startIndex, stopIndex);
      var macd2l = macd2.length;
      if (macdv != "MACD") {
        //创建一条数据
        var path = [];
        linePath.add({
          'zb': zb,
          'stroke': {
            'color': ftPro['style'][macdv]['color'],
            'strokeWidth': ftPro['style'][macdv]['strokeWidth'],
          },
          'linePath': path,
        });
        //创建一条数据
        // var lastPath = [];
        // lastLinePath.add({
        //   'zb': zb,
        //   'stroke': {
        //     'color': ftPro['style'][macdv]['color'],
        //     'strokeWidth': ftPro['style'][macdv]['strokeWidth'],
        //   },
        //   'linePath': lastPath,
        // });
        j = 0;
        jj = 0;
        for (; j < macd2l; j++) {
          if (!Tools.isNaN(macd2[j])) {
            px = ((j + 1) * kWG + kStartX - kW - leftW);//.floor();
            py = Tools.priceToY(h, macd2[j], minPoint, yScale);
            lx = wlx + px;
            if (jj == 0) {
              path.add([
                "moveTo",
                [fzbdrawx + lx, y + py]
              ]);
            } else {
              // if (stopIndex == chartData.kDataL && j == macd2l - 1) {
              //   //最后一根
              //   lastPath.add(["moveTo", path[path.length - 1][1]]);
              //   lastPath.add([
              //     "lineTo",
              //     [fzbdrawx + lx, y + py]
              //   ]);
              // } else {
                path.add([
                  "lineTo",
                  [fzbdrawx + lx, y + py]
                ]);
              // }
            }
            jj++;
          }
        }
      } else {
        //创建一条数据
        var upPath = [];
        var upLineData = {
          'zb': zb,
          'stroke': {
            'color': style[ColorType['upColor']],
            'strokeWidth': ftPro['style'][macdv]['strokeWidth'],
          },
          'linePath': upPath,
        };
        linePath.add(upLineData);
        //创建一条数据
        // var lastUpPath = [];
        // var lastUpLineData = {
        //   'zb': zb,
        //   'stroke': {
        //     'color': style[ColorType['upColor']],
        //     'strokeWidth': ftPro['style'][macdv]['strokeWidth'],
        //   },
        //   'linePath': lastUpPath,
        // };
        // lastLinePath.add(lastUpLineData);
        //创建一条数据
        var downPath = [];
        var downLineData = {
          'zb': zb,
          'stroke': {
            'color': style[ColorType['downColor']],
            'strokeWidth': ftPro['style'][macdv]['strokeWidth'],
          },
          'linePath': downPath,
        };
        linePath.add(downLineData);
        //创建一条数据
        // var lastDownPath = [];
        // var lastDownLineData = {
        //   'zb': zb,
        //   'stroke': {
        //     'color': style[ColorType['downColor']],
        //     'strokeWidth': ftPro['style'][macdv]['strokeWidth'],
        //   },
        //   'linePath': lastDownPath,
        // };
        // lastLinePath.add(lastDownLineData);

        j = 0;
        jj = 0;
        for (; j < macd2l; j++) {
          px = ((j + 1) * kWG + kStartX - kW - leftW);//.floor();
          py = Tools.priceToY(h, macd2[j], minPoint, yScale);
          lx = wlx + px;
          if (macd2[j] > 0) {
            // if (stopIndex == chartData.kDataL && j == macd2l - 1) {
            //   //最后一根
            //   lastUpPath.addAll([
            //     [
            //       "moveTo",
            //       [fzbdrawx + lx, y + Tools.priceToY(h, 0, minPoint, yScale)]
            //     ],
            //     [
            //       "lineTo",
            //       [fzbdrawx + lx, y + py]
            //     ]
            //   ]);
            // } else {
              upPath.addAll([
                [
                  "moveTo",
                  [fzbdrawx + lx, y + Tools.priceToY(h, 0, minPoint, yScale)]
                ],
                [
                  "lineTo",
                  [fzbdrawx + lx, y + py]
                ]
              ]);
            // }
          } else {
            // if (stopIndex == chartData.kDataL && j == macd2l - 1) {
            //   //最后一根
            //   lastDownPath.addAll([
            //     [
            //       "moveTo",
            //       [fzbdrawx + lx, y + Tools.priceToY(h, 0, minPoint, yScale)]
            //     ],
            //     [
            //       "lineTo",
            //       [fzbdrawx + lx, y + py]
            //     ]
            //   ]);
            // } else {
              downPath.addAll([
                [
                  "moveTo",
                  [fzbdrawx + lx, y + Tools.priceToY(h, 0, minPoint, yScale)]
                ],
                [
                  "lineTo",
                  [fzbdrawx + lx, y + py]
                ]
              ]);
            // }
          }
        }
      }
    }
  } else {
    for (var dv in ftData.keys) {
      //创建一条数据
      var path = [];
      linePath.add({
        'zb': zb,
        'stroke': {
          'color': ftPro['style'][dv]['color'],
          'strokeWidth': ftPro['style'][dv]['strokeWidth'],
        },
        'linePath': path,
      });
      //创建一条数据
      // var lastPath = [];
      // lastLinePath.add({
      //   'zb': zb,
      //   'stroke': {
      //     'color': ftPro['style'][dv]['color'],
      //     'strokeWidth': ftPro['style'][dv]['strokeWidth'],
      //   },
      //   'linePath': lastPath,
      // });
      //获取数据
      var d2 = ftData[dv];
      d2 = d2.sublist(startIndex, stopIndex);
      var d2l = d2.length;
      j = 0;
      jj = 0;
      for (; j < d2l; j++) {
        if (!Tools.isNaN(d2[j])) {
          px = ((j + 1) * kWG + kStartX - kW - leftW);//.floor();
          py = Tools.priceToY(h, d2[j], minPoint, yScale);
          lx = wlx + px;
          if (jj == 0) {
            path.add([
              "moveTo",
              [fzbdrawx + lx, y + py]
            ]);
          } else {
            // if (stopIndex == chartData.kDataL && j == d2l - 1) {
            //   //最后一根
            //   lastPath.add(["moveTo", path[path.length - 1][1]]);
            //   lastPath.add([
            //     "lineTo",
            //     [fzbdrawx + lx, y + py]
            //   ]);
            // } else {
              path.add([
                "lineTo",
                [fzbdrawx + lx, y + py]
              ]);
            // }
          }
          jj++;
        }
      }
    }
  }

  // var bottomLinePath = [
  //   [
  //     "moveTo",
  //     [x, y + h-1]
  //   ],
  //   [
  //     "lineTo",
  //     [x + w, y + h-1]
  //   ]
  // ];
  // linePath.add({
  //   'zb': zb,
  //   'stroke': {'style': PaintingStyle.stroke},
  //   'linePath': bottomLinePath,
  // });
  //
  pathData = {
    'linePath': linePath,
    // 'lastLinePath': lastLinePath,
    'txtPath': txtPath
  };
  return pathData;
}