hqchart 1.1.14313 → 1.1.14330

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -35854,6 +35854,313 @@ function ChartSimplePie()
35854
35854
  }
35855
35855
  }
35856
35856
 
35857
+
35858
+ //雷达图
35859
+ function ChartSimpleRadar()
35860
+ {
35861
+ this.newMethod=IChartPainting; //派生
35862
+ this.newMethod();
35863
+ delete this.newMethod;
35864
+
35865
+ this.ClassName='ChartSimpleRadar'; //类名
35866
+
35867
+ this.AreaColor='rgba(242,154,118,0.4)'; //
35868
+ this.AreaLineColor='rgb(242,154,118)';
35869
+
35870
+ this.TitleColor=g_JSChartResource.ChartSimpleRadar.TextColor;
35871
+ this.TextFontConfig=CloneData(g_JSChartResource.ChartSimpleRadar.TextFont);
35872
+ this.Offset=CloneData(g_JSChartResource.ChartSimpleRadar.Offset);
35873
+ this.BorderColor=g_JSChartResource.ChartSimpleRadar.BorderColor;
35874
+ this.AryBGColor=g_JSChartResource.ChartSimpleRadar.AryBGColor.slice();//背景色
35875
+ this.AryAreaConfig=g_JSChartResource.ChartSimpleRadar.AryArea.slice(); //面积图颜色
35876
+
35877
+ this.StartAngle=270;
35878
+ this.Radius=50;
35879
+ this.AryBorder=[1, 0.75, 0.5, 0.25];
35880
+ this.AryIndex; //指标{ Name:, Max:100, Min:0 },
35881
+
35882
+ this.CenterPoint={};
35883
+ this.RectClient={ };
35884
+ this.AryIndexCache=[];
35885
+ this.MapDataCache=new Map(); //key=name value={ Data:[] }
35886
+ this.TextFont;
35887
+
35888
+
35889
+ this.ReloadResource=function(resource)
35890
+ {
35891
+ this.TitleColor=g_JSChartResource.ChartSimpleRadar.TextColor;
35892
+ this.TextFontConfig=CloneData(g_JSChartResource.ChartSimpleRadar.TextFont);
35893
+ this.Offset=CloneData(g_JSChartResource.ChartSimpleRadar.Offset);
35894
+ this.BorderColor=g_JSChartResource.ChartSimpleRadar.BorderColor;
35895
+ this.AryBGColor=g_JSChartResource.ChartSimpleRadar.AryBGColor.slice();//背景色
35896
+ this.AryAreaConfig=g_JSChartResource.ChartSimpleRadar.AryArea.slice(); //面积图颜色
35897
+ }
35898
+
35899
+ this.DrawBorder=function() //画边框
35900
+ {
35901
+ this.Canvas.strokeStyle = this.BorderColor;
35902
+ this.Canvas.font=this.TextFont;
35903
+ for(var i=0;i<this.AryBorder.length;++i)
35904
+ {
35905
+ var rate = this.AryBorder[i];
35906
+ var radius=this.RectClient.Radius*rate;
35907
+ var bFirstDraw=true;
35908
+ for(var j=0;j<this.AryIndexCache.length;++j)
35909
+ {
35910
+ var item=this.AryIndexCache[j];
35911
+ var x = this.CenterPoint.X + radius * Math.cos(item.Angle * Math.PI / 180);
35912
+ var y = this.CenterPoint.Y + radius * Math.sin(item.Angle * Math.PI / 180);
35913
+ if (bFirstDraw)
35914
+ {
35915
+ this.Canvas.beginPath();
35916
+ this.Canvas.moveTo(x,y);
35917
+ bFirstDraw=false;
35918
+ }
35919
+ else
35920
+ {
35921
+ this.Canvas.lineTo(x,y);
35922
+ }
35923
+ }
35924
+
35925
+ this.Canvas.closePath();
35926
+ this.Canvas.stroke();
35927
+
35928
+ if (IFrameSplitOperator.IsNonEmptyArray(this.AryBGColor))
35929
+ {
35930
+ this.Canvas.fillStyle = this.AryBGColor[i%this.AryBGColor.length];
35931
+ this.Canvas.fill();
35932
+ }
35933
+ }
35934
+
35935
+ this.Canvas.beginPath();
35936
+ for(var i=0;i<this.AryIndexCache.length;++i)
35937
+ {
35938
+ var item=this.AryIndexCache[i];
35939
+ var x = this.CenterPoint.X + item.Radius * Math.cos(item.Angle * Math.PI / 180);
35940
+ var y = this.CenterPoint.Y + item.Radius * Math.sin(item.Angle * Math.PI / 180);
35941
+ this.Canvas.moveTo(this.CenterPoint.X,this.CenterPoint.Y);
35942
+ this.Canvas.lineTo(x,y);
35943
+ this.DrawText(item, x, y);
35944
+ }
35945
+ this.Canvas.stroke();
35946
+
35947
+ }
35948
+
35949
+ this.GetRadarRate=function(indexItem, value)
35950
+ {
35951
+ var range={ Max:100, Min:0 };
35952
+ if (IFrameSplitOperator.IsNumber(indexItem.Max)) range.Max=indexItem.Max;
35953
+ if (IFrameSplitOperator.IsNumber(indexItem.Min)) range.Min=indexItem.Min;
35954
+
35955
+ if (value>range.Max) value=range.Max;
35956
+ else if (value<range.Min) value=range.Min;
35957
+
35958
+ return (value-range.Min)/(range.Max-range.Min);
35959
+ }
35960
+
35961
+ this.DrawArea=function()
35962
+ {
35963
+ if (this.MapDataCache.size<=0) return;
35964
+
35965
+ var index=0;
35966
+ for(var mapItem of this.MapDataCache)
35967
+ {
35968
+ var mapData=mapItem[1].MapData;
35969
+
35970
+ var bFirstDraw=true;
35971
+ var pointCount=0;
35972
+ for(var i=0;i<this.AryIndexCache.length;++i)
35973
+ {
35974
+ var indexItem=this.AryIndexCache[i];
35975
+ if (!indexItem.Data || !indexItem.Data.Name) continue;
35976
+ if (!mapData.has(indexItem.Data.Name)) continue;
35977
+ var item=mapData.get(indexItem.Data.Name);
35978
+ if (!item.Data && !IFrameSplitOperator.IsNumber(item.Data.Value)) conintue;
35979
+
35980
+ var widthRate=this.GetRadarRate(indexItem, item.Data.Value);
35981
+ var x = this.CenterPoint.X+indexItem.Radius*widthRate*Math.cos(indexItem.Angle * Math.PI / 180);
35982
+ var y = this.CenterPoint.Y+indexItem.Radius*widthRate*Math.sin(indexItem.Angle * Math.PI / 180);
35983
+
35984
+ if (bFirstDraw)
35985
+ {
35986
+ this.Canvas.beginPath();
35987
+ this.Canvas.moveTo(x,y);
35988
+ bFirstDraw=false;
35989
+ ++pointCount;
35990
+ }
35991
+ else
35992
+ {
35993
+ this.Canvas.lineTo(x,y);
35994
+ ++pointCount;
35995
+ }
35996
+ }
35997
+
35998
+ if (pointCount>0)
35999
+ {
36000
+ this.Canvas.closePath();
36001
+
36002
+ var config=this.AryAreaConfig[index%this.AryAreaConfig.length];
36003
+ if (config.Color)
36004
+ {
36005
+ this.Canvas.fillStyle = config.Color;
36006
+ this.Canvas.fill();
36007
+ }
36008
+
36009
+ if (config.LineColor)
36010
+ {
36011
+ this.Canvas.strokeStyle = config.LineColor;
36012
+ this.Canvas.stroke();
36013
+ }
36014
+ }
36015
+
36016
+ ++index;
36017
+ }
36018
+ }
36019
+
36020
+ this.DrawText=function(item, x, y)
36021
+ {
36022
+ if (!item.Data || !item.Data.Name) return;
36023
+
36024
+ //JSConsole.Chart.Log(item.Text, item.Angle);
36025
+ this.Canvas.fillStyle = this.TitleColor;
36026
+ var xText = x, yText =y;
36027
+
36028
+ var angle=item.Angle%360;
36029
+
36030
+ //显示每个角度的位置
36031
+ if (angle > 0 && angle < 45) {
36032
+ this.Canvas.textAlign = 'left';
36033
+ this.Canvas.textBaseline = 'middle';
36034
+ xText += 2;
36035
+ }
36036
+ else if (angle >= 45 && angle < 90) {
36037
+ this.Canvas.textAlign = 'left';
36038
+ this.Canvas.textBaseline = 'top';
36039
+ xText += 2;
36040
+ }
36041
+ else if (angle==90)
36042
+ {
36043
+ this.Canvas.textAlign = 'center';
36044
+ this.Canvas.textBaseline = 'top';
36045
+ yText+=2;
36046
+ }
36047
+ else if (angle >= 90 && angle < 135) {
36048
+ this.Canvas.textAlign = 'right';
36049
+ this.Canvas.textBaseline = 'top';
36050
+ xText -= 2;
36051
+ }
36052
+ else if (angle >= 135 && angle < 180) {
36053
+ this.Canvas.textAlign = 'right';
36054
+ this.Canvas.textBaseline = 'top';
36055
+ xText -= 2;
36056
+ }
36057
+ else if (angle >= 180 && angle < 225) {
36058
+ this.Canvas.textAlign = 'right';
36059
+ this.Canvas.textBaseline = 'middle';
36060
+ xText -= 2;
36061
+ }
36062
+ else if (angle >= 225 && angle <= 270) {
36063
+ this.Canvas.textAlign = 'center';
36064
+ this.Canvas.textBaseline = 'bottom';
36065
+ }
36066
+ else if (angle > 270 && angle < 315) {
36067
+ this.Canvas.textAlign = 'left';
36068
+ this.Canvas.textBaseline = 'bottom';
36069
+ xText += 2;
36070
+ }
36071
+ else
36072
+ {
36073
+ this.Canvas.textAlign = 'left';
36074
+ this.Canvas.textBaseline = 'middle';
36075
+ xText += 2;
36076
+ }
36077
+
36078
+ this.Canvas.fillText(item.Data.Name, xText, yText);
36079
+ }
36080
+
36081
+ this.Draw=function()
36082
+ {
36083
+ this.AryIndexCache=[];
36084
+ this.MapData=new Map();
36085
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIndex)) return;
36086
+
36087
+ this.CalculateSize();
36088
+
36089
+ this.DrawBorder();
36090
+
36091
+ this.DrawArea();
36092
+ }
36093
+
36094
+ this.BuildCacheData=function()
36095
+ {
36096
+ this.MapDataCache=new Map();
36097
+
36098
+ for(var i=0;i<this.Data.Data.length;++i)
36099
+ {
36100
+ var item=this.Data.Data[i];
36101
+ if (!this.MapDataCache.has(item.Group))
36102
+ {
36103
+ this.MapDataCache.set(item.Group, { MapData:new Map() })
36104
+ }
36105
+
36106
+ var mpaItem=this.MapDataCache.get(item.Group);
36107
+ mpaItem.MapData.set(item.Name, { Data:item });
36108
+ }
36109
+ }
36110
+
36111
+ this.CalculateSize=function(data)
36112
+ {
36113
+ var border=this.ChartBorder.GetBorder();
36114
+ var pixelRatio=GetDevicePixelRatio();
36115
+ this.TextFont=`${this.TextFontConfig.Size*pixelRatio}px ${ this.TextFontConfig.Name}`;
36116
+ var fontHeight=this.GetFontHeight(this.TextFont,"擎")+1;
36117
+
36118
+ var maxTextWidth=0;
36119
+ if (IFrameSplitOperator.IsNonEmptyArray(this.AryIndex))
36120
+ {
36121
+ for(var i=0;i<this.AryIndex.length;++i)
36122
+ {
36123
+ var item=this.AryIndex[i];
36124
+ if (!item.Name) continue;
36125
+ var textWidth=this.Canvas.measureText(item.Name).width;
36126
+ if (maxTextWidth<textWidth) maxTextWidth=textWidth;
36127
+ }
36128
+ }
36129
+
36130
+ var radius=this.Radius*2*pixelRatio; //半径
36131
+ this.RectClient={ Width:radius*2, Height:radius*2, Radius:radius };
36132
+ this.RectClient.Right=border.Right+this.Offset.X-maxTextWidth;
36133
+ this.RectClient.Top=border.TopEx+this.Offset.Y+fontHeight;
36134
+ this.RectClient.Left=this.RectClient.Right-this.RectClient.Width;
36135
+ this.RectClient.Bottom=this.RectClient.Top+this.RectClient.Height;
36136
+
36137
+ var ptCenter={X:this.RectClient.Left+this.RectClient.Width/2, Y:this.RectClient.Top+this.RectClient.Height/2}; //中心点
36138
+
36139
+ var count=Math.max(5,this.AryIndex.length);
36140
+ var averageAngle=360/count;
36141
+ for(var i=0;i<count;++i)
36142
+ {
36143
+ var angle=i*averageAngle+this.StartAngle;
36144
+
36145
+ var indexItem={ Data:null, Index:i, Angle:angle, Radius:radius };
36146
+ if (this.AryIndex && this.AryIndex[i])
36147
+ {
36148
+ indexItem.Data=this.AryIndex[i];
36149
+ }
36150
+
36151
+ this.AryIndexCache.push(indexItem);
36152
+ }
36153
+
36154
+ this.CenterPoint=ptCenter;
36155
+ }
36156
+
36157
+ //空数据
36158
+ this.DrawEmptyData=function()
36159
+ {
36160
+ JSConsole.Chart.Log('[ChartSimpleRadar::DrawEmptyData]')
36161
+ }
36162
+ }
36163
+
35857
36164
  //分钟成交量 支持横屏
