hqchart 1.1.13009 → 1.1.13014

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.
@@ -4094,7 +4094,20 @@ this.Draw=function(){this.IconRect=[];if(!this.IsShow||this.ChartFrame.IsMinSize
4094
4094
  {yText-=item.Line.Offset[1];yPrice+=item.Line.Offset[0];}else if(yText<yPrice){yText+=item.Line.Offset[1];yPrice-=item.Line.Offset[0];}}this.Canvas.save();if(item.Line.Dash)this.Canvas.setLineDash(item.Line.Dash);//虚线
4095
4095
  if(item.Line.Width>0)this.Canvas.lineWidth=item.Line.Width;//线宽
4096
4096
  this.Canvas.strokeStyle=item.Line.Color;this.Canvas.beginPath();if(this.IsHScreen){this.Canvas.moveTo(yText,ToFixedPoint(x));this.Canvas.lineTo(yPrice,ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),yText);this.Canvas.lineTo(ToFixedPoint(x),yPrice);}this.Canvas.stroke();this.Canvas.restore();}}}};this.GetTooltipData=function(x,y,tooltip){if(!IFrameSplitOperator.IsNonEmptyArray(this.IconRect))return false;for(var i=0;i<this.IconRect.length;++i){var item=this.IconRect[i];if(!item.Rect)continue;var rect=item.Rect;this.Canvas.beginPath();this.Canvas.rect(rect.X,rect.Y,rect.Width,rect.Height);if(this.Canvas.isPointInPath(x,y)){JSConsole.Chart.Log('[ChartMultiSVGIcon::GetTooltipData] icon ',item);tooltip.Data=item;tooltip.ChartPaint=this;tooltip.Type=4;//指标
4097
- return true;}}return false;};this.GetMaxMin=function(){var range={Min:null,Max:null};var xPointCount=this.ChartFrame.XPointCount;var start=this.Data.DataOffset;var end=start+xPointCount;for(var i in this.Icon){var item=this.Icon[i];if(item.Index>=start&&item.Index<end){if(range.Max==null)range.Max=item.Value;else if(range.Max<item.Value)range.Max=item.Value;if(range.Min==null)range.Min=item.Value;else if(range.Min>item.Value)range.Min=item.Value;}}return range;};}// 多dom节点
4097
+ return true;}}return false;};this.GetMaxMin=function(){var range={Min:null,Max:null};var xPointCount=this.ChartFrame.XPointCount;var start=this.Data.DataOffset;var end=start+xPointCount;for(var i in this.Icon){var item=this.Icon[i];if(item.Index>=start&&item.Index<end){if(range.Max==null)range.Max=item.Value;else if(range.Max<item.Value)range.Max=item.Value;if(range.Min==null)range.Min=item.Value;else if(range.Min>item.Value)range.Min=item.Value;}}return range;};}//图标集合(2.0) 支持横屏
4098
+ function ChartMultiSVGIconV2(){this.newMethod=IChartPainting;//派生
4099
+ this.newMethod();delete this.newMethod;this.ClassName="ChartMultiSVGIconV2";this.AryIcon;//[ {Index:, Value:, Symbol:, Color:, Baseline:, Line:{ Color:, Dash:[虚线点], KData:"H/L", Offset:[5,10], Width:线粗细 } } ]
4100
+ this.IconSize={Max:g_JSChartResource.DRAWICON.Icon.MaxSize,Min:g_JSChartResource.DRAWICON.Icon.MinSize,//图标的最大最小值
4101
+ Zoom:{Type:g_JSChartResource.DRAWICON.Icon.Zoom.Type,Value:g_JSChartResource.DRAWICON.Icon.Zoom.Value//放大倍数
4102
+ }};this.Family;this.Color=g_JSChartResource.DefaultTextColor;this.IsHScreen=false;this.IconRect=[];//0=序号,1=区域
4103
+ this.MapCache=null;//key=date/date-time value={ Data:[] }
4104
+ this.BuildKey=function(item){if(IFrameSplitOperator.IsNumber(item.Time))return item.Date+'-'+item.Time;else return item.Date;};this.BuildCacheData=function(){var mapData=new _map2.default();this.MapCache=mapData;if(!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon))return;for(var i=0;i<this.AryIcon.length;++i){var item=this.AryIcon[i];var key=this.BuildKey(item);if(mapData.has(key)){var mapItem=mapData.get(key);mapItem.Data.push(item);}else{mapData.set(key,{Data:[item]});}}};this.Draw=function(){this.IconRect=[];if(!this.IsShow||this.ChartFrame.IsMinSize||!this.IsVisible)return;if(this.IsShowIndexTitleOnly())return;if(this.IsHideScriptIndex())return;if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return;//k线数据
4105
+ if(!this.Family)return;if(!this.MapCache||this.MapCache.size<=0)return;this.IsHScreen=this.ChartFrame.IsHScreen===true;var xPointCount=this.ChartFrame.XPointCount;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var isMinute=this.IsMinuteFrame();var border=this.GetBorder();if(this.IsHScreen){var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.BottomEx;var chartLeft=border.TopEx;}else{var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var chartLeft=border.LeftEx;}var fontSize=this.GetDynamicIconSize(dataWidth,distanceWidth,this.IconSize.Max,this.IconSize.Min,this.IconSize.Zoom);this.Canvas.font=fontSize+'px '+this.Family;var drawInfo={Left:chartLeft,Right:chartright,FontSize:fontSize,DataWidth:dataWidth,DistanceWidth:distanceWidth};for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var kItem=this.Data.Data[i];var key=this.BuildKey(kItem);if(!this.MapCache.has(key))continue;var mapItem=this.MapCache.get(key);if(isMinute){var x=this.ChartFrame.GetXFromIndex(j);}else{var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;}this.DrawItem(mapItem,kItem,x,drawInfo);}};this.GetKValue=function(kItem,valueName){switch(valueName){case"HIGH":case"H":return kItem.High;case"L":case"LOW":return kItem.Low;case"C":case"CLOSE":return kItem.Close;case"O":case"OPEN":return KItem.Open;default:return null;}};this.DrawItem=function(groupItem,kItem,x,drawInfo){if(!IFrameSplitOperator.IsNonEmptyArray(groupItem.Data))return;var fontSize=drawInfo.FontSize;var left=drawInfo.Left,right=drawInfo.Right;var dataWidth=drawInfo.DataWidth;//var distanceWidth=drawInfo.DistanceWidth;
4106
+ for(var i=0;i<groupItem.Data.length;++i){var item=groupItem.Data[i];var value=item.Value;if(IFrameSplitOperator.IsString(item.Value))value=this.GetKValue(kItem,item.Value);if(!IFrameSplitOperator.IsNumber(value))continue;var y=this.ChartFrame.GetYFromData(item.Value,false);if(item.Color)this.Canvas.fillStyle=item.Color;else this.Canvas.fillStyle=this.Color;var textWidth=this.Canvas.measureText(item.Symbol).width;this.Canvas.textAlign='center';var rtIcon=new Rect(x-fontSize/2,y-fontSize/2,fontSize,fontSize);if(x+textWidth/2>=right){this.Canvas.textAlign='right';x+=dataWidth/2;rtIcon.X=x-fontSize;}else if(x-textWidth/2<left){this.Canvas.textAlign='left';x-=dataWidth/2;rtIcon.X=x;}if(item.Baseline==1){this.Canvas.textBaseline='top';rtIcon.Y=y;}else if(item.Baseline==2){this.Canvas.textBaseline='bottom';rtIcon.Y=y-fontSize;}else{this.Canvas.textBaseline='middle';rtIcon.Y=y-fontSize/2;}if(this.IsHScreen){this.Canvas.save();this.Canvas.translate(y,x);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(item.Symbol,0,0);this.Canvas.restore();}else{if(IFrameSplitOperator.IsNumber(item.YMove))y+=item.YMove;this.Canvas.fillText(item.Symbol,x,y);if(item.Text)this.IconRect.push({Rect:rtIcon,Item:item,KItem:kItem});}if(item.Line){var price=item.Line.KData=="H"?kItem.High:kItem.Low;var yPrice=this.ChartFrame.GetYFromData(price,false);var yText=y;if(Array.isArray(item.Line.Offset)&&item.Line.Offset.length==2){if(yText>yPrice)//文字在下方
4107
+ {yText-=item.Line.Offset[1];yPrice+=item.Line.Offset[0];}else if(yText<yPrice){yText+=item.Line.Offset[1];yPrice-=item.Line.Offset[0];}}this.Canvas.save();if(item.Line.Dash)this.Canvas.setLineDash(item.Line.Dash);//虚线
4108
+ if(item.Line.Width>0)this.Canvas.lineWidth=item.Line.Width;//线宽
4109
+ this.Canvas.strokeStyle=item.Line.Color;this.Canvas.beginPath();if(this.IsHScreen){this.Canvas.moveTo(yText,ToFixedPoint(x));this.Canvas.lineTo(yPrice,ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),yText);this.Canvas.lineTo(ToFixedPoint(x),yPrice);}this.Canvas.stroke();this.Canvas.restore();}}};this.GetTooltipData=function(x,y,tooltip){if(!IFrameSplitOperator.IsNonEmptyArray(this.IconRect))return false;for(var i=0;i<this.IconRect.length;++i){var item=this.IconRect[i];if(!item.Rect)continue;var rect=item.Rect;this.Canvas.beginPath();this.Canvas.rect(rect.X,rect.Y,rect.Width,rect.Height);if(this.Canvas.isPointInPath(x,y)){JSConsole.Chart.Log('[ChartMultiSVGIconV2::GetTooltipData] icon ',item);tooltip.Data=item;tooltip.ChartPaint=this;tooltip.Type=4;//指标
4110
+ return true;}}return false;};this.GetMaxMin=function(){this.IsHScreen=this.ChartFrame.IsHScreen===true;var range={Min:null,Max:null};if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return range;if(!this.MapCache||this.MapCache.size<=0)return;var xPointCount=this.ChartFrame.XPointCount;for(var i=this.Data.DataOffset,j=0,k=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var kItem=this.Data.Data[i];var key=this.BuildKey(kItem);if(!this.MapCache.has(key))continue;var mapItem=this.MapCache.get(key);if(!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data))continue;for(k=0;k<mapItem.Data.length;++k){var item=mapItem.Data[k];var value=item.Value;if(IFrameSplitOperator.IsString(item.Value))value=this.GetKValue(kItem,item.Value);if(!IFrameSplitOperator.IsNumber(value))continue;if(range.Max==null)range.Max=value;else if(range.Max<value)range.Max=value;if(range.Min==null)range.Min=value;else if(range.Min>value)range.Min=value;}}return range;};}// 多dom节点
4098
4111
  function ChartMultiHtmlDom(){this.newMethod=IChartPainting;//派生
4099
4112
  this.newMethod();delete this.newMethod;this.ClassName="ChartMultiHtmlDom";this.Texts=[];//[ {Index:, Value:, Text: ] Text=dom内容
4100
4113
  this.IsHScreen=false;//是否横屏
@@ -11298,8 +11311,8 @@ chart.Lines=varItem.Draw.DrawData;if(varItem.Draw.Name)chart.Name=varItem.Draw.N
11298
11311
  {var item=varItem.Draw.Arrow;if(item.Start==true)chart.Arrow.Start=true;if(item.End==true)chart.Arrow.End=true;if(IFrameSplitOperator.IsNumber(item.Angle))chart.ArrawAngle=item.Angle;if(IFrameSplitOperator.IsNumber(item.Length))chart.ArrawLength=item.Length;if(IFrameSplitOperator.IsNumber(item.LineWidth))chart.ArrawLineWidth=item.LineWidth;}this.ReloadChartResource(hqChart,windowIndex,chart);hqChart.ChartPaint.push(chart);var titleIndex=windowIndex+1;var titleData=new DynamicTitleData(chart.Data,chart.Name,null);titleData.DataType="ChartMultiLine";titleData.Lines=chart.Lines;hqChart.TitlePaint[titleIndex].Data[i]=titleData;};this.CreateMultiPoint=function(hqChart,windowIndex,varItem,i){var chart=new ChartMultiPoint();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11299
11312
  chart.PointGroup=varItem.Draw.DrawData;if(varItem.Draw.Name)chart.Name=varItem.Draw.Name;hqChart.ChartPaint.push(chart);var titleIndex=windowIndex+1;var titleData=new DynamicTitleData(chart.Data,chart.Name,null);titleData.DataType="ChartMultiPoint";titleData.PointGroup=chart.PointGroup;hqChart.TitlePaint[titleIndex].Data[i]=titleData;};this.CreateMultiBar=function(hqChart,windowIndex,varItem,id){var chart=new ChartMultiBar();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11300
11313
  chart.Bars=varItem.Draw.DrawData;var titleIndex=windowIndex+1;var titleData=new DynamicTitleData({KData:chart.Data,BarData:chart.Bars},varItem.Name,null);titleData.IsShow=false;titleData.DataType="MULTI_BAR";hqChart.TitlePaint[titleIndex].Data[id]=titleData;hqChart.ChartPaint.push(chart);};this.CreateMultiText=function(hqChart,windowIndex,varItem,i){var chart=new ChartMultiText();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11301
- chart.Texts=varItem.Draw.DrawData;hqChart.ChartPaint.push(chart);};this.CreateMultiSVGIcon=function(hqChart,windowIndex,varItem,i){var chart=new ChartMultiSVGIcon();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11302
- chart.Family=varItem.Draw.DrawData.Family;chart.Icon=varItem.Draw.DrawData.Icon;hqChart.ChartPaint.push(chart);};this.CreateChartDrawSVG=function(hqChart,windowIndex,varItem,i){var chart=new ChartDrawSVG();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;if(hqChart.ChartPaint[0].IsMinuteFrame())chart.Data=hqChart.SourceData;else chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11314
+ chart.Texts=varItem.Draw.DrawData;hqChart.ChartPaint.push(chart);};this.CreateMultiSVGIcon=function(hqChart,windowIndex,varItem,i){var chart=new ChartMultiSVGIconV2();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11315
+ chart.Family=varItem.Draw.DrawData.Family;chart.AryIcon=varItem.Draw.DrawData.Icon;chart.BuildCacheData();hqChart.ChartPaint.push(chart);};this.CreateChartDrawSVG=function(hqChart,windowIndex,varItem,i){var chart=new ChartDrawSVG();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;if(hqChart.ChartPaint[0].IsMinuteFrame())chart.Data=hqChart.SourceData;else chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11303
11316
  if(IFrameSplitOperator.IsBool(varItem.Draw.DrawData.EnableTooltip))chart.EnableTooltip=varItem.Draw.DrawData.EnableTooltip;if(IFrameSplitOperator.IsBool(varItem.Draw.DrawData.IsDrawFirst))chart.IsDrawFirst=varItem.Draw.DrawData.IsDrawFirst;chart.Family=varItem.Draw.DrawData.Family;chart.TextFont=varItem.Draw.DrawData.TextFont;chart.Texts=varItem.Draw.DrawData.Data;hqChart.ChartPaint.push(chart);};this.CreateMulitHtmlDom=function(hqChart,windowIndex,varItem,i){var chart=new ChartMultiHtmlDom();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.HQChart=hqChart;chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11304
11317
  chart.Texts=varItem.Draw.DrawData;chart.DrawCallback=varItem.Draw.Callback;hqChart.ChartPaint.push(chart);};this.CreateStackedBar=function(hqChart,windowIndex,varItem,i){var chart=new ChartStackedBar();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.HQChart=hqChart;chart.Identify=this.Guid;chart.Data.Data=varItem.Draw.DrawData;if(IFrameSplitOperator.IsNonEmptyArray(varItem.Draw.BarColor))chart.BarColor=varItem.Draw.BarColor;if(IFrameSplitOperator.IsNonEmptyArray(varItem.Draw.BarName))chart.BarName=varItem.Draw.BarName;if(IFrameSplitOperator.IsNumber(varItem.Draw.LineWidth))chart.LineWidth=varItem.Draw.LineWidth;if(IFrameSplitOperator.IsNumber(varItem.Draw.BarType))chart.BarType=varItem.Draw.BarType;hqChart.ChartPaint.push(chart);var titleIndex=windowIndex+1;var titleData=new DynamicTitleData(chart.Data,chart.BarName,chart.BarColor);titleData.DataType="ChartStackedBar";hqChart.TitlePaint[titleIndex].Data[i]=titleData;};this.CreateKLineTable=function(hqChart,windowIndex,varItem,i){var chart=new ChartKLineTable();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.HQChart=hqChart;chart.Identify=this.Guid;chart.Data.Data=varItem.Draw.DrawData;if(IFrameSplitOperator.IsNumber(varItem.Draw.RowCount))chart.RowCount=varItem.Draw.RowCount;if(IFrameSplitOperator.IsBool(varItem.Draw.IsShowRowName))chart.IsShowRowName=varItem.Draw.IsShowRowName;if(IFrameSplitOperator.IsNonEmptyArray(varItem.Draw.RowName))chart.RowName=varItem.Draw.RowName;if(varItem.Draw.BGColor)chart.BGColor=varItem.Draw.BGColor;hqChart.ChartPaint.push(chart);var titleIndex=windowIndex+1;var titleData=new DynamicTitleData(chart.Data,chart.BarName,chart.BarColor);titleData.DataType="ChartKLineTable";hqChart.TitlePaint[titleIndex].Data[i]=titleData;};this.CreateScatterPlot=function(hqChart,windowIndex,varItem,i){var chart=new ChartScatterPlot();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.HQChart=hqChart;chart.Identify=this.Guid;chart.Data.Data=varItem.Draw.DrawData;chart.Color=varItem.Draw.Color;chart.Radius=varItem.Draw.Radius;hqChart.ChartPaint.push(chart);};this.CreateColorKLine=function(hqChart,windowIndex,varItem,i){var chart=new ChartColorKline();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11305
11318
  chart.KLineColor=varItem.Draw.DrawData.KLine;if(varItem.Color)chart.Color=varItem.Color;hqChart.ChartPaint.push(chart);};this.CreateRectangle=function(hqChart,windowIndex,varItem,i){var chart=new ChartRectangle();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.Color=[varItem.Draw.DrawData.Color];chart.Rect=varItem.Draw.DrawData.Rect;if(varItem.Color)chart.BorderColor=this.GetColor(varItem.Color);hqChart.ChartPaint.push(chart);};this.CreateScriptOverlayLine=function(hqChart,windowIndex,varItem,i){var chart=new ChartOverlayLine();chart.Canvas=hqChart.Canvas;chart.DrawType=1;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;if(varItem.Color)chart.Color=this.GetColor(varItem.Color);else chart.Color=this.GetDefaultColor(i);if(varItem.LineWidth){var width=parseInt(varItem.LineWidth.replace("LINETHICK",""));if(!isNaN(width)&&width>0)chart.LineWidth=width;}if(varItem.IsDotLine)chart.IsDotLine=true;//虚线
@@ -11422,8 +11435,8 @@ chart.Lines=varItem.Draw.DrawData;if(varItem.Draw.LineDash)chart.LineDash=varIte
11422
11435
  {var item=varItem.Draw.Arrow;if(item.Start==true)chart.Arrow.Start=true;if(item.End==true)chart.Arrow.End=true;if(IFrameSplitOperator.IsNumber(item.Angle))chart.ArrawAngle=item.Angle;if(IFrameSplitOperator.IsNumber(item.Length))chart.ArrawLength=item.Length;if(IFrameSplitOperator.IsNumber(item.LineWidth))chart.ArrawLineWidth=item.LineWidth;}this.ReloadChartResource(hqChart,windowIndex,chart);frame.ChartPaint.push(chart);};this.CreateMultiPoint=function(hqChart,windowIndex,varItem,i){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartMultiPoint();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11423
11436
  chart.PointGroup=varItem.Draw.DrawData;frame.ChartPaint.push(chart);};this.CreateBackgroud=function(hqChart,windowIndex,varItem,i){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartBackground();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;if(varItem.Draw&&varItem.Draw.DrawData){var drawData=varItem.Draw.DrawData;chart.Color=drawData.Color;chart.ColorAngle=drawData.Angle;if(drawData.Data)chart.Data.Data=drawData.Data;}frame.ChartPaint.push(chart);};this.CreateMultiBar=function(hqChart,windowIndex,varItem,id){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartMultiBar();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11424
11437
  chart.Bars=varItem.Draw.DrawData;var titleIndex=windowIndex+1;var titlePaint=hqChart.TitlePaint[titleIndex];var titleData=new DynamicTitleData({KData:chart.Data,BarData:chart.Bars},varItem.Name,null);titleData.IsShow=false;titleData.DataType="MULTI_BAR";titlePaint.OverlayIndex.get(overlayIndex.Identify).Data[id]=titleData;frame.ChartPaint.push(chart);};this.CreateMultiText=function(hqChart,windowIndex,varItem,i){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartMultiText();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11425
- chart.Texts=varItem.Draw.DrawData;frame.ChartPaint.push(chart);};this.CreateMultiSVGIcon=function(hqChart,windowIndex,varItem,i){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartMultiSVGIcon();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11426
- chart.Family=varItem.Draw.DrawData.Family;chart.Icon=varItem.Draw.DrawData.Icon;frame.ChartPaint.push(chart);};this.CreateChartDrawSVG=function(hqChart,windowIndex,varItem,i){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartDrawSVG();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;if(hqChart.ChartPaint[0].IsMinuteFrame())chart.Data=hqChart.SourceData;else chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11438
+ chart.Texts=varItem.Draw.DrawData;frame.ChartPaint.push(chart);};this.CreateMultiSVGIcon=function(hqChart,windowIndex,varItem,i){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartMultiSVGIconV2();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11439
+ chart.Family=varItem.Draw.DrawData.Family;chart.AryIcon=varItem.Draw.DrawData.Icon;chart.BuildCacheData();frame.ChartPaint.push(chart);};this.CreateChartDrawSVG=function(hqChart,windowIndex,varItem,i){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartDrawSVG();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;if(hqChart.ChartPaint[0].IsMinuteFrame())chart.Data=hqChart.SourceData;else chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11427
11440
  if(IFrameSplitOperator.IsBool(varItem.Draw.DrawData.EnableTooltip))chart.EnableTooltip=varItem.Draw.DrawData.EnableTooltip;if(IFrameSplitOperator.IsBool(varItem.Draw.DrawData.IsDrawFirst))chart.IsDrawFirst=varItem.Draw.DrawData.IsDrawFirst;chart.Family=varItem.Draw.DrawData.Family;chart.TextFont=varItem.Draw.DrawData.TextFont;chart.Texts=varItem.Draw.DrawData.Data;if(varItem.Draw.AutoPosition)chart.AutoPosition=varItem.Draw.AutoPosition;this.ReloadChartResource(hqChart,windowIndex,chart);frame.ChartPaint.push(chart);};this.CreateMulitHtmlDom=function(hqChart,windowIndex,varItem,i){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartMultiHtmlDom();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;chart.HQChart=hqChart;chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
11428
11441
  chart.Texts=varItem.Draw.DrawData;chart.DrawCallback=varItem.Draw.Callback;frame.ChartPaint.push(chart);};this.CreateChartVericaltLine=function(hqChart,windowIndex,varItem,id){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartVericaltLine();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;chart.HQChart=hqChart;if(varItem.Color)chart.Color=this.GetColor(varItem.Color);else chart.Color=this.GetDefaultColor(id);if(varItem.LineWidth){var width=parseInt(varItem.LineWidth.replace("LINETHICK",""));if(!isNaN(width)&&width>0)chart.LineWidth=width;}this.SetChartLineDash(chart,varItem.Draw.DrawData);chart.Data.Data=varItem.Draw.DrawData.Data;frame.ChartPaint.push(chart);};this.CreateChartHorizontalLine=function(hqChart,windowIndex,varItem,id){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartHorizontalLine();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;chart.HQChart=hqChart;if(varItem.Color)chart.Color=this.GetColor(varItem.Color);else chart.Color=this.GetDefaultColor(id);if(varItem.LineWidth){var width=parseInt(varItem.LineWidth.replace("LINETHICK",""));if(!isNaN(width)&&width>0)chart.LineWidth=width;}this.SetChartLineDash(chart,varItem.Draw.DrawData);chart.ExtendType=varItem.Draw.DrawData.Extend;chart.Data.Data=varItem.Draw.DrawData.Data;frame.ChartPaint.push(chart);};//创建K线
