historyMarksTrade method
dynamic
historyMarksTrade(
- dynamic x,
- dynamic y,
- dynamic w,
- 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;
}