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.
- package/lib/umychart.vue.js +21 -8
- package/package.json +1 -1
- package/src/jscommon/umychart.complier.js +8 -8
- package/src/jscommon/umychart.js +294 -0
- package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +303 -9
- package/src/jscommon/umychart.version.js +1 -1
- package/src/jscommon/umychart.vue/umychart.vue.js +303 -9
package/lib/umychart.vue.js
CHANGED
|
@@ -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;};}
|
|
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
|
|
11302
|
-
chart.Family=varItem.Draw.DrawData.Family;chart.
|
|
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
|
|
11426
|
-
chart.Family=varItem.Draw.DrawData.Family;chart.
|
|
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:
|
|
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:
|
|
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.
|
|
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
|
@@ -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
|
|
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.
|
|
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
|
|
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.
|
|
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:
|
|
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:
|
|
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);
|
package/src/jscommon/umychart.js
CHANGED
|
@@ -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
|
|
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.
|
|
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
|
|
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.
|
|
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:
|
|
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:
|
|
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.
|
|
129857
|
+
var HQCHART_VERSION="1.1.13013";
|
|
129564
129858
|
|
|
129565
129859
|
function PrintHQChartVersion()
|
|
129566
129860
|
{
|
|
@@ -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
|
|
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.
|
|
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
|
|
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.
|
|
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:
|
|
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:
|
|
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.
|
|
130015
|
+
var HQCHART_VERSION="1.1.13013";
|
|
129722
130016
|
|
|
129723
130017
|
function PrintHQChartVersion()
|
|
129724
130018
|
{
|