11429
11442
  this.CreateSelfKLine=function(hqChart,windowIndex,hisData){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartKLine();chart.Canvas=hqChart.Canvas;chart.Name="Self Kline";chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;chart.Data=hisData;chart.IsShowMaxMinPrice=false;chart.IsShowKTooltip=false;chart.DrawType=this.KLineType;frame.ChartPaint.push(chart);};//给一个默认的颜色
@@ -11485,7 +11498,7 @@ if(item.isexdata==true)outVarItem.IsExData=true;if(item.BreakPoint)outVarItem.Br
11485
11498
  {drawItem.Icon=draw.Icon;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingArray(draw.DrawData,date,time,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='DRAWTEXT')//文本
11486
11499
  {drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingArray(draw.DrawData,date,time,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='STICKLINE')//柱子
11487
11500
  {drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.Width=draw.Width;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingArray(draw.DrawData,date,time,hqChart,1);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=="DRAWBAND"){drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingArray(draw.DrawData,date,time,hqChart,1);drawItem.Color=draw.Color;outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_LINE'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMultiLine(draw.DrawData,date,time,hqChart);if(IFrameSplitOperator.IsNonEmptyArray(drawItem.DrawData)){for(var k=0;k<drawItem.DrawData.length;++k){this.GetKLineData(drawItem.DrawData[k].Point,hqChart);}}outVarItem.Draw=drawItem;if(draw.LineDash)drawItem.LineDash=draw.LineDash;if(IFrameSplitOperator.IsBool(draw.IsFullRangeMaxMin))drawItem.IsFullRangeMaxMin=draw.IsFullRangeMaxMin;if(draw.Arrow)drawItem.Arrow=draw.Arrow;if(IFrameSplitOperator.IsNumber(draw.LineWidth))drawItem.LineWidth=draw.LineWidth;result.push(outVarItem);}else if(draw.DrawType=='MULTI_POINT'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMultiLine(draw.DrawData,date,time,hqChart);if(IFrameSplitOperator.IsNonEmptyArray(drawItem.DrawData)){for(var k=0;k<drawItem.DrawData.length;++k){this.GetKLineData(drawItem.DrawData[k].Point,hqChart);}}outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_BAR'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMultiLine(draw.DrawData,date,time,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType==SCRIPT_CHART_NAME.OVERLAY_BARS){drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.DrawType=draw.DrawType;drawItem.BarName=draw.BarName;drawItem.BarColor=draw.BarColor;drawItem.LineWidth=draw.LineWidth;drawItem.BarType=draw.BarType;drawItem.DrawData=this.FittingArray(draw.DrawData,date,time,hqChart,1);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType==SCRIPT_CHART_NAME.SCATTER_PLOT){drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingArray(draw.DrawData,date,time,hqChart,1);//默认的值
11488
- drawItem.Color=draw.Color;drawItem.Radius=draw.Radius;outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType==SCRIPT_CHART_NAME.KLINE_TABLE){drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingArray(draw.DrawData,date,time,hqChart,1);drawItem.RowCount=draw.RowCount;drawItem.RowName=draw.RowName;drawItem.IsShowRowName=draw.IsShowRowName;drawItem.BGColor=draw.BGColor;outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_TEXT'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMultiText(draw.DrawData,date,time,hqChart);this.GetKLineData(drawItem.DrawData,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_SVGICON'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData={Icon:this.FittingMultiText(draw.DrawData.Icon,date,time,hqChart),Family:draw.DrawData.Family};this.GetKLineData(drawItem.DrawData.Icon,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='DRAWSVG'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;if(draw.AutoPosition)drawItem.AutoPosition=draw.AutoPosition;drawItem.DrawData={Data:this.FittingMultiText(draw.Data,date,time,hqChart),Family:draw.Family,TextFont:draw.TextFont,EnableTooltip:draw.EnableTooltip,IsDrawFirst:draw.IsDrawFirst};this.GetKLineData(drawItem.DrawData.Data,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=="MULTI_HTMLDOM")//外部自己创建dom
11501
+ drawItem.Color=draw.Color;drawItem.Radius=draw.Radius;outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType==SCRIPT_CHART_NAME.KLINE_TABLE){drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingArray(draw.DrawData,date,time,hqChart,1);drawItem.RowCount=draw.RowCount;drawItem.RowName=draw.RowName;drawItem.IsShowRowName=draw.IsShowRowName;drawItem.BGColor=draw.BGColor;outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_TEXT'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMultiText(draw.DrawData,date,time,hqChart);this.GetKLineData(drawItem.DrawData,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_SVGICON'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData={Icon:draw.DrawData.Icon,Family:draw.DrawData.Family};outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='DRAWSVG'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;if(draw.AutoPosition)drawItem.AutoPosition=draw.AutoPosition;drawItem.DrawData={Data:this.FittingMultiText(draw.Data,date,time,hqChart),Family:draw.Family,TextFont:draw.TextFont,EnableTooltip:draw.EnableTooltip,IsDrawFirst:draw.IsDrawFirst};this.GetKLineData(drawItem.DrawData.Data,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=="MULTI_HTMLDOM")//外部自己创建dom
11489
11502
  {drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.Callback=draw.Callback;drawItem.DrawData=this.FittingMultiText(draw.DrawData,date,time,hqChart);this.GetKLineData(drawItem.DrawData,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=="COLOR_KLINE"){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;var klineOption=this.FittingMultiText(draw.DrawData.KLine,date,time,hqChart);var mapKLineOption=new _map2.default();for(var i in klineOption){var item=klineOption[i];mapKLineOption.set(item.Index,item);}drawItem.DrawData={KLine:mapKLineOption};if(draw.Color)outVarItem.Color=draw.Color;outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=="KLINE_BG"){drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData={};drawItem.DrawData.Color=draw.Color;drawItem.DrawData.Angle=draw.Angle;if(draw.Ver==2.0)drawItem.DrawData.Data=this.FittingKLineBG_V2(draw.DrawData,hqChart);else drawItem.DrawData.Data=this.FittingKLineBG(draw.DrawData,hqChart);outVarItem.Draw=drawItem;outVarItem.Name=draw.DrawType;result.push(outVarItem);}else if(draw.DrawType=='MULTI_POINT_LINE'){drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData={};drawItem.DrawData.Color=draw.Color;drawItem.DrawData.PointRadius=draw.PointRadius;drawItem.DrawData.PointColor=draw.PointColor;drawItem.DrawData.LineWidth=draw.LineWidth;drawItem.DrawData.Data=this.FittingMultiPointLine(draw.DrawData,hqChart);outVarItem.Draw=drawItem;//outVarItem.Name=draw.DrawType;
11490
11503
  result.push(outVarItem);}else if(draw.DrawType=="PARTLINE"){drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingArray(draw.DrawData,date,time,hqChart,1);outVarItem.Draw=drawItem;if(draw.LineWidth)outVarItem.LineWidth=draw.LineWidth;result.push(outVarItem);}else{var find=g_ScriptIndexChartFactory.Get(draw.DrawType);//外部挂接
11491
11504
  if(find&&find.KLineFittingCallback){if(find.KLineFittingCallback(item,outVarItem,{Date:date,Time:time,HQChart:hqChart},this))result.push(outVarItem);}}}}return result;};// h, high, low l. c, close
@@ -11501,7 +11514,7 @@ var result=[];if(ChartData.IsDayPeriod(hqChart.Period,true))//日线
11501
11514
  {var aryRange=[];for(var i=0;i<data.length;++i){var item=data[i];var startDatetime=item.Start.Date*10000;if(IFrameSplitOperator.IsNumber(item.Start.Time))startDatetime+=item.Start.Time;var endDatetime=item.End.Date*10000;if(IFrameSplitOperator.IsNumber(item.End.Time))endDatetime+=item.End.Time;aryRange.push({Start:startDatetime,End:endDatetime});}var bFill=false;for(var i=0,j=0;i<kData.Data.length;++i){result[i]=0;var kItem=kData.Data[i];var date=kItem.Date*10000+kItem.Time;for(j=0;j<aryRange.length;++j){var rangeItem=aryRange[j];if(date>=rangeItem.Start&&date<=rangeItem.End){result[i]=1;bFill=true;break;}}}if(bFill)return result;}return null;};this.FittingMinuteData=function(jsonData,hqChart){var outVar=jsonData.outvar;var date=jsonData.date;var time=jsonData.time;var result=[];for(var i=0;i<outVar.length;++i){var item=outVar[i];var outVarItem={Name:item.name,Type:item.type};if(item.data){outVarItem.Data=this.FittingMinuteArray(item.data,date,time,hqChart);if(item.color)outVarItem.Color=item.color;if(item.linewidth>=1)outVarItem.LineWidth=item.linewidth;if(item.isshow==false)outVarItem.IsShow=false;if(item.isexdata==true)outVarItem.IsExData=true;if(item.BreakPoint)outVarItem.BreakPoint=item.BreakPoint;result.push(outVarItem);}else if(item.Draw){var draw=item.Draw;var drawItem={};if(draw.DrawType=='DRAWICON')//图标
11502
11515
  {drawItem.Icon=draw.Icon;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='DRAWTEXT')//文本
11503
11516
  {drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='STICKLINE')//柱子
11504
- {drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.Width=draw.Width;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart,1);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType==SCRIPT_CHART_NAME.OVERLAY_BARS){drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.DrawType=draw.DrawType;drawItem.BarName=draw.BarName;drawItem.BarColor=draw.BarColor;drawItem.LineWidth=draw.LineWidth;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart,1);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_LINE'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMultiLine(draw.DrawData,date,time,hqChart);for(var k in drawItem.DrawData){this.GetKLineData(drawItem.DrawData[k].Point,hqChart);}outVarItem.Draw=drawItem;if(draw.LineDash)drawItem.LineDash=draw.LineDash;if(draw.Arrow)drawItem.Arrow=draw.Arrow;result.push(outVarItem);}else if(draw.DrawType=='MULTI_POINT'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMultiLine(draw.DrawData,date,time,hqChart);if(IFrameSplitOperator.IsNonEmptyArray(drawItem.DrawData)){for(var k=0;k<drawItem.DrawData.length;++k){this.GetKLineData(drawItem.DrawData[k].Point,hqChart);}}outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_TEXT'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMultiText(draw.DrawData,date,time,hqChart);this.GetKLineData(drawItem.DrawData,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_SVGICON'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData={Icon:this.FittingMultiText(draw.DrawData.Icon,date,time,hqChart),Family:draw.DrawData.Family};this.GetKLineData(drawItem.DrawData.Icon,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='DRAWSVG'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;if(draw.AutoPosition)drawItem.AutoPosition=draw.AutoPosition;drawItem.DrawData={Data:this.FittingMultiText(draw.Data,date,time,hqChart),Family:draw.Family,TextFont:draw.TextFont,EnableTooltip:draw.EnableTooltip,IsDrawFirst:draw.IsDrawFirst};this.GetKLineData(drawItem.DrawData.Data,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=="MULTI_HTMLDOM")//外部自己创建dom
11517
+ {drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.Width=draw.Width;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart,1);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType==SCRIPT_CHART_NAME.OVERLAY_BARS){drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.DrawType=draw.DrawType;drawItem.BarName=draw.BarName;drawItem.BarColor=draw.BarColor;drawItem.LineWidth=draw.LineWidth;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart,1);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_LINE'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMultiLine(draw.DrawData,date,time,hqChart);for(var k in drawItem.DrawData){this.GetKLineData(drawItem.DrawData[k].Point,hqChart);}outVarItem.Draw=drawItem;if(draw.LineDash)drawItem.LineDash=draw.LineDash;if(draw.Arrow)drawItem.Arrow=draw.Arrow;result.push(outVarItem);}else if(draw.DrawType=='MULTI_POINT'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMultiLine(draw.DrawData,date,time,hqChart);if(IFrameSplitOperator.IsNonEmptyArray(drawItem.DrawData)){for(var k=0;k<drawItem.DrawData.length;++k){this.GetKLineData(drawItem.DrawData[k].Point,hqChart);}}outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_TEXT'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMultiText(draw.DrawData,date,time,hqChart);this.GetKLineData(drawItem.DrawData,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_SVGICON'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData={Icon:draw.DrawData.Icon,Family:draw.DrawData.Family};outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='DRAWSVG'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;if(draw.AutoPosition)drawItem.AutoPosition=draw.AutoPosition;drawItem.DrawData={Data:this.FittingMultiText(draw.Data,date,time,hqChart),Family:draw.Family,TextFont:draw.TextFont,EnableTooltip:draw.EnableTooltip,IsDrawFirst:draw.IsDrawFirst};this.GetKLineData(drawItem.DrawData.Data,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=="MULTI_HTMLDOM")//外部自己创建dom
11505
11518
  {drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.Callback=draw.Callback;drawItem.DrawData=this.FittingMultiText(draw.DrawData,date,time,hqChart);this.GetKLineData(drawItem.DrawData,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else{var find=g_ScriptIndexChartFactory.Get(draw.DrawType);//外部挂接
11506
11519
  if(find&&find.MinuteFittingCallback){if(find.MinuteFittingCallback(item,outVarItem,{Date:date,Time:time,HQChart:hqChart},this))result.push(outVarItem);}}}}return result;};//matchType 0=精确匹配(默认) 5=模糊匹配
11507
11520
  this.FittingMinuteArray=function(sourceData,date,time,hqChart,matchType){var minutedata=hqChart.SourceData;;//分钟线
@@ -12626,7 +12639,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
12626
12639
  this.ExecuteScript(item,data);}this.Status=0;}};this.OnExecuteFinish=function(data,indexInfo,jsExectute,jobInfo){var message={Data:data,IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.FINISH_EXECUTE_SCRIPT,JobInfo:jobInfo};postMessage(message);};this.OnExecuteError=function(error,indexInfo,jobData){var message={IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.ERROR_EXECUTE_SCRIPT,Error:error};postMessage(message);};}/********************************************************************************
12627
12640
  * 版本信息输出
12628
12641
  *
12629
- */var HQCHART_VERSION="1.1.13008";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
12642
+ */var HQCHART_VERSION="1.1.13013";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
12630
12643
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
12631
12644
  // BaseIndex:BaseIndex,
12632
12645
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.13009",
3
+ "version": "1.1.13014",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -21059,7 +21059,7 @@ function ScriptIndex(name,script,args,option)
21059
21059
 
21060
21060
  this.CreateMultiSVGIcon=function(hqChart,windowIndex,varItem,i)
21061
21061
  {
21062
- let chart=new ChartMultiSVGIcon();
21062
+ let chart=new ChartMultiSVGIconV2();
21063
21063
  chart.Canvas=hqChart.Canvas;
21064
21064
  chart.Name=varItem.Name;
21065
21065
  chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
@@ -21067,7 +21067,8 @@ function ScriptIndex(name,script,args,option)
21067
21067
 
21068
21068
  chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
21069
21069
  chart.Family=varItem.Draw.DrawData.Family;
21070
- chart.Icon= varItem.Draw.DrawData.Icon;
21070
+ chart.AryIcon= varItem.Draw.DrawData.Icon;
21071
+ chart.BuildCacheData();
21071
21072
  hqChart.ChartPaint.push(chart);
21072
21073
  }
21073
21074
 
@@ -22723,7 +22724,7 @@ function OverlayScriptIndex(name,script,args,option)
22723
22724
  {
22724
22725
  var overlayIndex=this.OverlayIndex;
22725
22726
  var frame=overlayIndex.Frame;
22726
- let chart=new ChartMultiSVGIcon();
22727
+ let chart=new ChartMultiSVGIconV2();
22727
22728
  chart.Canvas=hqChart.Canvas;
22728
22729
  chart.Name=varItem.Name;
22729
22730
  chart.ChartBorder=frame.Frame.ChartBorder;
@@ -22732,7 +22733,8 @@ function OverlayScriptIndex(name,script,args,option)
22732
22733
 
22733
22734
  chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
22734
22735
  chart.Family=varItem.Draw.DrawData.Family;
22735
- chart.Icon= varItem.Draw.DrawData.Icon;
22736
+ chart.AryIcon= varItem.Draw.DrawData.Icon;
22737
+ chart.BuildCacheData();
22736
22738
  frame.ChartPaint.push(chart);
22737
22739
  }
22738
22740
 
@@ -23822,8 +23824,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
23822
23824
  drawItem.Text=draw.Text;
23823
23825
  drawItem.Name=draw.Name;
23824
23826
  drawItem.DrawType=draw.DrawType;
23825
- drawItem.DrawData={ Icon:this.FittingMultiText(draw.DrawData.Icon,date,time,hqChart), Family:draw.DrawData.Family };
23826
- this.GetKLineData(drawItem.DrawData.Icon, hqChart);
23827
+ drawItem.DrawData={ Icon:draw.DrawData.Icon, Family:draw.DrawData.Family };
23827
23828
  outVarItem.Draw=drawItem;
23828
23829
 
23829
23830
  result.push(outVarItem);
@@ -24223,8 +24224,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
24223
24224
  drawItem.Text=draw.Text;
24224
24225
  drawItem.Name=draw.Name;
24225
24226
  drawItem.DrawType=draw.DrawType;
24226
- drawItem.DrawData={ Icon:this.FittingMultiText(draw.DrawData.Icon,date,time,hqChart), Family:draw.DrawData.Family };
24227
- this.GetKLineData(drawItem.DrawData.Icon, hqChart);
24227
+ drawItem.DrawData={ Icon:draw.DrawData.Icon, Family:draw.DrawData.Family };
24228
24228
  outVarItem.Draw=drawItem;
24229
24229
 
24230
24230
  result.push(outVarItem);
@@ -36767,6 +36767,300 @@ function ChartMultiSVGIcon()
36767
36767
  }
