kDraw method
dynamic
kDraw(
- dynamic x,
- dynamic y,
- dynamic w,
- dynamic h,
Implementation
kDraw(x, y, w, h) {
var pathData = {};
var linePath = [];
var axisPrice = [];
var axisTime = [];
var rangReact = [];
var crossPath = [];
for (var key in lineData.keys) {
var line = lineData[key];
for (var i = 0, il = line.length; i < il; i++) {
if (line[i]['p'].length > 0) {
var path = draw.draw(x, y, w, h, key, line[i],this);
linePath.add(path);
}
}
}
//==================刻度范围=================
if(selLineData != null && klineState.tapStatus != TapStatus.up){
var line = selLineData!;
double padding = 4;
double priceh = initYTxtH;
double timeh = initKXH;
double timew = 0;
double yw = initYW-20+padding*2;
double yh = padding + priceh + padding;
double reactRound = style['drawLineStyle']['property']['reactRound'];
var radio = [reactRound, reactRound, reactRound, reactRound]; //矩形圆角参数
var yp = '';
var pl = line['p'].length;
for(var i = 0,il = line['p'].length;i<il;i++){
//这个point要优化,否则三角也特殊处理,超过2个点的可能都需要特殊处理,目前只有一个三角
var point = {};
if(i == 0){
point = line['startPoint'];
}else if(i == 1 && il == 3){
point = line['secondPoint'];
}else if(i == il-1){
point = line['stopPoint'];
}
//三角特殊处理一下
if(line['lineType'] == "SJ" && i == 1){
point = line['secondPoint'];
}
var xTimeStr = Tools.intervalTimeFormat(line['p'][i]['xt'],klineState.widget.propertys['interval']);
var timeSize = Tools.getStrW(xTimeStr, style['drawLineStyle']['font']);
timew = timeSize['width'] + padding * 2;
//时间背景坐标和文案坐标
double px = point['x'] - timew / 2, tx = px + padding;
//y轴价格
yp = Tools.yToPrice( h, point['y'], kYMin, kScale, klineState.widget.propertys['priceDigits']);
var py = point['y'] - yh / 2;
if (point['y'] < yh / 2) {
//上对齐
py = 0;
} else if (point['y'] > y + h - yh / 2) {
//下对齐
py = y + h - yh;
}
var axisPathPrice = [];
var txtPathPrice = [];
axisPrice.add({
'axisPath':axisPathPrice,
'txtPath':txtPathPrice,
'py':py,
});
//y轴刻度背景矩形块
axisPathPrice.add([
"drawRect",
[x + w- (initYW-yw)/2 - yw, py, yw, yh, radio]
],);
//y轴刻度
txtPathPrice.add([
yp,
x + w - (initYW-yw)/2-yw+padding,
py + padding,
]);
var axisPathTime = [];
var txtPathTime = [];
axisTime.add({
'axisPath':axisPathTime,
'txtPath':txtPathTime,
'px':px,
});
//x轴刻度背景矩形块
axisPathTime.add([
"drawRect",
[px, y + h - timeh, timew, timeh,radio]
]
);
//x轴刻度
txtPathTime.add([
xTimeStr,
tx,
y + h - timeh / 2,
{'ylayout': 'center'}
]);
}
if(axisPrice.length>1){
axisPrice.sort((a, b) {
return a['py'].compareTo(b['py']);
});
axisTime.sort((a, b) {
return a['px'].compareTo(b['px']);
});
rangReact.add([
"drawRect",
[x + w- (initYW-yw)/2 - yw, axisPrice[0]['py']+reactRound, yw, axisPrice[axisPrice.length-1]['py']-axisPrice[0]['py']]
]);
rangReact.add([
"drawRect",
[axisTime[0]['px']+reactRound, y + h - timeh, axisTime[axisTime.length-1]['px']-axisTime[0]['px'], timeh]
]);
}
//十字线 横线 竖线 三角特殊处理一下
Map<String,dynamic>? lastPoint;//选中的点
if(line['point'] != null && line['point']>=0){
if(line['point'] == 0){
lastPoint = line['startPoint'];
}else if(line['point'] == 1 && pl == 3){
lastPoint = line['secondPoint'];
}else if(line['point'] == pl-1){
lastPoint = line['stopPoint'];
}
if(line['lineType'] == "SJ" && pl == 2){
lastPoint = line['secondPoint'];
}
}else if(klineState.mType == 2){
lastPoint = line['stopPoint'];
if(line['lineType'] == "SJ" && pl == 2){
lastPoint = line['secondPoint'];
}
}
if(lastPoint != null){
crossPath.addAll([
[
"moveTo",
[x, lastPoint['y']]
],
[
"lineTo",
[
x + w- (initYW-yw)/2 - yw,
lastPoint['y']
]
],
[
"moveTo",
[lastPoint['x'], y]
],
[
"lineTo",
[lastPoint['x'], y + h - timeh]
]
]);
//放大镜默认左边
klineState.magnifier = {
'left':style['magnifier']['left'],
'right':null,
'top':style['magnifier']['top'],
'dx':(lastPoint['x']-(style['magnifier']['left']+style['magnifier']['r']/2)),
'dy':(lastPoint['y']-(style['magnifier']['top']+style['magnifier']['r']/2)),
};
if(lastPoint['x']<(klineState.klineBox['width']!/2)){
//在y右边
klineState.magnifier['left'] = null;
klineState.magnifier['right'] = (initYW+ style['magnifier']['right']);
klineState.magnifier['dx'] = ((lastPoint['x']-(klineState.klineBox['width']!-(klineState.magnifier['right']+style['magnifier']['r']/2))));
}
}
}
pathData = {
'linePath': linePath,
'axisPrice': axisPrice,
'axisTime':axisTime,
'rangReact':rangReact,
'crossPath':crossPath,
};
return pathData;
}