ftZbPath method
dynamic
ftZbPath(
- dynamic x,
- dynamic fty,
- dynamic w,
- dynamic fth,
- 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;
}