35858
36165
  function ChartMinuteVolumBar()
35859
36166
  {
@@ -56481,6 +56788,7 @@ function ChartCorssCursor()
56481
56788
  this.TextBGColor=g_JSChartResource.CorssCursorBGColor; //文本背景色
56482
56789
  this.BorderColor=g_JSChartResource.CorssCursorBorderColor; //边框颜色
56483
56790
  this.XRangeBGColor=g_JSChartResource.CorssCursorXRangeBGColor;
56791
+ this.LineDash=g_JSChartResource.CorssCursorLineDash.slice(); //虚线
56484
56792
  this.TextHeight=20; //文本字体高度
56485
56793
  this.LastPoint;
56486
56794
  this.LastValue; //{ Y:{ Value:, Extend: } }
@@ -56536,6 +56844,7 @@ function ChartCorssCursor()
56536
56844
  this.TextBGColor=g_JSChartResource.CorssCursorBGColor; //文本背景色
56537
56845
  this.BorderColor=g_JSChartResource.CorssCursorBorderColor; //边框颜色
56538
56846
  this.XRangeBGColor=g_JSChartResource.CorssCursorXRangeBGColor;
56847
+ this.LineDash=g_JSChartResource.CorssCursorLineDash.slice(); //虚线
56539
56848
  }