36768
36768
  }
36769
36769
 
36770
+
36771
+ //图标集合(2.0) 支持横屏
36772
+ function ChartMultiSVGIconV2()
36773
+ {
36774
+ this.newMethod=IChartPainting; //派生
36775
+ this.newMethod();
36776
+ delete this.newMethod;
36777
+
36778
+ this.ClassName="ChartMultiSVGIconV2";
36779
+ this.AryIcon; //[ {Index:, Value:, Symbol:, Color:, Baseline:, Line:{ Color:, Dash:[虚线点], KData:"H/L", Offset:[5,10], Width:线粗细 } } ]
36780
+ this.IconSize=
36781
+ {
36782
+ Max: g_JSChartResource.DRAWICON.Icon.MaxSize, Min:g_JSChartResource.DRAWICON.Icon.MinSize , //图标的最大最小值
36783
+ Zoom:{ Type:g_JSChartResource.DRAWICON.Icon.Zoom.Type , Value:g_JSChartResource.DRAWICON.Icon.Zoom.Value } //放大倍数
36784
+ };
36785
+ this.Family;
36786
+ this.Color=g_JSChartResource.DefaultTextColor;
36787
+ this.IsHScreen=false;
36788
+ this.IconRect=[]; //0=序号,1=区域
36789
+
36790
+ this.MapCache=null; //key=date/date-time value={ Data:[] }
36791
+
36792
+ this.BuildKey=function(item)
36793
+ {
36794
+ if (IFrameSplitOperator.IsNumber(item.Time)) return `${item.Date}-${item.Time}`;
36795
+ else return item.Date;
36796
+ }
36797
+
36798
+ this.BuildCacheData=function()
36799
+ {
36800
+ var mapData=new Map();
36801
+ this.MapCache=mapData;
36802
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon)) return;
36803
+
36804
+ for(var i=0;i<this.AryIcon.length;++i)
36805
+ {
36806
+ var item=this.AryIcon[i];
36807
+ var key=this.BuildKey(item);
36808
+ if (mapData.has(key))
36809
+ {
36810
+ var mapItem=mapData.get(key);
36811
+ mapItem.Data.push(item);
36812
+ }
36813
+ else
36814
+ {
36815
+ mapData.set(key,{ Data:[item] });
36816
+ }
36817
+ }
36818
+ }
36819
+
36820
+ this.Draw=function()
36821
+ {
36822
+ this.IconRect=[];
36823
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
36824
+ if (this.IsShowIndexTitleOnly()) return;
36825
+ if (this.IsHideScriptIndex()) return;
36826
+ if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return; //k线数据
36827
+ if (!this.Family) return;
36828
+ if (!this.MapCache || this.MapCache.size<=0) return;
36829
+
36830
+ this.IsHScreen=(this.ChartFrame.IsHScreen===true);
36831
+ var xPointCount=this.ChartFrame.XPointCount;
36832
+ var dataWidth=this.ChartFrame.DataWidth;
36833
+ var distanceWidth=this.ChartFrame.DistanceWidth;
36834
+ var isMinute=this.IsMinuteFrame();
36835
+
36836
+ var border=this.GetBorder();
36837
+ if (this.IsHScreen)
36838
+ {
36839
+ var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
36840
+ var chartright=border.BottomEx;
36841
+ var chartLeft=border.TopEx;
36842
+ }
36843
+ else
36844
+ {
36845
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
36846
+ var chartright=border.RightEx;
36847
+ var chartLeft=border.LeftEx;
36848
+ }
36849
+
36850
+ var fontSize=this.GetDynamicIconSize(dataWidth,distanceWidth,this.IconSize.Max,this.IconSize.Min,this.IconSize.Zoom);
36851
+ this.Canvas.font=fontSize+'px '+this.Family;
36852
+
36853
+ var drawInfo={ Left:chartLeft, Right:chartright, FontSize:fontSize, DataWidth:dataWidth, DistanceWidth:distanceWidth };
36854
+
36855
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
36856
+ {
36857
+ var kItem=this.Data.Data[i];
36858
+ var key=this.BuildKey(kItem);
36859
+ if (!this.MapCache.has(key)) continue;
36860
+ var mapItem=this.MapCache.get(key);
36861
+
36862
+ if (isMinute)
36863
+ {
36864
+ var x=this.ChartFrame.GetXFromIndex(j);
36865
+ }
36866
+ else
36867
+ {
36868
+ var left=xOffset;
36869
+ var right=xOffset+dataWidth;
36870
+ if (right>chartright) break;
36871
+ var x=left+(right-left)/2;
36872
+ }
36873
+
36874
+ this.DrawItem(mapItem, kItem, x, drawInfo);
36875
+ }
36876
+ }
36877
+
36878
+ this.GetKValue=function(kItem, valueName)
36879
+ {
36880
+ switch(valueName)
36881
+ {
36882
+ case "HIGH":
36883
+ case "H":
36884
+ return kItem.High;
36885
+ case "L":
36886
+ case "LOW":
36887
+ return kItem.Low;
36888
+ case "C":
36889
+ case "CLOSE":
36890
+ return kItem.Close;
36891
+ case "O":
36892
+ case "OPEN":
36893
+ return KItem.Open;
36894
+ default:
36895
+ return null;
36896
+ }
36897
+ }
36898
+
36899
+ this.DrawItem=function(groupItem, kItem, x, drawInfo)
36900
+ {
36901
+ if (!IFrameSplitOperator.IsNonEmptyArray(groupItem.Data)) return;
36902
+
36903
+ var fontSize=drawInfo.FontSize;
36904
+ var left=drawInfo.Left, right=drawInfo.Right;
36905
+ var dataWidth=drawInfo.DataWidth;
36906
+ //var distanceWidth=drawInfo.DistanceWidth;
36907
+
36908
+ for(var i=0;i<groupItem.Data.length;++i)
36909
+ {
36910
+ var item=groupItem.Data[i];
36911
+ var value=item.Value;
36912
+ if (IFrameSplitOperator.IsString(item.Value)) value=this.GetKValue(kItem,item.Value);
36913
+ if (!IFrameSplitOperator.IsNumber(value)) continue;
36914
+
36915
+ var y=this.ChartFrame.GetYFromData(item.Value,false);
36916
+
36917
+ if (item.Color) this.Canvas.fillStyle = item.Color;
36918
+ else this.Canvas.fillStyle = this.Color;
36919
+
36920
+ var textWidth=this.Canvas.measureText(item.Symbol).width;
36921
+ this.Canvas.textAlign='center';
36922
+ var rtIcon=new Rect(x-fontSize/2,y-fontSize/2,fontSize,fontSize);
36923
+ if (x+textWidth/2>=right)
36924
+ {
36925
+ this.Canvas.textAlign='right';
36926
+ x+=dataWidth/2;
36927
+ rtIcon.X=x-fontSize;
36928
+ }
36929
+ else if (x-textWidth/2<left)
36930
+ {
36931
+ this.Canvas.textAlign = 'left';
36932
+ x-=dataWidth/2;
36933
+ rtIcon.X=x;
36934
+ }
36935
+
36936
+ if (item.Baseline==1)
36937
+ {
36938
+ this.Canvas.textBaseline='top';
36939
+ rtIcon.Y=y;
36940
+ }
36941
+ else if (item.Baseline==2)
36942
+ {
36943
+ this.Canvas.textBaseline='bottom';
36944
+ rtIcon.Y=y-fontSize;
36945
+ }
36946
+ else
36947
+ {
36948
+ this.Canvas.textBaseline = 'middle';
36949
+ rtIcon.Y=y-fontSize/2;
36950
+ }
36951
+
36952
+ if (this.IsHScreen)
36953
+ {
36954
+ this.Canvas.save();
36955
+ this.Canvas.translate(y, x);
36956
+ this.Canvas.rotate(90 * Math.PI / 180);
36957
+ this.Canvas.fillText(item.Symbol,0,0);
36958
+ this.Canvas.restore();
36959
+ }
36960
+ else
36961
+ {
36962
+ if (IFrameSplitOperator.IsNumber(item.YMove)) y+=item.YMove;
36963
+ this.Canvas.fillText(item.Symbol, x, y);
36964
+ if (item.Text) this.IconRect.push({ Rect:rtIcon , Item:item, KItem:kItem });
36965
+ }
36966
+
36967
+ if (item.Line)
36968
+ {
36969
+ var price=item.Line.KData=="H"? kItem.High:kItem.Low;
36970
+ var yPrice=this.ChartFrame.GetYFromData(price, false);
36971
+ var yText=y;
36972
+ if (Array.isArray(item.Line.Offset) && item.Line.Offset.length==2)
36973
+ {
36974
+ if (yText>yPrice) //文字在下方
36975
+ {
36976
+ yText-=item.Line.Offset[1];
36977
+ yPrice+=item.Line.Offset[0]
36978
+ }
36979
+ else if (yText<yPrice)
36980
+ {
36981
+ yText+=item.Line.Offset[1];
36982
+ yPrice-=item.Line.Offset[0]
36983
+ }
36984
+ }
36985
+ this.Canvas.save();
36986
+ if (item.Line.Dash) this.Canvas.setLineDash(item.Line.Dash); //虚线
36987
+ if (item.Line.Width>0) this.Canvas.lineWidth=item.Line.Width; //线宽
36988
+ this.Canvas.strokeStyle = item.Line.Color;
36989
+ this.Canvas.beginPath();
36990
+ if (this.IsHScreen)
36991
+ {
36992
+ this.Canvas.moveTo(yText, ToFixedPoint(x));
36993
+ this.Canvas.lineTo(yPrice,ToFixedPoint(x));
36994
+ }
36995
+ else
36996
+ {
36997
+ this.Canvas.moveTo(ToFixedPoint(x),yText);
36998
+ this.Canvas.lineTo(ToFixedPoint(x),yPrice);
36999
+ }
37000
+
37001
+ this.Canvas.stroke();
37002
+ this.Canvas.restore();
37003
+ }
37004
+ }
37005
+ }
37006
+
37007
+ this.GetTooltipData=function(x,y,tooltip)
37008
+ {
37009
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.IconRect)) return false;
37010
+ for(var i=0; i<this.IconRect.length; ++i)
37011
+ {
37012
+ var item=this.IconRect[i];
37013
+ if (!item.Rect) continue;
37014
+ var rect=item.Rect;
37015
+ this.Canvas.beginPath();
37016
+ this.Canvas.rect(rect.X,rect.Y,rect.Width,rect.Height);
37017
+ if (this.Canvas.isPointInPath(x,y))
37018
+ {
37019
+ JSConsole.Chart.Log('[ChartMultiSVGIconV2::GetTooltipData] icon ', item);
37020
+ tooltip.Data=item;
37021
+ tooltip.ChartPaint=this;
37022
+ tooltip.Type=4; //指标
37023
+ return true;
37024
+ }
37025
+ }
37026
+
37027
+ return false;
37028
+ }
37029
+
37030
+ this.GetMaxMin=function()
37031
+ {
37032
+ this.IsHScreen=(this.ChartFrame.IsHScreen===true);
37033
+ var range={ Min:null, Max:null };
37034
+ if(!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return range;
37035
+ if (!this.MapCache || this.MapCache.size<=0) return;
37036
+ var xPointCount=this.ChartFrame.XPointCount;
37037
+
37038
+ for(var i=this.Data.DataOffset,j=0, k=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
37039
+ {
37040
+ var kItem=this.Data.Data[i];
37041
+ var key=this.BuildKey(kItem);
37042
+ if (!this.MapCache.has(key)) continue;
37043
+ var mapItem=this.MapCache.get(key);
37044
+ if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
37045
+
37046
+ for(k=0;k<mapItem.Data.length;++k)
37047
+ {
37048
+ var item=mapItem.Data[k];
37049
+ var value=item.Value;
37050
+ if (IFrameSplitOperator.IsString(item.Value)) value=this.GetKValue(kItem,item.Value);
37051
+ if (!IFrameSplitOperator.IsNumber(value)) continue;
37052
+
37053
+ if (range.Max==null) range.Max=value;
37054
+ else if (range.Max<value) range.Max=value;
37055
+ if (range.Min==null) range.Min=value;
37056
+ else if (range.Min>value) range.Min=value;
37057
+ }
37058
+ }
37059
+
37060
+ return range;
37061
+ }
37062
+ }
37063
+
36770
37064
  // 多dom节点
36771
37065
  function ChartMultiHtmlDom()
36772
37066
  {
@@ -40659,6 +40659,300 @@ function ChartMultiSVGIcon()
40659
40659
  }
40660
40660
  }
