historyMarksTrade method

dynamic historyMarksTrade(
  1. dynamic x,
  2. dynamic y,
  3. dynamic w,
  4. dynamic h,
)

Implementation

historyMarksTrade(x, y, w, h) {
  var pathData = {};
  var linePath = [];
  var bsPath = [];
  var txtPath = [];
  var iconPath = [];
  //整理数据
  var pointkdata = [];
  if (chartData.tradeMarksData.isNotEmpty) {
    var historyData = Tools.deepCopy(chartData.tradeMarksData);
    var historyData2 = [];
    var historyData3 = [];
    var i = 0, il = historyData.length, j = 0;
    for (i = 0; i < il; i++) {
      var historyObj = historyData[i];
      if (historyObj['codeId'] != klineState.widget.propertys['codeId']) {
        continue;
      }

      for (j = kStartI; j < kStopI; j++) {
        if (Tools.isInKline(chartData.klineData[j]['time'],
            historyObj['time'], klineState.widget.propertys['interval'])) {
          historyObj['kIndex'] = j - kStartI; //记录所在k线索引
          historyObj['sorti'] = historyObj['kIndex'] +
              (historyObj['layout'] == "top" ? 1 : 2); //排序字段
          historyData2.add(historyObj);
          break;
        }
      }
    }
    historyData2.sort((a, b) {
      return a['sorti'].compareTo(b['sorti']);
    });
    il = historyData2.length;
    dynamic preKIndex = "";
    var curObj = {};
    for (i = 0; i < il; i++) {
      var historyObj2 = historyData2[i];
      var curKIndex = '${historyObj2['kIndex']}${historyObj2['layout']}';
      if (curKIndex != preKIndex) {
        preKIndex = curKIndex;
        //直接push
        curObj = historyObj2;
        curObj['tradeData'] = curObj['tradeData'] ?? [];
        historyData3.add(curObj);
      } else {
        //添加data数据
        curObj['data'] = curObj['data']! + historyObj2['data'];
        curObj['tradeData'] =
            curObj['tradeData']! + (historyObj2['tradeData'] ?? []);
      }
    }
    //只计算绘制点坐标,由外部html完成绘制
    pointkdata = pointKData(x, y, w, h, historyData3);
    hisTradeDataPoint = pointkdata;
    if (hisTradeDataPoint.isNotEmpty) {
      double iconSize = style['historyMarksStyle']['property']['iconSize'];
      double arrow = (iconSize / 5);
      for (i = 0; i < hisTradeDataPoint.length; i++) {
        var v = hisTradeDataPoint[i];
        if (v['layout'] == 'top') {
          //下箭头 sell
          //size包含了三角的区域
          v['size'] = {
            'x': v['px'] - iconSize / 2,
            'y': v['py'] - arrow - iconSize,
            'w': iconSize,
            'h': iconSize + arrow
          };

          bsPath.add({
            'stroke': {
              'color': style[ColorType['upColor']],
              'style': PaintingStyle.fill,
            },
            'linePath': [
              [
                "drawRect",
                [
                  v['size']['x'],
                  v['size']['y'],
                  iconSize,
                  iconSize,
                  iconSize / 4
                ]
              ],
              [
                "moveTo",
                [v['px'] - arrow, v['py'] - arrow-1]
              ],
              [
                "lineTo",
                [v['px'] + arrow, v['py'] - arrow-1]
              ],
              [
                "lineTo",
                [v['px'], v['py']]
              ],
              [
                "lineTo",
                [v['px'] - arrow, v['py'] - arrow-1]
              ],
            ],
            'txtPath': [
              [
                'S',
                v['size']['x'] + iconSize / 2,
                v['size']['y'] + iconSize / 2,
                {
                  'xlayout': 'center',
                  'ylayout': 'center',
                  'color': style['historyMarksStyle']['property']['bsColor']
                }
              ]
            ]
          });
        } else {
          //size包含了三角的区域
          v['size'] = {
            'x': v['px'] - iconSize / 2,
            'y': v['py'],
            'w': iconSize,
            'h': iconSize+ arrow
          };

          bsPath.add({
            'stroke': {
              'color': style[ColorType['downColor']],
              'style': PaintingStyle.fill,
            },
            'linePath': [
              [
                "drawRect",
                [
                  v['size']['x'],
                  v['size']['y']+ arrow,
                  iconSize,
                  iconSize,
                  iconSize / 4
                ]
              ],
              [
                "moveTo",
                [v['px'] - arrow, v['py'] + arrow + 1]
              ],
              [
                "lineTo",
                [v['px'] + arrow, v['py'] + arrow + 1]
              ],
              [
                "lineTo",
                [v['px'], v['py']]
              ],
              [
                "lineTo",
                [v['px'] - arrow, v['py'] + arrow + 1]
              ],
            ],
            'txtPath': [
              [
                'B',
                v['size']['x'] + iconSize / 2,
                v['size']['y'] + arrow + iconSize / 2,
                {
                  'xlayout': 'center',
                  'ylayout': 'center',
                  'color': style['historyMarksStyle']['property']['bsColor']
                }
              ]
            ]
          });
        }
        if (v['tip'] != '' && kMouseI == v['kDataI']) {
          dynamic totalPrice = 0;
          dynamic totalPiece = 0;
          for (int vvi = 0; vvi < v['data'].length; vvi++) {
            Map vv = v['data'][vvi];
            totalPrice += vv['price'] * vv['tradePiece'];
            totalPiece += vv['tradePiece'];
          }
          dynamic price = totalPrice / totalPiece;
          price = Tools.toFixed(
              price, klineState.widget.propertys['priceDigits']);
          v['avgPrice'] = price;
          v['totalNum'] = v['data'].length;
          if(klineState.widget.isWeb){
            v['tipList'] = ['${v['tip']} ${v['avgPrice']} (${v['totalNum']})'];
            v['tipLayout'] = 'tb';//固定上下布局tip
          }
        }else{
          if(klineState.widget.isWeb){
            v['tipList'] = [];
          }
        }
      }
    }
  } else {
    hisTradeDataPoint = [];
  }
  pathData = {
    'linePath': linePath,
    'bsPath': bsPath,
    'txtPath': txtPath,
    'iconPath': iconPath
  };
  return pathData;
}