56540
56849
 
56541
56850
  this.GetCloseYPoint=function(index)
@@ -56794,10 +57103,10 @@ function ChartCorssCursor()
56794
57103
  }
56795
57104
 
56796
57105
  var pixel=GetDevicePixelRatio();
56797
- if (this.HPenType==1 || this.HPenType==0) //0=实线 1=虚线
57106
+ if (this.HPenType==1 || this.HPenType==0) //0=虚线 1=实线
56798
57107
  {
56799
57108
  this.Canvas.strokeStyle=this.HPenColor;
56800
- if (this.HPenType==0) this.Canvas.setLineDash([3*pixel,2*pixel]); //虚线
57109
+ if (this.HPenType==0) this.Canvas.setLineDash(this.LineDash); //虚线
56801
57110
  //this.Canvas.lineWidth=0.5
56802
57111
  this.Canvas.beginPath();
56803
57112
  this.Canvas.moveTo(left,ToFixedPoint(y));
@@ -56810,7 +57119,7 @@ function ChartCorssCursor()
56810
57119
  this.Canvas.strokeStyle=this.VPenColor;
56811
57120
  if (this.VPenType==0)
56812
57121
  {
56813
- this.Canvas.setLineDash([3*pixel,2*pixel]); //虚线
57122
+ this.Canvas.setLineDash(this.LineDash); //虚线
56814
57123
  }
56815
57124
  else if (this.VPenType==2)
56816
57125
  {
@@ -57405,7 +57714,7 @@ function ChartCorssCursor()
57405
57714
  var pixel=GetDevicePixelRatio();
57406
57715
  this.Canvas.save();
57407
57716
  this.Canvas.strokeStyle=this.HPenColor;
57408
- if (this.HPenType==0) this.Canvas.setLineDash([3*pixel,2*pixel]); //虚线
57717
+ if (this.HPenType==0) this.Canvas.setLineDash(this.LineDash); //虚线
57409
57718
 
57410
57719
  //画竖线
57411
57720
  this.Canvas.beginPath();
@@ -57419,7 +57728,7 @@ function ChartCorssCursor()
57419
57728
  this.Canvas.strokeStyle=this.VPenColor;
57420
57729
  if (this.VPenType==0)
57421
57730
  {
57422
- this.Canvas.setLineDash([3*pixel,2*pixel]); //虚线
57731
+ this.Canvas.setLineDash(this.LineDash); //虚线
57423
57732
  }
57424
57733
  else if (this.VPenType==2)
57425
57734
  {
@@ -60695,7 +61004,12 @@ function DynamicChartTitlePainting()
60695
61004
  {
60696
61005
  this.Font=g_JSChartResource.TitleFont;
60697
61006
  this.TitleColor=g_JSChartResource.DefaultTextColor;
61007
+ this.SelectedColor=g_JSChartResource.IndexTitleSelectedColor;
60698
61008
  this.OverlayIndexType.BGColor=g_JSChartResource.OverlayIndexTitleBGColor;
61009
+
61010
+ this.BGColor=g_JSChartResource.IndexTitleBGColor;
61011
+ this.BGBorderColor=g_JSChartResource.IndexTitleBorderColor;
61012
+ this.BGBorderMoveOnColor=g_JSChartResource.IndexTitleBorderMoveOnColor;
60699
61013
  }
60700
61014
 
60701
61015
  this.SetDynamicTitleData=function(outName, args, data)
@@ -74369,6 +74683,7 @@ function JSChartResource()
74369
74683
  this.CorssCursorHPenColor="rgb(130,130,130)"; //十字光标线段颜色(水平)
74370
74684
  this.CorssCursorVPenColor="rgb(130,130,130)"; //十字光标线段颜色(垂直)
74371
74685
  this.CorssCursorXRangeBGColor="rgba(100,149,237,0.3)"; //十字光标X轴访问背景色
74686
+ this.CorssCursorLineDash=[3*GetDevicePixelRatio(),2*GetDevicePixelRatio()]; //十字光标虚线
74372
74687
 
74373
74688
  this.CorssCursor=
74374
74689
  {
@@ -74739,6 +75054,20 @@ function JSChartResource()
74739
75054
  Offset:{ X:-5, Y:5 }
74740
75055
  }
74741
75056
 
75057
+ this.ChartSimpleRadar=
75058
+ {
75059
+ TextFont:{ Family:'微软雅黑' , Size:12 },
75060
+ BorderColor:"rgb(169,169,169)",
75061
+ Offset:{ X:-5, Y:5 },
75062
+ TextColor:"rgb(105,105,105)",
75063
+ AryBGColor:['rgba(255,255,255,0.9)', 'rgba(230, 234, 242,0.9)'],
75064
+ AryArea:
75065
+ [
75066
+ { Color:"rgba(242,154,118,0.4)", LineColor:"rgb(242,154,118)"},
75067
+ { Color:"rgba(121,197,228,0.4)", LineColor:"rgb(92,165,196)"},
75068
+ ],
75069
+ }
75070
+
74742
75071
  //手机端tooltip
74743
75072
  this.TooltipPaint = {
74744
75073
  BGColor:'rgba(250,250,250,0.8)', //背景色
@@ -75789,6 +76118,7 @@ function JSChartResource()
75789
76118
  if (style.CorssCursorHPenColor) this.CorssCursorHPenColor = style.CorssCursorHPenColor;
75790
76119
  if (style.CorssCursorBorderColor) this.CorssCursorBorderColor=style.CorssCursorBorderColor;
75791
76120
  if (style.CorssCursorXRangeBGColor) this.CorssCursorXRangeBGColor=style.CorssCursorXRangeBGColor;
76121
+ if (style.CorssCursorLineDash) this.CorssCursorLineDash=style.CorssCursorLineDash.slice();
75792
76122
  if (style.CorssCursor && style.CorssCursor.RightButton)
75793
76123
  {
75794
76124
  var item=style.CorssCursor.RightButton;
@@ -75969,6 +76299,7 @@ function JSChartResource()
75969
76299
 
75970
76300
  if (style.ChartSimpleTable) this.SetChartSimpleTable(style.ChartSimpleTable);
75971
76301
  if (style.ChartSimplePie) this.SetChartSimplePie(style.ChartSimplePie);
76302
+ if (style.ChartSimpleRadar) this.SetChartSimpleRadar(style.ChartSimpleRadar);
75972
76303
 
75973
76304
  if (style.DRAWICON)
75974
76305
  {
@@ -77062,6 +77393,30 @@ function JSChartResource()
77062
77393
  }
77063
77394
  }
77064
77395
 
77396
+ this.SetChartSimpleRadar=function(style)
77397
+ {
77398
+ var dest=this.ChartSimpleRadar;
77399
+ if (style.TextFont)
77400
+ {
77401
+ var item=style.TextFont;
77402
+ if (item.Name) dest.TextFont.Name=item.Name;
77403
+ if (IFrameSplitOperator.IsNumber(item.Size)) dest.TextFont.Size=item.Size;
77404
+ }
77405
+
77406
+ if (style.BorderColor) dest.BorderColor=style.BorderColor;
77407
+ if (style.TextColor) dest.TextColor=style.TextColor;
77408
+
77409
+ if (style.Offset)
77410
+ {
77411
+ var item=style.Offset;
77412
+ if (IFrameSplitOperator.IsNumber(item.X)) dest.Offset.X=item.X;
77413
+ if (IFrameSplitOperator.IsNumber(item.Y)) dest.Offset.Y=item.Y;
77414
+ }
77415
+
77416
+ if (IFrameSplitOperator.IsNonEmptyArray(style.AryBGColor)) dest.AryBGColor=style.AryBGColor.slice();
77417
+ if (IFrameSplitOperator.IsNonEmptyArray(style.AryArea)) dest.AryArea=style.AryArea.slice();
77418
+ }
77419
+
77065
77420
  }
77066
77421
 
77067
77422
  var g_JSChartResource=new JSChartResource();
@@ -89828,12 +90183,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
89828
90183
  this.CaclutateCallCationYRange();
89829
90184
  }
89830
90185
 
90186
+ //增量更新
89831
90187
  this.RecvUpdateMinuteData=function(data)
89832
90188
  {
89833
90189
  var minuteData=MinuteChartContainer.JsonDataToUpdateMinuteData(data);
89834
90190
  var aryColorData=MinuteChartContainer.JsonDataToMinuteLineColorData(data);
89835
- this.BeforeOpenData=null;
89836
- this.AfterCloseData=null;
90191
+
89837
90192
  var beforeOpenData=MinuteChartContainer.JsonDataToBeforeOpenData(data);
89838
90193
  var afterCloseData=MinuteChartContainer.JsonDataToAfterCloseData(data);
89839
90194
  var updateTime=MinuteChartContainer.JsonDataToMinuteLastUpdateTime(data); //数据最后的更新时间
@@ -89852,92 +90207,22 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
89852
90207
  return;
89853
90208
  }
89854
90209
 
89855
- //原始数据
90210
+ if (this.IsBeforeData && beforeOpenData) this.BeforeOpenData=beforeOpenData;
90211
+ if (this.IsAfterData && afterCloseData) this.AfterCloseData=afterCloseData;
89856
90212
 
90213
+ //原始数据
89857
90214
  this.UpdateLatestMinuteDataV2(minuteData);
89858
- var sourceData=this.SourceData;
89859
- var aryMinuteData=this.SourceData.Data;
89860
- this.ColorLineData=aryColorData;
89861
- this.TradeDate=data.stock[0].date;
89862
- this.Frame.SetDayCount(1); //单日数据
89863
- this.SourceData.UpdateTime=updateTime;
89864
- this.Symbol=minuteData.Symbol;
89865
- this.Name=minuteData.Name;
89866
-
89867
- this.SetCallCationDataBorder( { Left:this.IsBeforeData, Right:this.IsAfterData , MultiDay:{ Left:false, Right:false }} );
89868
-
89869
- if (this.ShareAfterVol==2) //盘前, 盘后成交量公用坐标
89870
- {
89871
- if (this.BeforeOpenData && this.AfterCloseData)
89872
- {
89873
- var max=Math.max(this.BeforeOpenData.VolMax, this.AfterCloseData.VolMax);
89874
- var min=Math.min(this.BeforeOpenData.VolMin, this.AfterCloseData.VolMin);
89875
- this.BeforeOpenData.VolMax=this.AfterCloseData.VolMax=max;
89876
- this.BeforeOpenData.VolMin=this.AfterCloseData.VolMin=min;
89877
- }
89878
- }
90215
+ this.UpdateMinuteUI(data.stock[0], {FunctionName:"RecvUpdateMinuteData"});
89879
90216
 
89880
- var yClose=minuteData.YClose;
89881
- var upperSymbol=this.Symbol.toUpperCase();
89882
- var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);
89883
- if (minuteData.YClearing>0 && isFutures) yClose=minuteData.YClearing; //期货使用前结算价
89884
- this.CaclutateLimitPrice(yClose, minuteData.LimitPrice); //计算涨停价格
89885
- var extendData=null;
89886
- if (minuteData.High>0 && minuteData.Low>0) extendData={ High:minuteData.High, Low:minuteData.Low };
89887
- this.BindMainData(sourceData,yClose, extendData);
89888
-
89889
- if (this.Frame.SubFrame.length>2)
90217
+ if (data.AutoUpdate===false) //不执行自动更新
89890
90218
  {
89891
- var bindData=new ChartData();
89892
- bindData.Data=aryMinuteData;
89893
- for(var i=2; i<this.Frame.SubFrame.length; ++i)
89894
- {
89895
- this.BindIndexData(i,bindData);
89896
- }
89897
- }
89898
90219
 
89899
- for(let i=0; i<this.Frame.SubFrame.length; ++i)
90220
+ }
90221
+ else
89900
90222
  {
89901
- var item=this.Frame.SubFrame[i];
89902
- item.Frame.XSplitOperator.Symbol=this.Symbol;
89903
- item.Frame.XSplitOperator.DayCount=1;
89904
- item.Frame.XSplitOperator.Operator(); //调整X轴个数
89905
- item.Frame.YSplitOperator.Symbol=this.Symbol;
89906
-
89907
- if (IFrameSplitOperator.IsNonEmptyArray(item.OverlayIndex))
89908
- {
89909
- for(var j=0;j<item.OverlayIndex.length; ++j) //子坐标X轴个数同步
89910
- {
89911
- var overlayItem=item.OverlayIndex[j];
89912
- overlayItem.Frame.XPointCount=item.Frame.XPointCount;
89913
- overlayItem.Frame.MinuteCount=item.Frame.MinuteCount;
89914
- }
89915
- }
90223
+ this.AutoUpdateEvent(true, "MinuteChartContainer::RecvUpdateMinuteData");
90224
+ this.AutoUpdate();
89916
90225
  }