40661
40661
 
40662
+
40663
+ //图标集合(2.0) 支持横屏
40664
+ function ChartMultiSVGIconV2()
40665
+ {
40666
+ this.newMethod=IChartPainting; //派生
40667
+ this.newMethod();
40668
+ delete this.newMethod;
40669
+
40670
+ this.ClassName="ChartMultiSVGIconV2";
40671
+ this.AryIcon; //[ {Index:, Value:, Symbol:, Color:, Baseline:, Line:{ Color:, Dash:[虚线点], KData:"H/L", Offset:[5,10], Width:线粗细 } } ]
40672
+ this.IconSize=
40673
+ {
40674
+ Max: g_JSChartResource.DRAWICON.Icon.MaxSize, Min:g_JSChartResource.DRAWICON.Icon.MinSize , //图标的最大最小值
40675
+ Zoom:{ Type:g_JSChartResource.DRAWICON.Icon.Zoom.Type , Value:g_JSChartResource.DRAWICON.Icon.Zoom.Value } //放大倍数
40676
+ };
40677
+ this.Family;
40678
+ this.Color=g_JSChartResource.DefaultTextColor;
40679
+ this.IsHScreen=false;
40680
+ this.IconRect=[]; //0=序号,1=区域
40681
+
40682
+ this.MapCache=null; //key=date/date-time value={ Data:[] }
40683
+
40684
+ this.BuildKey=function(item)
40685
+ {
40686
+ if (IFrameSplitOperator.IsNumber(item.Time)) return `${item.Date}-${item.Time}`;
40687
+ else return item.Date;
40688
+ }
40689
+
40690
+ this.BuildCacheData=function()
40691
+ {
40692
+ var mapData=new Map();
40693
+ this.MapCache=mapData;
40694
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon)) return;
40695
+
40696
+ for(var i=0;i<this.AryIcon.length;++i)
40697
+ {
40698
+ var item=this.AryIcon[i];
40699
+ var key=this.BuildKey(item);
40700
+ if (mapData.has(key))
40701
+ {
40702
+ var mapItem=mapData.get(key);
40703
+ mapItem.Data.push(item);
40704
+ }
40705
+ else
40706
+ {
40707
+ mapData.set(key,{ Data:[item] });
40708
+ }
40709
+ }
40710
+ }
40711
+
40712
+ this.Draw=function()
40713
+ {
40714
+ this.IconRect=[];
40715
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
40716
+ if (this.IsShowIndexTitleOnly()) return;
40717
+ if (this.IsHideScriptIndex()) return;
40718
+ if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return; //k线数据
40719
+ if (!this.Family) return;
40720
+ if (!this.MapCache || this.MapCache.size<=0) return;
40721
+
40722
+ this.IsHScreen=(this.ChartFrame.IsHScreen===true);
40723
+ var xPointCount=this.ChartFrame.XPointCount;
40724
+ var dataWidth=this.ChartFrame.DataWidth;
40725
+ var distanceWidth=this.ChartFrame.DistanceWidth;
40726
+ var isMinute=this.IsMinuteFrame();
40727
+
40728
+ var border=this.GetBorder();
40729
+ if (this.IsHScreen)
40730
+ {
40731
+ var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
40732
+ var chartright=border.BottomEx;
40733
+ var chartLeft=border.TopEx;
40734
+ }
40735
+ else
40736
+ {
40737
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
40738
+ var chartright=border.RightEx;
40739
+ var chartLeft=border.LeftEx;
40740
+ }
40741
+
40742
+ var fontSize=this.GetDynamicIconSize(dataWidth,distanceWidth,this.IconSize.Max,this.IconSize.Min,this.IconSize.Zoom);
40743
+ this.Canvas.font=fontSize+'px '+this.Family;
40744
+
40745
+ var drawInfo={ Left:chartLeft, Right:chartright, FontSize:fontSize, DataWidth:dataWidth, DistanceWidth:distanceWidth };
40746
+
40747
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
40748
+ {
40749
+ var kItem=this.Data.Data[i];
40750
+ var key=this.BuildKey(kItem);
40751
+ if (!this.MapCache.has(key)) continue;
40752
+ var mapItem=this.MapCache.get(key);
40753
+
40754
+ if (isMinute)
40755
+ {
40756
+ var x=this.ChartFrame.GetXFromIndex(j);
40757
+ }
40758
+ else
40759
+ {
40760
+ var left=xOffset;
40761
+ var right=xOffset+dataWidth;
40762
+ if (right>chartright) break;
40763
+ var x=left+(right-left)/2;
40764
+ }
40765
+
40766
+ this.DrawItem(mapItem, kItem, x, drawInfo);
40767
+ }
40768
+ }
40769
+
40770
+ this.GetKValue=function(kItem, valueName)
40771
+ {
40772
+ switch(valueName)
40773
+ {
40774
+ case "HIGH":
40775
+ case "H":
40776
+ return kItem.High;
40777
+ case "L":
40778
+ case "LOW":
40779
+ return kItem.Low;
40780
+ case "C":
40781
+ case "CLOSE":
40782
+ return kItem.Close;
40783
+ case "O":
40784
+ case "OPEN":
40785
+ return KItem.Open;
40786
+ default:
40787
+ return null;
40788
+ }
40789
+ }
40790
+
40791
+ this.DrawItem=function(groupItem, kItem, x, drawInfo)
40792
+ {
40793
+ if (!IFrameSplitOperator.IsNonEmptyArray(groupItem.Data)) return;
40794
+
40795
+ var fontSize=drawInfo.FontSize;
40796
+ var left=drawInfo.Left, right=drawInfo.Right;
40797
+ var dataWidth=drawInfo.DataWidth;
40798
+ //var distanceWidth=drawInfo.DistanceWidth;
40799
+
40800
+ for(var i=0;i<groupItem.Data.length;++i)
40801
+ {
40802
+ var item=groupItem.Data[i];
40803
+ var value=item.Value;
40804
+ if (IFrameSplitOperator.IsString(item.Value)) value=this.GetKValue(kItem,item.Value);
40805
+ if (!IFrameSplitOperator.IsNumber(value)) continue;
40806
+
40807
+ var y=this.ChartFrame.GetYFromData(item.Value,false);
40808
+
40809
+ if (item.Color) this.Canvas.fillStyle = item.Color;
40810
+ else this.Canvas.fillStyle = this.Color;
40811
+
40812
+ var textWidth=this.Canvas.measureText(item.Symbol).width;
40813
+ this.Canvas.textAlign='center';
40814
+ var rtIcon=new Rect(x-fontSize/2,y-fontSize/2,fontSize,fontSize);
40815
+ if (x+textWidth/2>=right)
40816
+ {
40817
+ this.Canvas.textAlign='right';
40818
+ x+=dataWidth/2;
40819
+ rtIcon.X=x-fontSize;
40820
+ }
40821
+ else if (x-textWidth/2<left)
40822
+ {
40823
+ this.Canvas.textAlign = 'left';
40824
+ x-=dataWidth/2;
40825
+ rtIcon.X=x;
40826
+ }
40827
+
40828
+ if (item.Baseline==1)
40829
+ {
40830
+ this.Canvas.textBaseline='top';
40831
+ rtIcon.Y=y;
40832
+ }
40833
+ else if (item.Baseline==2)
40834
+ {
40835
+ this.Canvas.textBaseline='bottom';
40836
+ rtIcon.Y=y-fontSize;
40837
+ }
40838
+ else
40839
+ {
40840
+ this.Canvas.textBaseline = 'middle';
40841
+ rtIcon.Y=y-fontSize/2;
40842
+ }
40843
+
40844
+ if (this.IsHScreen)
40845
+ {
40846
+ this.Canvas.save();
40847
+ this.Canvas.translate(y, x);
40848
+ this.Canvas.rotate(90 * Math.PI / 180);
40849
+ this.Canvas.fillText(item.Symbol,0,0);
40850
+ this.Canvas.restore();
40851
+ }
40852
+ else
40853
+ {
40854
+ if (IFrameSplitOperator.IsNumber(item.YMove)) y+=item.YMove;
40855
+ this.Canvas.fillText(item.Symbol, x, y);
40856
+ if (item.Text) this.IconRect.push({ Rect:rtIcon , Item:item, KItem:kItem });
40857
+ }
40858
+
40859
+ if (item.Line)
40860
+ {
40861
+ var price=item.Line.KData=="H"? kItem.High:kItem.Low;
40862
+ var yPrice=this.ChartFrame.GetYFromData(price, false);
40863
+ var yText=y;
40864
+ if (Array.isArray(item.Line.Offset) && item.Line.Offset.length==2)
40865
+ {
40866
+ if (yText>yPrice) //文字在下方
40867
+ {
40868
+ yText-=item.Line.Offset[1];
40869
+ yPrice+=item.Line.Offset[0]
40870
+ }
40871
+ else if (yText<yPrice)
40872
+ {
40873
+ yText+=item.Line.Offset[1];
40874
+ yPrice-=item.Line.Offset[0]
40875
+ }
40876
+ }
40877
+ this.Canvas.save();
40878
+ if (item.Line.Dash) this.Canvas.setLineDash(item.Line.Dash); //虚线
40879
+ if (item.Line.Width>0) this.Canvas.lineWidth=item.Line.Width; //线宽
40880
+ this.Canvas.strokeStyle = item.Line.Color;
40881
+ this.Canvas.beginPath();
40882
+ if (this.IsHScreen)
40883
+ {
40884
+ this.Canvas.moveTo(yText, ToFixedPoint(x));
40885
+ this.Canvas.lineTo(yPrice,ToFixedPoint(x));
40886
+ }
40887
+ else
40888
+ {
40889
+ this.Canvas.moveTo(ToFixedPoint(x),yText);
40890
+ this.Canvas.lineTo(ToFixedPoint(x),yPrice);
40891
+ }
40892
+
40893
+ this.Canvas.stroke();
40894
+ this.Canvas.restore();
40895
+ }
40896
+ }
40897
+ }
40898
+
40899
+ this.GetTooltipData=function(x,y,tooltip)
40900
+ {
40901
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.IconRect)) return false;
40902
+ for(var i=0; i<this.IconRect.length; ++i)
40903
+ {
40904
+ var item=this.IconRect[i];
40905
+ if (!item.Rect) continue;
40906
+ var rect=item.Rect;
40907
+ this.Canvas.beginPath();
40908
+ this.Canvas.rect(rect.X,rect.Y,rect.Width,rect.Height);
40909
+ if (this.Canvas.isPointInPath(x,y))
40910
+ {
40911
+ JSConsole.Chart.Log('[ChartMultiSVGIconV2::GetTooltipData] icon ', item);
40912
+ tooltip.Data=item;
40913
+ tooltip.ChartPaint=this;
40914
+ tooltip.Type=4; //指标
40915
+ return true;
40916
+ }
40917
+ }
40918
+
40919
+ return false;
40920
+ }
40921
+
40922
+ this.GetMaxMin=function()
40923
+ {
40924
+ this.IsHScreen=(this.ChartFrame.IsHScreen===true);
40925
+ var range={ Min:null, Max:null };
40926
+ if(!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return range;
40927
+ if (!this.MapCache || this.MapCache.size<=0) return;
40928
+ var xPointCount=this.ChartFrame.XPointCount;
40929
+
40930
+ for(var i=this.Data.DataOffset,j=0, k=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
40931
+ {
40932
+ var kItem=this.Data.Data[i];
40933
+ var key=this.BuildKey(kItem);
40934
+ if (!this.MapCache.has(key)) continue;
40935
+ var mapItem=this.MapCache.get(key);
40936
+ if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
40937
+
40938
+ for(k=0;k<mapItem.Data.length;++k)
40939
+ {
40940
+ var item=mapItem.Data[k];
40941
+ var value=item.Value;
40942
+ if (IFrameSplitOperator.IsString(item.Value)) value=this.GetKValue(kItem,item.Value);
40943
+ if (!IFrameSplitOperator.IsNumber(value)) continue;
40944
+
40945
+ if (range.Max==null) range.Max=value;
40946
+ else if (range.Max<value) range.Max=value;
40947
+ if (range.Min==null) range.Min=value;
40948
+ else if (range.Min>value) range.Min=value;
40949
+ }
40950
+ }
40951
+
40952
+ return range;
40953
+ }
40954
+ }
40955
+
40662
40956
  // 多dom节点
40663
40957
  function ChartMultiHtmlDom()
40664
40958
  {
@@ -114137,7 +114431,7 @@ function ScriptIndex(name,script,args,option)
114137
114431
 
114138
114432
  this.CreateMultiSVGIcon=function(hqChart,windowIndex,varItem,i)
114139
114433
  {
114140
- let chart=new ChartMultiSVGIcon();
114434
+ let chart=new ChartMultiSVGIconV2();
114141
114435
  chart.Canvas=hqChart.Canvas;
114142
114436
  chart.Name=varItem.Name;
114143
114437
  chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
@@ -114145,7 +114439,8 @@ function ScriptIndex(name,script,args,option)
114145
114439
 
114146
114440
  chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
114147
114441
  chart.Family=varItem.Draw.DrawData.Family;
114148
- chart.Icon= varItem.Draw.DrawData.Icon;
114442
+ chart.AryIcon= varItem.Draw.DrawData.Icon;
114443
+ chart.BuildCacheData();
114149
114444
  hqChart.ChartPaint.push(chart);
114150
114445
  }
114151
114446
 
@@ -115801,7 +116096,7 @@ function OverlayScriptIndex(name,script,args,option)
115801
116096
  {
115802
116097
  var overlayIndex=this.OverlayIndex;
115803
116098
  var frame=overlayIndex.Frame;
115804
- let chart=new ChartMultiSVGIcon();
116099
+ let chart=new ChartMultiSVGIconV2();
115805
116100
  chart.Canvas=hqChart.Canvas;
115806
116101
  chart.Name=varItem.Name;
115807
116102
  chart.ChartBorder=frame.Frame.ChartBorder;
@@ -115810,7 +116105,8 @@ function OverlayScriptIndex(name,script,args,option)
115810
116105
 
115811
116106
  chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
115812
116107
  chart.Family=varItem.Draw.DrawData.Family;
115813
- chart.Icon= varItem.Draw.DrawData.Icon;
116108
+ chart.AryIcon= varItem.Draw.DrawData.Icon;
116109
+ chart.BuildCacheData();
115814
116110
  frame.ChartPaint.push(chart);
115815
116111
  }
115816
116112
 
@@ -116900,8 +117196,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
116900
117196
  drawItem.Text=draw.Text;
116901
117197
  drawItem.Name=draw.Name;
116902
117198
  drawItem.DrawType=draw.DrawType;
116903
- drawItem.DrawData={ Icon:this.FittingMultiText(draw.DrawData.Icon,date,time,hqChart), Family:draw.DrawData.Family };
116904
- this.GetKLineData(drawItem.DrawData.Icon, hqChart);
117199
+ drawItem.DrawData={ Icon:draw.DrawData.Icon, Family:draw.DrawData.Family };
116905
117200
  outVarItem.Draw=drawItem;
116906
117201
 
116907
117202
  result.push(outVarItem);
@@ -117301,8 +117596,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
117301
117596
  drawItem.Text=draw.Text;
117302
117597
  drawItem.Name=draw.Name;
117303
117598
  drawItem.DrawType=draw.DrawType;
117304
- drawItem.DrawData={ Icon:this.FittingMultiText(draw.DrawData.Icon,date,time,hqChart), Family:draw.DrawData.Family };
117305
- this.GetKLineData(drawItem.DrawData.Icon, hqChart);
117599
+ drawItem.DrawData={ Icon:draw.DrawData.Icon, Family:draw.DrawData.Family };
117306
117600
  outVarItem.Draw=drawItem;
117307
117601
 
117308
117602
  result.push(outVarItem);
@@ -129560,7 +129854,7 @@ function ScrollBarBGChart()
129560
129854
 
129561
129855
 
129562
129856
 
129563
- var HQCHART_VERSION="1.1.13008";
129857
+ var HQCHART_VERSION="1.1.13013";
129564
129858
 
129565
129859
  function PrintHQChartVersion()
129566
129860
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.13008";
8
+ var HQCHART_VERSION="1.1.13013";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -40703,6 +40703,300 @@ function ChartMultiSVGIcon()
40703
40703
  }
40704
40704
  }