89917
-
89918
- this.ChartCorssCursor.StringFormatY.Symbol=this.Symbol;
89919
- this.ChartCorssCursor.StringFormatX.Symbol=this.Symbol;
89920
-
89921
- if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol)) this.TitlePaint[0].IsShowDate=false;
89922
-
89923
- if (data.stock[0].IsHistoryMinute==true) this.TitlePaint[0].IsShowDate=true;
89924
-
89925
- var chartInfo=this.GetChartMinuteInfo();
89926
- if (chartInfo) chartInfo.SourceData=this.SourceData; //数据绑定到信息地雷上
89927
-
89928
- this.RecvMinuteDataEvent( {FunctionName:"RecvUpdateMinuteData"} );
89929
- this.RequestMinuteInfoData();
89930
- this.RequestOverlayMinuteData();//请求叠加数据 (主数据下载完再下载)
89931
- this.CreateChartDrawPictureByStorage(); //创建画图工具
89932
-
89933
- this.UpdateFrameMaxMin(); //调整坐标最大 最小值
89934
- this.Frame.SetSizeChage(true);
89935
- this.Draw();
89936
-
89937
- this.BindAllOverlayIndexData(this.SourceData);
89938
-
89939
- this.AutoUpdateEvent(true, "MinuteChartContainer::RecvUpdateMinuteData");
89940
- this.AutoUpdate();
89941
90226
  }
89942
90227
 
89943
90228
  this.RecvMinuteData=function(data)
@@ -90004,15 +90289,31 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90004
90289
  var sourceData=new ChartData();
90005
90290
  sourceData.Data=aryMinuteData;
90006
90291
  sourceData.UpdateTime=updateTime;
90292
+ this.SourceData=sourceData;
90007
90293
 
90008
90294
  this.ColorLineData=aryColorData;
90009
90295
 
90010
- this.TradeDate=data.stock[0].date;
90296
+ this.UpdateMinuteUI(data.stock[0], {FunctionName:"RecvMinuteData", Day:{ IsFirstData:bFirstData} });
90297
+
90298
+ if (data.AutoUpdate===false) //不执行自动更新
90299
+ {
90300
+
90301
+ }
90302
+ else
90303
+ {
90304
+ this.AutoUpdateEvent(true, "MinuteChartContainer::RecvMinuteData");
90305
+ this.AutoUpdate();
90306
+ }
90307
+ }
90308
+
90309
+ //更新单日分时图
90310
+ this.UpdateMinuteUI=function(stockData, eventData)
90311
+ {
90312
+ this.TradeDate=stockData.date;
90011
90313
  this.Frame.SetDayCount(1); //单日数据
90012
90314
 
90013
- this.SourceData=sourceData;
90014
- this.Symbol=data.stock[0].symbol;
90015
- this.Name=data.stock[0].name;
90315
+ this.Symbol=stockData.symbol;
90316
+ this.Name=stockData.name;
90016
90317
 
90017
90318
  this.SetCallCationDataBorder( { Left:this.IsBeforeData, Right:this.IsAfterData , MultiDay:{ Left:false, Right:false }} );
90018
90319
 
@@ -90027,26 +90328,26 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90027
90328
  }