40705
40705
 
40706
+
40707
+ //图标集合(2.0) 支持横屏
40708
+ function ChartMultiSVGIconV2()
40709
+ {
40710
+ this.newMethod=IChartPainting; //派生
40711
+ this.newMethod();
40712
+ delete this.newMethod;
40713
+
40714
+ this.ClassName="ChartMultiSVGIconV2";
40715
+ this.AryIcon; //[ {Index:, Value:, Symbol:, Color:, Baseline:, Line:{ Color:, Dash:[虚线点], KData:"H/L", Offset:[5,10], Width:线粗细 } } ]
40716
+ this.IconSize=
40717
+ {
40718
+ Max: g_JSChartResource.DRAWICON.Icon.MaxSize, Min:g_JSChartResource.DRAWICON.Icon.MinSize , //图标的最大最小值
40719
+ Zoom:{ Type:g_JSChartResource.DRAWICON.Icon.Zoom.Type , Value:g_JSChartResource.DRAWICON.Icon.Zoom.Value } //放大倍数
40720
+ };
40721
+ this.Family;
40722
+ this.Color=g_JSChartResource.DefaultTextColor;
40723
+ this.IsHScreen=false;
40724
+ this.IconRect=[]; //0=序号,1=区域
40725
+
40726
+ this.MapCache=null; //key=date/date-time value={ Data:[] }
40727
+
40728
+ this.BuildKey=function(item)
40729
+ {
40730
+ if (IFrameSplitOperator.IsNumber(item.Time)) return `${item.Date}-${item.Time}`;
40731
+ else return item.Date;
40732
+ }
40733
+
40734
+ this.BuildCacheData=function()
40735
+ {
40736
+ var mapData=new Map();
40737
+ this.MapCache=mapData;
40738
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon)) return;
40739
+
40740
+ for(var i=0;i<this.AryIcon.length;++i)
40741
+ {
40742
+ var item=this.AryIcon[i];
40743
+ var key=this.BuildKey(item);
40744
+ if (mapData.has(key))
40745
+ {
40746
+ var mapItem=mapData.get(key);
40747
+ mapItem.Data.push(item);
40748
+ }
40749
+ else
40750
+ {
40751
+ mapData.set(key,{ Data:[item] });
40752
+ }
40753
+ }
40754
+ }
40755
+
40756
+ this.Draw=function()
40757
+ {
40758
+ this.IconRect=[];
40759
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
40760
+ if (this.IsShowIndexTitleOnly()) return;
40761
+ if (this.IsHideScriptIndex()) return;
40762
+ if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return; //k线数据
40763
+ if (!this.Family) return;
40764
+ if (!this.MapCache || this.MapCache.size<=0) return;
40765
+
40766
+ this.IsHScreen=(this.ChartFrame.IsHScreen===true);
40767
+ var xPointCount=this.ChartFrame.XPointCount;
40768
+ var dataWidth=this.ChartFrame.DataWidth;
40769
+ var distanceWidth=this.ChartFrame.DistanceWidth;
40770
+ var isMinute=this.IsMinuteFrame();
40771
+
40772
+ var border=this.GetBorder();
40773
+ if (this.IsHScreen)
40774
+ {
40775
+ var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
40776
+ var chartright=border.BottomEx;
40777
+ var chartLeft=border.TopEx;
40778
+ }
40779
+ else
40780
+ {
40781
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
40782
+ var chartright=border.RightEx;
40783
+ var chartLeft=border.LeftEx;
40784
+ }
40785
+
40786
+ var fontSize=this.GetDynamicIconSize(dataWidth,distanceWidth,this.IconSize.Max,this.IconSize.Min,this.IconSize.Zoom);
40787
+ this.Canvas.font=fontSize+'px '+this.Family;
40788
+
40789
+ var drawInfo={ Left:chartLeft, Right:chartright, FontSize:fontSize, DataWidth:dataWidth, DistanceWidth:distanceWidth };
40790
+
40791
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
40792
+ {
40793
+ var kItem=this.Data.Data[i];
40794
+ var key=this.BuildKey(kItem);
40795
+ if (!this.MapCache.has(key)) continue;
40796
+ var mapItem=this.MapCache.get(key);
40797
+
40798
+ if (isMinute)
40799
+ {
40800
+ var x=this.ChartFrame.GetXFromIndex(j);
40801
+ }
40802
+ else
40803
+ {
40804
+ var left=xOffset;
40805
+ var right=xOffset+dataWidth;
40806
+ if (right>chartright) break;
40807
+ var x=left+(right-left)/2;
40808
+ }
40809
+
40810
+ this.DrawItem(mapItem, kItem, x, drawInfo);
40811
+ }
40812
+ }
40813
+
40814
+ this.GetKValue=function(kItem, valueName)
40815
+ {
40816
+ switch(valueName)
40817
+ {
40818
+ case "HIGH":
40819
+ case "H":
40820
+ return kItem.High;
40821
+ case "L":
40822
+ case "LOW":
40823
+ return kItem.Low;
40824
+ case "C":
40825
+ case "CLOSE":
40826
+ return kItem.Close;
40827
+ case "O":
40828
+ case "OPEN":
40829
+ return KItem.Open;
40830
+ default:
40831
+ return null;
40832
+ }
40833
+ }
40834
+
40835
+ this.DrawItem=function(groupItem, kItem, x, drawInfo)
40836
+ {
40837
+ if (!IFrameSplitOperator.IsNonEmptyArray(groupItem.Data)) return;
40838
+
40839
+ var fontSize=drawInfo.FontSize;
40840
+ var left=drawInfo.Left, right=drawInfo.Right;
40841
+ var dataWidth=drawInfo.DataWidth;
40842
+ //var distanceWidth=drawInfo.DistanceWidth;
40843
+
40844
+ for(var i=0;i<groupItem.Data.length;++i)
40845
+ {
40846
+ var item=groupItem.Data[i];
40847
+ var value=item.Value;
40848
+ if (IFrameSplitOperator.IsString(item.Value)) value=this.GetKValue(kItem,item.Value);
40849
+ if (!IFrameSplitOperator.IsNumber(value)) continue;
40850
+
40851
+ var y=this.ChartFrame.GetYFromData(item.Value,false);
40852
+
40853
+ if (item.Color) this.Canvas.fillStyle = item.Color;
40854
+ else this.Canvas.fillStyle = this.Color;
40855
+
40856
+ var textWidth=this.Canvas.measureText(item.Symbol).width;
40857
+ this.Canvas.textAlign='center';
40858
+ var rtIcon=new Rect(x-fontSize/2,y-fontSize/2,fontSize,fontSize);
40859
+ if (x+textWidth/2>=right)
40860
+ {
40861
+ this.Canvas.textAlign='right';
40862
+ x+=dataWidth/2;
40863
+ rtIcon.X=x-fontSize;
40864
+ }
40865
+ else if (x-textWidth/2<left)
40866
+ {
40867
+ this.Canvas.textAlign = 'left';
40868
+ x-=dataWidth/2;
40869
+ rtIcon.X=x;
40870
+ }
40871
+
40872
+ if (item.Baseline==1)
40873
+ {
40874
+ this.Canvas.textBaseline='top';
40875
+ rtIcon.Y=y;
40876
+ }
40877
+ else if (item.Baseline==2)
40878
+ {
40879
+ this.Canvas.textBaseline='bottom';
40880
+ rtIcon.Y=y-fontSize;
40881
+ }
40882
+ else
40883
+ {
40884
+ this.Canvas.textBaseline = 'middle';
40885
+ rtIcon.Y=y-fontSize/2;
40886
+ }
40887
+
40888
+ if (this.IsHScreen)
40889
+ {
40890
+ this.Canvas.save();
40891
+ this.Canvas.translate(y, x);
40892
+ this.Canvas.rotate(90 * Math.PI / 180);
40893
+ this.Canvas.fillText(item.Symbol,0,0);
40894
+ this.Canvas.restore();
40895
+ }
40896
+ else
40897
+ {
40898
+ if (IFrameSplitOperator.IsNumber(item.YMove)) y+=item.YMove;
40899
+ this.Canvas.fillText(item.Symbol, x, y);
40900
+ if (item.Text) this.IconRect.push({ Rect:rtIcon , Item:item, KItem:kItem });
40901
+ }
40902
+
40903
+ if (item.Line)
40904
+ {
40905
+ var price=item.Line.KData=="H"? kItem.High:kItem.Low;
40906
+ var yPrice=this.ChartFrame.GetYFromData(price, false);
40907
+ var yText=y;
40908
+ if (Array.isArray(item.Line.Offset) && item.Line.Offset.length==2)
40909
+ {
40910
+ if (yText>yPrice) //文字在下方
40911
+ {
40912
+ yText-=item.Line.Offset[1];
40913
+ yPrice+=item.Line.Offset[0]
40914
+ }
40915
+ else if (yText<yPrice)
40916
+ {
40917
+ yText+=item.Line.Offset[1];
40918
+ yPrice-=item.Line.Offset[0]
40919
+ }
40920
+ }
40921
+ this.Canvas.save();
40922
+ if (item.Line.Dash) this.Canvas.setLineDash(item.Line.Dash); //虚线
40923
+ if (item.Line.Width>0) this.Canvas.lineWidth=item.Line.Width; //线宽
40924
+ this.Canvas.strokeStyle = item.Line.Color;
40925
+ this.Canvas.beginPath();
40926
+ if (this.IsHScreen)
40927
+ {
40928
+ this.Canvas.moveTo(yText, ToFixedPoint(x));
40929
+ this.Canvas.lineTo(yPrice,ToFixedPoint(x));
40930
+ }
40931
+ else
40932
+ {
40933
+ this.Canvas.moveTo(ToFixedPoint(x),yText);
40934
+ this.Canvas.lineTo(ToFixedPoint(x),yPrice);
40935
+ }
40936
+
40937
+ this.Canvas.stroke();
40938
+ this.Canvas.restore();
40939
+ }
40940
+ }
40941
+ }
40942
+
40943
+ this.GetTooltipData=function(x,y,tooltip)
40944
+ {
40945
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.IconRect)) return false;
40946
+ for(var i=0; i<this.IconRect.length; ++i)
40947
+ {
40948
+ var item=this.IconRect[i];
40949
+ if (!item.Rect) continue;
40950
+ var rect=item.Rect;
40951
+ this.Canvas.beginPath();
40952
+ this.Canvas.rect(rect.X,rect.Y,rect.Width,rect.Height);
40953
+ if (this.Canvas.isPointInPath(x,y))
40954
+ {
40955
+ JSConsole.Chart.Log('[ChartMultiSVGIconV2::GetTooltipData] icon ', item);
40956
+ tooltip.Data=item;
40957
+ tooltip.ChartPaint=this;
40958
+ tooltip.Type=4; //指标
40959
+ return true;
40960
+ }
40961
+ }
40962
+
40963
+ return false;
40964
+ }
40965
+
40966
+ this.GetMaxMin=function()
40967
+ {
40968
+ this.IsHScreen=(this.ChartFrame.IsHScreen===true);
40969
+ var range={ Min:null, Max:null };
40970
+ if(!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return range;
40971
+ if (!this.MapCache || this.MapCache.size<=0) return;
40972
+ var xPointCount=this.ChartFrame.XPointCount;
40973
+
40974
+ for(var i=this.Data.DataOffset,j=0, k=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
40975
+ {
40976
+ var kItem=this.Data.Data[i];
40977
+ var key=this.BuildKey(kItem);
40978
+ if (!this.MapCache.has(key)) continue;
40979
+ var mapItem=this.MapCache.get(key);
40980
+ if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
40981
+
40982
+ for(k=0;k<mapItem.Data.length;++k)
40983
+ {
40984
+ var item=mapItem.Data[k];
40985
+ var value=item.Value;
40986
+ if (IFrameSplitOperator.IsString(item.Value)) value=this.GetKValue(kItem,item.Value);
40987
+ if (!IFrameSplitOperator.IsNumber(value)) continue;
40988
+
40989
+ if (range.Max==null) range.Max=value;
40990
+ else if (range.Max<value) range.Max=value;
40991
+ if (range.Min==null) range.Min=value;
40992
+ else if (range.Min>value) range.Min=value;
40993
+ }
40994
+ }
40995
+
40996
+ return range;
40997
+ }
40998
+ }
40999
+
40706
41000
  // 多dom节点
40707
41001
  function ChartMultiHtmlDom()
40708
41002
  {
@@ -114181,7 +114475,7 @@ function ScriptIndex(name,script,args,option)
114181
114475
 
114182
114476
  this.CreateMultiSVGIcon=function(hqChart,windowIndex,varItem,i)
114183
114477
  {
114184
- let chart=new ChartMultiSVGIcon();
114478
+ let chart=new ChartMultiSVGIconV2();
114185
114479
  chart.Canvas=hqChart.Canvas;
114186
114480
  chart.Name=varItem.Name;
114187
114481
  chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
@@ -114189,7 +114483,8 @@ function ScriptIndex(name,script,args,option)
114189
114483
 
114190
114484
  chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
114191
114485
  chart.Family=varItem.Draw.DrawData.Family;
114192
- chart.Icon= varItem.Draw.DrawData.Icon;
114486
+ chart.AryIcon= varItem.Draw.DrawData.Icon;
114487
+ chart.BuildCacheData();
114193
114488
  hqChart.ChartPaint.push(chart);
114194
114489
  }
114195
114490
 
@@ -115845,7 +116140,7 @@ function OverlayScriptIndex(name,script,args,option)
115845
116140
  {
115846
116141
  var overlayIndex=this.OverlayIndex;
115847
116142
  var frame=overlayIndex.Frame;
115848
- let chart=new ChartMultiSVGIcon();
116143
+ let chart=new ChartMultiSVGIconV2();
115849
116144
  chart.Canvas=hqChart.Canvas;
115850
116145
  chart.Name=varItem.Name;
115851
116146
  chart.ChartBorder=frame.Frame.ChartBorder;
@@ -115854,7 +116149,8 @@ function OverlayScriptIndex(name,script,args,option)
115854
116149
 
115855
116150
  chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
115856
116151
  chart.Family=varItem.Draw.DrawData.Family;
115857
- chart.Icon= varItem.Draw.DrawData.Icon;
116152
+ chart.AryIcon= varItem.Draw.DrawData.Icon;
116153
+ chart.BuildCacheData();
115858
116154
  frame.ChartPaint.push(chart);
115859
116155
  }
115860
116156
 
@@ -116944,8 +117240,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
116944
117240
  drawItem.Text=draw.Text;
116945
117241
  drawItem.Name=draw.Name;
116946
117242
  drawItem.DrawType=draw.DrawType;
116947
- drawItem.DrawData={ Icon:this.FittingMultiText(draw.DrawData.Icon,date,time,hqChart), Family:draw.DrawData.Family };
116948
- this.GetKLineData(drawItem.DrawData.Icon, hqChart);
117243
+ drawItem.DrawData={ Icon:draw.DrawData.Icon, Family:draw.DrawData.Family };
116949
117244
  outVarItem.Draw=drawItem;
116950
117245
 
116951
117246
  result.push(outVarItem);
@@ -117345,8 +117640,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
117345
117640
  drawItem.Text=draw.Text;
117346
117641
  drawItem.Name=draw.Name;
117347
117642
  drawItem.DrawType=draw.DrawType;
117348
- drawItem.DrawData={ Icon:this.FittingMultiText(draw.DrawData.Icon,date,time,hqChart), Family:draw.DrawData.Family };
117349
- this.GetKLineData(drawItem.DrawData.Icon, hqChart);
117643
+ drawItem.DrawData={ Icon:draw.DrawData.Icon, Family:draw.DrawData.Family };
117350
117644
  outVarItem.Draw=drawItem;
117351
117645
 
117352
117646
  result.push(outVarItem);
@@ -129718,7 +130012,7 @@ function HQChartScriptWorker()
129718
130012
 
129719
130013
 
129720
130014
 
129721
- var HQCHART_VERSION="1.1.13008";
130015
+ var HQCHART_VERSION="1.1.13013";
129722
130016
 
129723
130017
  function PrintHQChartVersion()
129724
130018
  {