90028
90329
  }
90029
90330
 
90030
- var yClose=data.stock[0].yclose;
90331
+ var yClose=stockData.yclose;
90031
90332
  var upperSymbol=this.Symbol.toUpperCase();
90032
90333
  var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);
90033
- if (data.stock[0].yclearing>0 && isFutures) yClose=data.stock[0].yclearing; //期货使用前结算价
90034
- this.CaclutateLimitPrice(yClose, data.stock[0].limitprice); //计算涨停价格
90334
+ if (stockData.yclearing>0 && isFutures) yClose=stockData.yclearing; //期货使用前结算价
90335
+ this.CaclutateLimitPrice(yClose, stockData.limitprice); //计算涨停价格
90035
90336
  var extendData=null;
90036
- if (data.stock[0].high>0 && data.stock[0].low>0) extendData={ High:data.stock[0].high, Low:data.stock[0].low };
90037
- this.BindMainData(sourceData,yClose, extendData);
90337
+ if (stockData.high>0 && stockData.low>0) extendData={ High:stockData.high, Low:stockData.low };
90338
+ this.BindMainData(this.SourceData,yClose, extendData);
90038
90339
 
90039
90340
  if (this.Frame.SubFrame.length>2)
90040
90341
  {
90041
90342
  var bindData=new ChartData();
90042
- bindData.Data=aryMinuteData;
90343
+ bindData.Data=this.SourceData.Data;
90043
90344
  for(var i=2; i<this.Frame.SubFrame.length; ++i)
90044
90345
  {
90045
90346
  this.BindIndexData(i,bindData);
90046
90347
  }
90047
90348
  }
90048
90349
 
90049
- for(let i in this.Frame.SubFrame)
90350
+ for(var i=0, j=0; i<this.Frame.SubFrame.length; ++i)
90050
90351
  {
90051
90352
  var item=this.Frame.SubFrame[i];
90052
90353
  item.Frame.XSplitOperator.Symbol=this.Symbol;
@@ -90054,7 +90355,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90054
90355
  item.Frame.XSplitOperator.Operator(); //调整X轴个数
90055
90356
  item.Frame.YSplitOperator.Symbol=this.Symbol;
90056
90357
 
90057
- for(var j in item.OverlayIndex) //子坐标X轴个数同步
90358
+ for(j=0;j<item.OverlayIndex.length;++j) //子坐标X轴个数同步
90058
90359
  {
90059
90360
  var overlayItem=item.OverlayIndex[j];
90060
90361
  overlayItem.Frame.XPointCount=item.Frame.XPointCount;
@@ -90067,12 +90368,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90067
90368
 
90068
90369
  if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol)) this.TitlePaint[0].IsShowDate=false;
90069
90370
 
90070
- if (data.stock[0].IsHistoryMinute==true) this.TitlePaint[0].IsShowDate=true;
90371
+ if (stockData.IsHistoryMinute==true) this.TitlePaint[0].IsShowDate=true;
90071
90372
 
90072
90373
  var chartInfo=this.GetChartMinuteInfo();
90073
90374
  if (chartInfo) chartInfo.SourceData=this.SourceData; //数据绑定到信息地雷上
90074
90375
 
90075
- this.RecvMinuteDataEvent( {FunctionName:"RecvMinuteData", Day:{ IsFirstData:bFirstData} } );
90376
+ if (eventData) this.RecvMinuteDataEvent( eventData );
90076
90377
  this.RequestMinuteInfoData();
90077
90378
  this.RequestOverlayMinuteData();//请求叠加数据 (主数据下载完再下载)
90078
90379
  this.CreateChartDrawPictureByStorage(); //创建画图工具
@@ -90082,16 +90383,6 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90082
90383
  this.Draw();
90083
90384
 
90084
90385
  this.BindAllOverlayIndexData(this.SourceData);
90085
-
90086
- if (data.AutoUpdate===false) //不执行自动更新
90087
- {
90088
-
90089
- }
90090
- else
90091
- {
90092
- this.AutoUpdateEvent(true, "MinuteChartContainer::RecvMinuteData");
90093
- this.AutoUpdate();
90094
- }
90095
90386
  }
90096
90387
 
90097
90388
  this.CaclutateLimitPrice=function(yClose, limitData)
@@ -112294,8 +112585,24 @@ function JSDraw(errorHandler,symbolData)
112294
112585
  }
112295
112586
 
112296
112587
  //饼图
112297
- this.PIE_CELL=function(value, color, text, textColor, lineColor)
112588
+ this.PIE_CELL=function(data, color, text, textColor, lineColor)
112298
112589
  {
112590
+ var value=null;
112591
+ if (IFrameSplitOperator.IsNumber(data))
112592
+ {
112593
+ value=data;
112594
+ }
112595
+ else if (IFrameSplitOperator.IsString(data))
112596
+ {
112597
+ value=parseFloat(data);
112598
+ }
112599
+ else if (IFrameSplitOperator.IsNonEmptyArray(data))
112600
+ {
112601
+ var lastValue=data[data.length-1];
112602
+ if (IFrameSplitOperator.IsNumber(lastValue)) value=lastValue;
112603
+ else if (IFrameSplitOperator.IsString(lastValue)) value=parseFloat(lastValue);
112604
+ }
112605
+
112299
112606
  var cellItem={ Value:value, Color:color };
112300
112607
  if (text) cellItem.Text=text;
112301
112608
  if (textColor) cellItem.TextColor=textColor;
@@ -112316,6 +112623,48 @@ function JSDraw(errorHandler,symbolData)
112316
112623
 
112317
112624
  return result={ DrawData:{ Data:aryCell, Radius:radius }, DrawType:"DRAW_SIMPLE_PIE" };
112318
112625
  }
112626
+
112627
+ this.RADAR_CELL=function(name, data, max, min)
112628
+ {
112629
+ var cellItem={ Name:name, Max:100, Min:0, Value:null };
112630
+ if (IFrameSplitOperator.IsNumber(data))
112631
+ {
112632
+ cellItem.Value=data;
112633
+ }
112634
+ else if (IFrameSplitOperator.IsString(data))
112635
+ {
112636
+ cellItem.Value=parseFloat(data);
112637
+ }
112638
+ else if (IFrameSplitOperator.IsNonEmptyArray(data))
112639
+ {
112640
+ var lastValue=data[data.length-1];
112641
+ if (IFrameSplitOperator.IsNumber(lastValue)) cellItem.Value=lastValue;
112642
+ else if (IFrameSplitOperator.IsString(lastValue)) cellItem.Value=parseFloat(lastValue);
112643
+ }
112644
+
112645
+ if (IFrameSplitOperator.IsNumber(max)) cellItem.Max=max;
112646
+ if (IFrameSplitOperator.IsNumber(min)) cellItem.Min=min;
112647
+
112648
+ return cellItem;
112649
+ }
112650
+
112651
+ this.DRAWRADAR=function(args)
112652
+ {
112653
+ var radius=args[0];
112654
+ var color=args[1];
112655
+
112656
+ var aryIndex=[];
112657
+ var aryData=[];
112658
+ for(var i=2;i<args.length;++i)
112659
+ {
112660
+ var item=args[i];
112661
+
112662
+ aryIndex.push({ Name:item.Name, Max:item.Max, Min:item.Min });
112663
+ aryData.push({ Value:item.Value, Name:item.Name, Group:"Default"});
112664
+ }
112665
+
112666
+ return result={ DrawData:{ Data:aryData, AryIndex:aryIndex, Radius:radius, AryArea:[{ LineColor:color }] }, DrawType:"DRAW_SIMPLE_RADAR" };
112667
+ }
112319
112668
  }
112320
112669
 
112321
112670
 
@@ -112370,7 +112719,7 @@ JSDraw.prototype.IsDrawFunction=function(name)
112370
112719
  'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2","DRAWGBK_DIV",
112371
112720
  "VERTLINE","HORLINE","TIPICON",
112372
112721
  "BUY","SELL","SELLSHORT","BUYSHORT",
112373
- "DRAWLASTBARICON","DRAWLASTBARNUMBER", "DRAWLASTBARTEXT","DRAWTABLE","DRAWPIE",
112722
+ "DRAWLASTBARICON","DRAWLASTBARNUMBER", "DRAWLASTBARTEXT","DRAWTABLE","DRAWPIE","DRAWRADAR",
112374
112723
  ]);
112375
112724
  if (setFunctionName.has(name)) return true;
112376
112725
 
@@ -119259,6 +119608,14 @@ function JSExecute(ast,option)
119259
119608
  node.Draw=this.Draw.DRAWPIE(args);
119260
119609
  node.Out=[];
119261
119610
  break;
119611
+ //雷达图
119612
+ case "RADAR_CELL":
119613
+ node.Out=this.Draw.RADAR_CELL(args[0],args[1],args[2],args[3]);
119614
+ break;
119615
+ case "DRAWRADAR":
119616
+ node.Draw=this.Draw.DRAWRADAR(args);
119617
+ node.Out=[];
119618
+ break;
119262
119619
 
119263
119620
  default:
119264
119621
  node.Out=this.Algorithm.CallFunction(funcName, args, node, this.SymbolData);
@@ -122275,6 +122632,35 @@ function ScriptIndex(name,script,args,option)
122275
122632
  hqChart.ChartPaint.push(chart);
122276
122633
  }
122277
122634
 
122635
+ this.CreateSimpleRadar=function(hqChart,windowIndex,varItem,id)
122636
+ {
122637
+ var chart=new ChartSimpleRadar();
122638
+ chart.Canvas=hqChart.Canvas;
122639
+ chart.Name=varItem.Name;
122640
+ chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
122641
+ chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
122642
+
122643
+ if (varItem.Draw && varItem.Draw.DrawData)
122644
+ {
122645
+ var drawData=varItem.Draw.DrawData;
122646
+ if (drawData.Data) chart.Data.Data=drawData.Data;
122647
+ if (drawData.AryIndex) chart.AryIndex=drawData.AryIndex;
122648
+ if (IFrameSplitOperator.IsPlusNumber(drawData.Radius)) chart.Radius=drawData.Radius;
122649
+ if (drawData.BorderColor) chart.BorderColor=drawData.BorderColor;
122650
+
122651
+ if (drawData.TextFont) chart.TextFontConfig=drawData.TextFont;
122652
+ if (drawData.TextColor) chart.TextColor=drawData.TextColor;
122653
+ if (drawData.BorderColor) chart.BorderColor=drawData.BorderColor;
122654
+ if (IFrameSplitOperator.IsNumber(drawData.XOffset)) chart.Offset.X=drawData.XOffset;
122655
+ if (IFrameSplitOperator.IsNumber(drawData.YOffset)) chart.Offset.Y=drawData.YOffset;
122656
+ if (IFrameSplitOperator.IsNonEmptyArray(drawData.AryArea)) chart.AryAreaConfig=drawData.AryArea;
122657
+
122658
+ chart.BuildCacheData();
122659
+ }
122660
+
122661
+ hqChart.ChartPaint.push(chart);
122662
+ }
122663
+
122278
122664
  this.CreateTradeIcon=function(hqChart,windowIndex,varItem,id)
122279
122665
  {
122280
122666
  var chart=new ChartTradeIcon();
@@ -123150,6 +123536,10 @@ function ScriptIndex(name,script,args,option)
123150
123536
  break;
123151
123537
  case "DRAW_SIMPLE_PIE":
123152
123538
  this.CreateSimplePie(hqChart,windowIndex,item,i);
123539
+ break;
123540
+ case "DRAW_SIMPLE_RADAR":
123541
+ this.CreateSimpleRadar(hqChart,windowIndex,item,i);
123542
+ break;
123153
123543
  case "BUY":
123154
123544
  case "SELL":
123155
123545
  case "SELLSHORT":
@@ -123502,7 +123892,10 @@ function OverlayScriptIndex(name,script,args,option)
123502
123892
  break;
123503
123893
  case "DRAW_SIMPLE_PIE":
123504
123894
  this.CreateSimplePie(hqChart,windowIndex,item,i);
123505
-
123895
+ break;
123896
+ case "DRAW_SIMPLE_RADAR":
123897
+ this.CreateSimpleRadar(hqChart,windowIndex,item,i);
123898
+ break;
123506
123899
  case "KLINE_BG":
123507
123900
  this.CreateBackgroud(hqChart,windowIndex,item,i);
123508
123901
  break;
@@ -124570,6 +124963,39 @@ function OverlayScriptIndex(name,script,args,option)
124570
124963
  frame.ChartPaint.push(chart);
124571
124964
  }
124572
124965
 
124966
+ this.CreateSimpleRadar=function(hqChart,windowIndex,varItem,id)
124967
+ {
124968
+ var overlayIndex=this.OverlayIndex;
124969
+ var frame=overlayIndex.Frame;
124970
+ var chart=new ChartSimpleRadar();
124971
+ chart.Canvas=hqChart.Canvas;
124972
+ chart.Name=varItem.Name;
124973
+ chart.ChartBorder=frame.Frame.ChartBorder;
124974
+ chart.ChartFrame=frame.Frame;
124975
+ chart.Identify=overlayIndex.Identify;
124976
+ chart.HQChart=hqChart;
124977
+
124978
+ if (varItem.Draw && varItem.Draw.DrawData)
124979
+ {
124980
+ var drawData=varItem.Draw.DrawData;
124981
+ if (drawData.Data) chart.Data.Data=drawData.Data;
124982
+ if (drawData.AryIndex) chart.AryIndex=drawData.AryIndex;
124983
+ if (IFrameSplitOperator.IsPlusNumber(drawData.Radius)) chart.Radius=drawData.Radius;
124984
+ if (drawData.BorderColor) chart.BorderColor=drawData.BorderColor;
124985
+
124986
+ if (drawData.TextFont) chart.TextFontConfig=drawData.TextFont;
124987
+ if (drawData.TextColor) chart.TextColor=drawData.TextColor;
124988
+ if (drawData.BorderColor) chart.BorderColor=drawData.BorderColor;
124989
+ if (IFrameSplitOperator.IsNumber(drawData.XOffset)) chart.Offset.X=drawData.XOffset;
124990
+ if (IFrameSplitOperator.IsNumber(drawData.YOffset)) chart.Offset.Y=drawData.YOffset;
124991
+ if (IFrameSplitOperator.IsNonEmptyArray(drawData.AryArea)) chart.AryAreaConfig=drawData.AryArea;
124992
+
124993
+ chart.BuildCacheData();
124994
+ }
124995
+
124996
+ frame.ChartPaint.push(chart);
124997
+ }
124998
+
124573
124999
  this.CreateChartVericaltLine=function(hqChart,windowIndex,varItem,id)
124574
125000
  {
124575
125001
  var overlayIndex=this.OverlayIndex;
@@ -125783,6 +126209,17 @@ function APIScriptIndex(name,script,args,option, isOverlay)
125783
126209
  outVarItem.Draw=drawItem;
125784
126210
  result.push(outVarItem);
125785
126211
  }
126212
+ else if (draw.DrawType=="DRAW_SIMPLE_RADAR")
126213
+ {
126214
+ drawItem.Name=draw.Name;
126215
+ drawItem.Type=draw.Type;
126216
+
126217
+ drawItem.DrawType=draw.DrawType;
126218
+ drawItem.DrawData=draw.DrawData; //{ AryIndex:[ ], Data:[] };
126219
+
126220
+ outVarItem.Draw=drawItem;
126221
+ result.push(outVarItem);
126222
+ }
125786
126223
  else
125787
126224
  {
125788
126225
  var find=g_ScriptIndexChartFactory.Get(draw.DrawType); //外部挂接
@@ -127399,6 +127836,20 @@ function GetBlackStyle()
127399
127836
  BorderColor:"rgb(220,220,220)",
127400
127837
  },
127401
127838
 
127839
+ ChartSimpleRadar:
127840
+ {
127841
+ //TextFont:{ Family:'微软雅黑' , Size:12 },
127842
+ BorderColor:"rgb(230, 230, 230)",
127843
+ //Offset:{ X:-5, Y:5 },
127844
+ TextColor:"rgb(250, 250, 250)",
127845
+ AryBGColor:['rgba(63,61,82,0.9)','rgba(56,55,80,0.9)'],
127846
+ AryArea:
127847
+ [
127848
+ { Color:"rgba(242,154,118,0.4)", LineColor:"rgb(242,154,118)"},
127849
+ { Color:"rgba(121,197,228,0.4)", LineColor:"rgb(92,165,196)"},
127850
+ ],
127851
+ },
127852
+
127402
127853
  ChartDrawVolProfile:
127403
127854
  {
127404
127855
  BGColor:"rgba(244,250,254,0.3)",
@@ -141934,7 +142385,7 @@ function ScrollBarBGChart()
141934
142385
 
141935
142386
 
141936
142387
 
141937
- var HQCHART_VERSION="1.1.14312";
142388
+ var HQCHART_VERSION="1.1.14329";
141938
142389
 
141939
142390
  function PrintHQChartVersion()
141940
142391
  {