hqchart 1.1.13014 → 1.1.13016
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
CHANGED
|
@@ -5669,6 +5669,7 @@ this.OnlyMoveXIndex=false;//只能在X轴刻度上移动
|
|
|
5669
5669
|
this.IsSupportMagnet=false;//是否支持磁吸
|
|
5670
5670
|
this.EnableMoveCheck=true;//允许移动时监测是否超出边界
|
|
5671
5671
|
this.IsDrawFirst=false;this.IsShowYCoordinate=false;//是否在Y轴显示点的刻度
|
|
5672
|
+
this.IsShow=true;//是否显示
|
|
5672
5673
|
this.LineColor=g_JSChartResource.DrawPicture.LineColor[0];//线段颜色
|
|
5673
5674
|
//this.LineColor="#1e90ff"; //线段颜色,input type="color" 不支持rgb和rgba 的格式
|
|
5674
5675
|
this.LineWidth=2;//线段宽度
|
|
@@ -5728,7 +5729,7 @@ this.ExportBaseData=function(){var data={ClassName:this.ClassName,Guid:this.Guid
|
|
|
5728
5729
|
if(this.FontOption){data.FontOption={};this.SetFont(data.FontOption,this.FontOption);//字体也导出
|
|
5729
5730
|
}return data;};this.IsFrameMinSize=function()//框架是否是最小化模式
|
|
5730
5731
|
{return this.Frame&&this.Frame.IsMinSize;};this.PointRange=function(aryPoint){if(!IFrameSplitOperator.IsNonEmptyArray(aryPoint))return null;if(aryPoint.length==1){var data={Points:[{X:aryPoint[0].X,Y:aryPoint[0].Y}]};return data;}else{var xMax=aryPoint[0].X;var xMin=xMax;var yMax=aryPoint[0].Y;var yMin=yMax;var aryData=[{X:aryPoint[0].X,Y:aryPoint[0].Y}];for(var i=1;i<aryPoint.length;++i){if(xMax<aryPoint[i].X)xMax=aryPoint[i].X;if(xMin>aryPoint[i].X)xMin=aryPoint[i].X;if(yMax<aryPoint[i].Y)yMax=aryPoint[i].Y;if(yMin>aryPoint[i].Y)yMin=aryPoint[i].Y;aryData.push({X:aryPoint[i].X,Y:aryPoint[i].Y});}var data={X:{Max:{X:xMax},Min:{X:xMin}},Y:{Max:{Y:yMax},Min:{Y:yMin}},Points:aryData//所有的点
|
|
5731
|
-
};return data;}};this.GetXYCoordinate_default=function(){if(this.IsFrameMinSize())return null;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});return this.PointRange(drawPoint);};this.GetXYCoordinate=function(){return null;};this.CopyData_default=function(){if(!this.Frame)return null;var data=this.ExportStorageData();if(!data)return null;var dataOffset=0;if(this.Frame.ClassName=="MinuteFrame"||this.Frame.Class=="MinuteHScreenFrame"){}else{var kData=this.Frame.Data;if(!kData)return null;dataOffset=kData.DataOffset;}var height=this.Frame.ChartBorder.GetHeight();var yFirst=this.Frame.ChartBorder.GetBottomEx()-this.Point[0].Y;for(var i=0;i<data.Value.length;++i){var item=data.Value[i];var itemPoint=this.Point[i];item.XIndex=item.XValue-dataOffset+1;if(i==0){item.XOffset=0;item.YOffset=0;}else{var preItem=data.Value[i-1];var prePoint=this.Point[i-1];item.XOffset=item.XValue-preItem.XValue;item.YOffset=itemPoint.Y-prePoint.Y;}}data.DataOffset=dataOffset;data.YFristScale=yFirst/height;data.Height=height;//Y轴最大-最小差值
|
|
5732
|
+
};return data;}};this.GetXYCoordinate_default=function(){if(this.IsFrameMinSize())return null;if(!this.IsShow)return null;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});return this.PointRange(drawPoint);};this.GetXYCoordinate=function(){return null;};this.CopyData_default=function(){if(!this.Frame)return null;var data=this.ExportStorageData();if(!data)return null;var dataOffset=0;if(this.Frame.ClassName=="MinuteFrame"||this.Frame.Class=="MinuteHScreenFrame"){}else{var kData=this.Frame.Data;if(!kData)return null;dataOffset=kData.DataOffset;}var height=this.Frame.ChartBorder.GetHeight();var yFirst=this.Frame.ChartBorder.GetBottomEx()-this.Point[0].Y;for(var i=0;i<data.Value.length;++i){var item=data.Value[i];var itemPoint=this.Point[i];item.XIndex=item.XValue-dataOffset+1;if(i==0){item.XOffset=0;item.YOffset=0;}else{var preItem=data.Value[i-1];var prePoint=this.Point[i-1];item.XOffset=item.XValue-preItem.XValue;item.YOffset=itemPoint.Y-prePoint.Y;}}data.DataOffset=dataOffset;data.YFristScale=yFirst/height;data.Height=height;//Y轴最大-最小差值
|
|
5732
5733
|
return data;};this.SetFont=function(destFont,srcFont){if(!srcFont)return;if(!destFont)return;if(srcFont.Family)destFont.Family=srcFont.Family;if(srcFont.Weight)destFont.Weight=srcFont.Weight;if(srcFont.Style)destFont.Style=srcFont.Style;if(IFrameSplitOperator.IsNumber(srcFont.Size))destFont.Size=srcFont.Size;};this.GetFontString=function(fontOption){var defaultFont=16*GetDevicePixelRatio()+"px 微软雅黑";if(!fontOption||!fontOption.Family||!IFrameSplitOperator.IsPlusNumber(fontOption.Size))return defaultFont;var font='';if(fontOption.Color)font+=fontOption.Color+' ';if(fontOption.Style)font+=fontOption.Style+' ';if(fontOption.Weight)font+=fontOption.Weight+' ';font+=fontOption.Size*GetDevicePixelRatio()+'px ';font+=fontOption.Family;return font;};//获得多行文本
|
|
5733
5734
|
this.GetMultiLineText=function(text,maxWidth,font,option){if(font)this.Canvas.font=font;var textWidth=this.Canvas.measureText(text).width;if(textWidth<=maxWidth)return{AryText:[{Text:text}]};var singleWidth=this.Canvas.measureText("擎").width;var estimateCount=parseInt(maxWidth/singleWidth);//预估个数
|
|
5734
5735
|
var endPos=0;var aryText=[];while(endPos<text.length-1){var count=estimateCount;var pos=endPos+count;if(pos>=text.length){pos=text.length-1;count=pos-endPos;}var subText=text.slice(endPos,endPos+count);var textWidth=this.Canvas.measureText(subText).width;if(textWidth>maxWidth){for(var i=count;i>=0;--i){subText=text.slice(endPos,endPos+i);textWidth=this.Canvas.measureText(subText).width;if(textWidth<maxWidth){aryText.push({Text:subText});endPos+=i;break;}}}else if(textWidth<maxWidth){var bFind=false;for(var i=count;i+endPos<=text.length;++i){subText=text.slice(endPos,endPos+i);textWidth=this.Canvas.measureText(subText).width;if(textWidth>maxWidth){subText=text.slice(endPos,endPos+i-1);aryText.push({Text:subText});endPos+=i-1;bFind=true;break;}}if(!bFind){aryText.push({Text:subText});endPos=text.length-1;}}else{aryText.push({Text:subText});endPos+=count;}}return{AryText:aryText};};this.CloneArrayText=function(aryText){if(!IFrameSplitOperator.IsNonEmptyArray(aryText))return[];var aryValue=[];for(var i=0;i<aryText.length;++i){var item=aryText[i];if(!item)continue;aryValue.push({Text:item.Text});}return aryValue;};//计算角度
|
|
@@ -5756,7 +5757,7 @@ IChartDrawPicture.RegisterIonFont=function(obj){if(!obj.Name||!obj.Text||!obj.Fa
|
|
|
5756
5757
|
{var item=IChartDrawPicture.GetDrawPictureByClassName(obj.ClassName);if(!item)return null;var chartDraw=item.Create();//TODO:后面都放到每一个SetOptin里面
|
|
5757
5758
|
if(obj.Period>=0)chartDraw.Period=obj.Period;if(obj.Right>=0)chartDraw.Right=obj.Right;if(obj.Guid)chartDraw.Guid=obj.Guid;if(obj.Symbol)chartDraw.Symbol=obj.Symbol;if(obj.Value)chartDraw.Value=obj.Value;if(obj.Text)chartDraw.Text=obj.Text;if(obj.LineColor)chartDraw.LineColor=obj.LineColor;if(obj.AreaColor)chartDraw.AreaColor=obj.AreaColor;if(obj.FontOption)chartDraw.FontOption=obj.FontOption;if(obj.Label)chartDraw.Label=obj.Label;if(obj.LineWidth>0)chartDraw.LineWidth=obj.LineWidth;if(obj.EnableMove===false)chartDraw.EnableMove=obj.EnableMove;if(IFrameSplitOperator.IsBool(obj.EnableSave))chartDraw.EnableSave=obj.EnableSave;if(IFrameSplitOperator.IsNumber(obj.ChannelWidth))chartDraw.ChannelWidth=obj.ChannelWidth;if(IFrameSplitOperator.IsBool(obj.IsShowYCoordinate))chartDraw.IsShowYCoordinate=obj.IsShowYCoordinate;if(chartDraw.SetOption)chartDraw.SetOption(obj);return chartDraw;};//画图工具-线段
|
|
5758
5759
|
function ChartDrawPictureLine(){this.newMethod=IChartDrawPicture;//派生
|
|
5759
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureLine';this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.IsShowYCoordinate=false;this.CopyData=this.CopyData_default;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.RestoreLineWidth();/*
|
|
5760
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureLine';this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.IsShowYCoordinate=false;this.CopyData=this.CopyData_default;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.RestoreLineWidth();/*
|
|
5760
5761
|
if (this.IsSelected)
|
|
5761
5762
|
{
|
|
5762
5763
|
this.Canvas.strokeStyle='rgba(255,0,0,0.5)';
|
|
@@ -5764,7 +5765,7 @@ this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureLine';thi
|
|
|
5764
5765
|
this.Canvas.stroke();
|
|
5765
5766
|
}
|
|
5766
5767
|
*/var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
|
|
5767
|
-
this.Canvas.restore();};this.GetYCoordinatePoint=function(){if(this.IsFrameMinSize())return null;if(this.Status<2)return null;if(!this.Point.length||!this.Frame)return null;if(this.Status!=10)return null;//完成
|
|
5768
|
+
this.Canvas.restore();};this.GetYCoordinatePoint=function(){if(this.IsFrameMinSize())return null;if(!this.IsShow)return null;if(this.Status<2)return null;if(!this.Point.length||!this.Frame)return null;if(this.Status!=10)return null;//完成
|
|
5768
5769
|
var aryPoint=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];var y=this.Frame.GetYFromData(item.YValue,false);aryPoint.push({Y:y,YValue:item.YValue,Item:item,Color:this.PointColor});}return aryPoint;};}//画图工具-涂鸦线段 Y轴关联数值, X轴不关联
|
|
5769
5770
|
function ChartDrawGraffitiLine(){this.newMethod=IChartDrawPicture;//派生
|
|
5770
5771
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawGraffitiLine';this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=null;this.PointCount=2;//画点的个数
|
|
@@ -5774,7 +5775,7 @@ this.ValueToPoint=function(){if(!this.Frame)return false;var isHScreen=this.Fram
|
|
|
5774
5775
|
{};this.CalculateDrawPoint=function(option){if(this.Status<2)return null;if(!this.Point.length||!this.Frame)return null;var drawPoint=[];if(this.Status==10){var isHScreen=this.Frame.IsHScreen;for(var i in this.Value){var item=this.Value[i];var pt=new Point();if(isHScreen)//横屏X,Y对调
|
|
5775
5776
|
{pt.Y=item.XValue;pt.X=this.Frame.GetYFromData(item.YValue,false);}else{pt.X=item.XValue;pt.Y=this.Frame.GetYFromData(item.YValue,false);}drawPoint.push(pt);}}else{drawPoint=this.Point;}return drawPoint;};//坐标是否在点上 返回在第几个点上
|
|
5776
5777
|
this.IsPointInXYValue=function(x,y,option){if(!this.Frame)return-1;if(!this.Value)return-1;var radius=5;if(option&&IFrameSplitOperator.IsNumber(option.Zoom))radius+=option.Zoom;else if(this.Option&&IFrameSplitOperator.IsNumber(this.Option.Zoom))radius+=this.Option.Zoom;var isHScreen=this.Frame.IsHScreen;radius*=GetDevicePixelRatio();for(var i=0;i<this.Value.length;++i)//是否在点上
|
|
5777
|
-
{var item=this.Value[i];var pt=new Point();if(isHScreen){pt.Y=item.XValue;pt.X==this.Frame.GetYFromData(item.YValue);}else{pt.X=item.XValue;pt.Y=this.Frame.GetYFromData(item.YValue);}this.Canvas.beginPath();this.Canvas.arc(pt.X,pt.Y,radius,0,360);if(this.Canvas.isPointInPath(x,y))return i;}return-1;};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.RestoreLineWidth();/*
|
|
5778
|
+
{var item=this.Value[i];var pt=new Point();if(isHScreen){pt.Y=item.XValue;pt.X==this.Frame.GetYFromData(item.YValue);}else{pt.X=item.XValue;pt.Y=this.Frame.GetYFromData(item.YValue);}this.Canvas.beginPath();this.Canvas.arc(pt.X,pt.Y,radius,0,360);if(this.Canvas.isPointInPath(x,y))return i;}return-1;};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.RestoreLineWidth();/*
|
|
5778
5779
|
if (this.IsSelected)
|
|
5779
5780
|
{
|
|
5780
5781
|
this.Canvas.strokeStyle='rgba(255,0,0,0.5)';
|
|
@@ -5786,7 +5787,7 @@ this.Canvas.restore();};}//画图工具-箭头线
|
|
|
5786
5787
|
function ChartDrawArrowLine(){this.newMethod=IChartDrawPicture;//派生
|
|
5787
5788
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawArrowLine';this.IsPointIn=this.IsPointIn_XYValue_Line;this.ArrawLineWidth=5;this.ArrawLength=15;//三角斜边长度
|
|
5788
5789
|
this.ArrawAngle=35;//三角斜边一直线夹角
|
|
5789
|
-
this.GetXYCoordinate=this.GetXYCoordinate_default;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];//计算箭头
|
|
5790
|
+
this.GetXYCoordinate=this.GetXYCoordinate_default;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];//计算箭头
|
|
5790
5791
|
var theta=this.ArrawAngle;//三角斜边一直线夹角
|
|
5791
5792
|
var headlen=this.ArrawLength;//三角斜边长度
|
|
5792
5793
|
var angle=Math.atan2(ptStart.Y-ptEnd.Y,ptStart.X-ptEnd.X)*180/Math.PI,angle1=(angle+theta)*Math.PI/180,angle2=(angle-theta)*Math.PI/180,topX=headlen*Math.cos(angle1),topY=headlen*Math.sin(angle1),botX=headlen*Math.cos(angle2),botY=headlen*Math.sin(angle2);this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.Canvas.beginPath();var arrowX=ptEnd.X+topX;var arrowY=ptEnd.Y+topY;this.Canvas.moveTo(arrowX,arrowY);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);arrowX=ptEnd.X+botX;arrowY=ptEnd.Y+botY;this.Canvas.lineTo(arrowX,arrowY);this.Canvas.lineWidth=this.ArrawLineWidth*GetDevicePixelRatio();this.Canvas.stroke();this.RestoreLineWidth();/*
|
|
@@ -5800,12 +5801,12 @@ var angle=Math.atan2(ptStart.Y-ptEnd.Y,ptStart.X-ptEnd.X)*180/Math.PI,angle1=(an
|
|
|
5800
5801
|
this.Canvas.restore();};}//画图工具-射线
|
|
5801
5802
|
function ChartDrawPictureHaflLine(){this.newMethod=IChartDrawPicture;//派生
|
|
5802
5803
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureHaflLine';this.GetXYCoordinate=this.GetXYCoordinate_default;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.FullLine;this.IsPointIn=function(x,y,option){var result=this.IsPointIn_XYValue_Line(x,y,option);if(result>=0)return result;if(!this.FullLine)return result;var ptStart=this.FullLine.Start;var ptEnd=this.FullLine.End;var pixel=GetDevicePixelRatio();var lineWidth=5*pixel;this.Canvas.beginPath();if(ptStart.X==ptEnd.X)//竖线
|
|
5803
|
-
{this.Canvas.moveTo(ptStart.X-lineWidth,ptStart.Y);this.Canvas.lineTo(ptStart.X+lineWidth,ptStart.Y);this.Canvas.lineTo(ptEnd.X+lineWidth,ptEnd.Y);this.Canvas.lineTo(ptEnd.X-lineWidth,ptEnd.Y);}else{this.Canvas.moveTo(ptStart.X,ptStart.Y+lineWidth);this.Canvas.lineTo(ptStart.X,ptStart.Y-lineWidth);this.Canvas.lineTo(ptEnd.X,ptEnd.Y-lineWidth);this.Canvas.lineTo(ptEnd.X,ptEnd.Y+lineWidth);}this.Canvas.closePath();if(this.Canvas.isPointInPath(x,y))return 100;return result;};this.Draw=function(){this.LinePoint=[];this.FullLine=null;if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:false});if(!drawPoint||drawPoint.length!=2)return;var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.ClipFrame();this.Canvas.strokeStyle=this.LineColor;this.SetLineWidth();this.Canvas.beginPath();this.Canvas.moveTo(drawPoint[0].X,drawPoint[0].Y);this.Canvas.lineTo(drawPoint[1].X,drawPoint[1].Y);var endPoint=this.CalculateExtendLineEndPoint(drawPoint);this.Canvas.lineTo(endPoint.X,endPoint.Y);this.Canvas.stroke();this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
|
|
5804
|
+
{this.Canvas.moveTo(ptStart.X-lineWidth,ptStart.Y);this.Canvas.lineTo(ptStart.X+lineWidth,ptStart.Y);this.Canvas.lineTo(ptEnd.X+lineWidth,ptEnd.Y);this.Canvas.lineTo(ptEnd.X-lineWidth,ptEnd.Y);}else{this.Canvas.moveTo(ptStart.X,ptStart.Y+lineWidth);this.Canvas.lineTo(ptStart.X,ptStart.Y-lineWidth);this.Canvas.lineTo(ptEnd.X,ptEnd.Y-lineWidth);this.Canvas.lineTo(ptEnd.X,ptEnd.Y+lineWidth);}this.Canvas.closePath();if(this.Canvas.isPointInPath(x,y))return 100;return result;};this.Draw=function(){this.LinePoint=[];this.FullLine=null;if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:false});if(!drawPoint||drawPoint.length!=2)return;var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.ClipFrame();this.Canvas.strokeStyle=this.LineColor;this.SetLineWidth();this.Canvas.beginPath();this.Canvas.moveTo(drawPoint[0].X,drawPoint[0].Y);this.Canvas.lineTo(drawPoint[1].X,drawPoint[1].Y);var endPoint=this.CalculateExtendLineEndPoint(drawPoint);this.Canvas.lineTo(endPoint.X,endPoint.Y);this.Canvas.stroke();this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
|
|
5804
5805
|
this.Canvas.restore();this.FullLine={Start:drawPoint[0],End:endPoint};};}// 画图工具-水平线 支持横屏
|
|
5805
5806
|
function ChartDrawPictureHorizontalLine(){this.newMethod=IChartDrawPicture;//派生
|
|
5806
5807
|
this.newMethod();delete this.newMethod;this.Super_SetOption=this.SetOption;//父类函数
|
|
5807
5808
|
this.Super_ExportStorageData=this.ExportStorageData;this.Label;//{Text:文本, Position: 0=左, 1=右 }
|
|
5808
|
-
this.SetOption=function(option){if(this.Super_SetOption)this.Super_SetOption(option);if(option){if(option.Label)this.Label=option.Label;}};this.ExportStorageData=function(){var storageData;if(this.Super_ExportStorageData){storageData=this.Super_ExportStorageData();if(this.Label)storageData.Label=this.Label;}return storageData;};this.PointCount=1;this.ClassName='ChartDrawPictureHorizontalLine';this.IsPointIn=this.IsPointIn_XYValue_Line;this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.GetXYCoordinate=function(){if(this.IsFrameMinSize())return null;var drawPoint=this.CalculateDrawPoint();return this.PointRange(drawPoint);};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint||drawPoint.length!=1)return;if(!this.Frame)return;if(this.Value.length!=1)return;if(!this.IsYValueInFrame(this.Value[0].YValue))return null;var isHScreen=this.Frame.IsHScreen;var left=this.Frame.ChartBorder.GetLeft();var right=this.Frame.ChartBorder.GetRight();if(isHScreen){left=this.Frame.ChartBorder.GetTop();right=this.Frame.ChartBorder.GetBottom();}this.ClipFrame();this.Canvas.strokeStyle=this.LineColor;this.SetLineWidth();this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(drawPoint[0].X,left);this.Canvas.lineTo(drawPoint[0].X,right);}else{this.Canvas.moveTo(left,drawPoint[0].Y);this.Canvas.lineTo(right,drawPoint[0].Y);}this.Canvas.stroke();this.RestoreLineWidth();var line={Start:new Point(),End:new Point()};if(isHScreen){line.Start.X=drawPoint[0].X;line.Start.Y=left;line.End.X=drawPoint[0].X;line.End.Y=right;}else{line.Start.X=left;line.Start.Y=drawPoint[0].Y;line.End.X=right;line.End.Y=drawPoint[0].Y;}this.LinePoint.push(line);//画点
|
|
5809
|
+
this.SetOption=function(option){if(this.Super_SetOption)this.Super_SetOption(option);if(option){if(option.Label)this.Label=option.Label;}};this.ExportStorageData=function(){var storageData;if(this.Super_ExportStorageData){storageData=this.Super_ExportStorageData();if(this.Label)storageData.Label=this.Label;}return storageData;};this.PointCount=1;this.ClassName='ChartDrawPictureHorizontalLine';this.IsPointIn=this.IsPointIn_XYValue_Line;this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.GetXYCoordinate=function(){if(this.IsFrameMinSize())return null;var drawPoint=this.CalculateDrawPoint();return this.PointRange(drawPoint);};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint||drawPoint.length!=1)return;if(!this.Frame)return;if(this.Value.length!=1)return;if(!this.IsYValueInFrame(this.Value[0].YValue))return null;var isHScreen=this.Frame.IsHScreen;var left=this.Frame.ChartBorder.GetLeft();var right=this.Frame.ChartBorder.GetRight();if(isHScreen){left=this.Frame.ChartBorder.GetTop();right=this.Frame.ChartBorder.GetBottom();}this.ClipFrame();this.Canvas.strokeStyle=this.LineColor;this.SetLineWidth();this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(drawPoint[0].X,left);this.Canvas.lineTo(drawPoint[0].X,right);}else{this.Canvas.moveTo(left,drawPoint[0].Y);this.Canvas.lineTo(right,drawPoint[0].Y);}this.Canvas.stroke();this.RestoreLineWidth();var line={Start:new Point(),End:new Point()};if(isHScreen){line.Start.X=drawPoint[0].X;line.Start.Y=left;line.End.X=drawPoint[0].X;line.End.Y=right;}else{line.Start.X=left;line.Start.Y=drawPoint[0].Y;line.End.X=right;line.End.Y=drawPoint[0].Y;}this.LinePoint.push(line);//画点
|
|
5809
5810
|
this.DrawPoint(drawPoint);//显示价格
|
|
5810
5811
|
this.LineText(drawPoint[0]);/*
|
|
5811
5812
|
this.Canvas.fillStyle=this.LineColor;
|
|
@@ -5861,7 +5862,7 @@ this.ColseButtonSize=0;this.SettingButtonSize=0;this.ButtonBGWidth=0;this.SetOpt
|
|
|
5861
5862
|
return this.PointRange(drawPoint);
|
|
5862
5863
|
}
|
|
5863
5864
|
*/this.IsDrawMain=function()//选中绘制在动态绘图上, 没有选中绘制在背景上
|
|
5864
|
-
{if(!this.GetActiveDrawPicture)return true;var active=this.GetActiveDrawPicture();if(active.Select.Guid==this.Guid)return false;return true;};this.MainDraw=function(){this.Draw();};this.Draw=function(moveonPoint,mouseStatus){this.LinePoint=[];this.AryButton=[];this.ColseButtonSize=0;this.SettingButtonSize=0;this.ButtonBGWidth=0;if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint||drawPoint.length!=1)return;if(!this.Frame)return;if(this.Value.length!=1)return;if(!this.IsYValueInFrame(this.Value[0].YValue))return null;var isHScreen=this.Frame.IsHScreen;var left=this.Frame.ChartBorder.GetLeft();var right=this.Frame.ChartBorder.GetRight();if(isHScreen){left=this.Frame.ChartBorder.GetTop();right=this.Frame.ChartBorder.GetBottom();}this.ClipFrame();//画线段
|
|
5865
|
+
{if(!this.GetActiveDrawPicture)return true;var active=this.GetActiveDrawPicture();if(active.Select.Guid==this.Guid)return false;return true;};this.MainDraw=function(){this.Draw();};this.Draw=function(moveonPoint,mouseStatus){this.LinePoint=[];this.AryButton=[];this.ColseButtonSize=0;this.SettingButtonSize=0;this.ButtonBGWidth=0;if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint||drawPoint.length!=1)return;if(!this.Frame)return;if(this.Value.length!=1)return;if(!this.IsYValueInFrame(this.Value[0].YValue))return null;var isHScreen=this.Frame.IsHScreen;var left=this.Frame.ChartBorder.GetLeft();var right=this.Frame.ChartBorder.GetRight();if(isHScreen){left=this.Frame.ChartBorder.GetTop();right=this.Frame.ChartBorder.GetBottom();}this.ClipFrame();//画线段
|
|
5865
5866
|
this.Canvas.strokeStyle=this.LineColor;this.SetLineWidth();this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(drawPoint[0].X,left);this.Canvas.lineTo(drawPoint[0].X,right);}else{this.Canvas.moveTo(left,ToFixedPoint(drawPoint[0].Y));this.Canvas.lineTo(right,ToFixedPoint(drawPoint[0].Y));}this.Canvas.stroke();this.RestoreLineWidth();var line={Start:new Point(),End:new Point()};if(isHScreen){line.Start.X=drawPoint[0].X;line.Start.Y=left;line.End.X=drawPoint[0].X;line.End.Y=right;}else{line.Start.X=left;line.Start.Y=drawPoint[0].Y;line.End.X=right;line.End.Y=drawPoint[0].Y;}this.LinePoint.push(line);var labInfo;if(this.GetLabelCallback)labInfo=this.GetLabelCallback(this);//描述信息
|
|
5866
5867
|
if(labInfo)this.DrawLab(labInfo,drawPoint[0].Y);//画中心点
|
|
5867
5868
|
var xCenter=left+(right-left)/2;var point={X:xCenter,Y:drawPoint[0].Y};this.DrawPoint([point]);this.Canvas.restore();var rtDraw={};//显示价格
|
|
@@ -5881,10 +5882,10 @@ if(labInfo.BGColor){this.Canvas.fillStyle=labInfo.BGColor;var rtTop=drawTop;this
|
|
|
5881
5882
|
}
|
|
5882
5883
|
*/left=rtButton.Right+this.ButtonSpace;}if(this.Button.CloseIcon){var rtButton={Left:left,Top:drawTop,Width:this.ColseButtonSize,Height:drawHeight};rtButton.Right=rtButton.Left+rtButton.Width;rtButton.Bottom=rtButton.Top+rtButton.Height;var yCenter=rtButton.Top+rtButton.Height/2;var xCenter=rtButton.Left+rtButton.Width/2;var icon=this.Button.CloseIcon;this.Canvas.font=icon.Size*pixelRatio+'px '+icon.Family;this.Canvas.textAlign="center";this.Canvas.textBaseline="middle";this.Canvas.fillStyle=icon.Color;this.Canvas.fillText(this.Button.CloseIcon.Text,xCenter,yCenter);this.AryButton.push({Rect:rtButton,ID:JSCHART_BUTTON_ID.DRAW_PICTURE_DELETE});left=rtButton.Right;}rtDraw.Right=rtBG.Right;};this.PtInButtons=function(x,y){for(var i=0;i<this.AryButton.length;++i){var item=this.AryButton[i];if(!item.Rect)continue;var rect=item.Rect;this.Canvas.beginPath();this.Canvas.rect(rect.Left,rect.Top,rect.Width,rect.Height);if(this.Canvas.isPointInPath(x,y)){return{ID:item.ID,Rect:rect};}}return null;};}//趋势线
|
|
5883
5884
|
function ChartDrawPictureTrendLine(){this.newMethod=IChartDrawPicture;//派生
|
|
5884
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureTrendLine';this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:false});if(!drawPoint||drawPoint.length!=2)return;var ptStart=drawPoint[0];var ptEnd=drawPoint[1];var extendLine=this.CalculateExtendLinePoint(ptStart,ptEnd);this.ClipFrame();this.Canvas.strokeStyle=this.LineColor;this.SetLineWidth();this.Canvas.beginPath();this.Canvas.moveTo(extendLine.Start.X,extendLine.Start.Y);this.Canvas.lineTo(extendLine.End.X,extendLine.End.Y);this.Canvas.stroke();this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
|
|
5885
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureTrendLine';this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:false});if(!drawPoint||drawPoint.length!=2)return;var ptStart=drawPoint[0];var ptEnd=drawPoint[1];var extendLine=this.CalculateExtendLinePoint(ptStart,ptEnd);this.ClipFrame();this.Canvas.strokeStyle=this.LineColor;this.SetLineWidth();this.Canvas.beginPath();this.Canvas.moveTo(extendLine.Start.X,extendLine.Start.Y);this.Canvas.lineTo(extendLine.End.X,extendLine.End.Y);this.Canvas.stroke();this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
|
|
5885
5886
|
this.Canvas.restore();};}//画图工具-矩形
|
|
5886
5887
|
function ChartDrawPictureRect(){this.newMethod=IChartDrawPicture;//派生
|
|
5887
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureRect';this.GetXYCoordinate=this.GetXYCoordinate_default;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.Draw=function(){if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=2)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();this.Canvas.strokeStyle=this.LineColor;this.SetLineWidth();this.Canvas.beginPath();this.Canvas.rect(drawPoint[0].X,drawPoint[0].Y,drawPoint[1].X-drawPoint[0].X,drawPoint[1].Y-drawPoint[0].Y);this.Canvas.stroke();this.RestoreLineWidth();//透明背景
|
|
5888
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureRect';this.GetXYCoordinate=this.GetXYCoordinate_default;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.Draw=function(){if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=2)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();this.Canvas.strokeStyle=this.LineColor;this.SetLineWidth();this.Canvas.beginPath();this.Canvas.rect(drawPoint[0].X,drawPoint[0].Y,drawPoint[1].X-drawPoint[0].X,drawPoint[1].Y-drawPoint[0].Y);this.Canvas.stroke();this.RestoreLineWidth();//透明背景
|
|
5888
5889
|
this.Canvas.fillStyle=this.AreaColor;this.Canvas.beginPath();this.Canvas.fillRect(drawPoint[0].X,drawPoint[0].Y,drawPoint[1].X-drawPoint[0].X,drawPoint[1].Y-drawPoint[0].Y);this.Canvas.restore();//画点
|
|
5889
5890
|
this.DrawPoint(drawPoint);};//0-10 鼠标对应的点索引 100=鼠标在正个图形上 -1 鼠标不在图形上
|
|
5890
5891
|
this.IsPointIn=function(x,y,option){if(this.IsFrameMinSize())return-1;if(!this.Frame||this.Status!=10)return-1;var data=this.Frame.Data;if(!data)return-1;var nIndex=this.IsPointInXYValue(x,y,option);if(nIndex>=0)return nIndex;var aryPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!aryPoint||aryPoint.length!=2)return-1;//是否在矩形边框上
|
|
@@ -5892,7 +5893,7 @@ var linePoint=[{X:aryPoint[0].X,Y:aryPoint[0].Y},{X:aryPoint[1].X,Y:aryPoint[0].
|
|
|
5892
5893
|
this.IsPointInLine=function(aryPoint,x,y,option){var radius=5;if(option&&IFrameSplitOperator.IsNumber(option.Zoom))radius+=option.Zoom;else if(this.Option&&IFrameSplitOperator.IsNumber(this.Option.Zoom))radius+=this.Option.Zoom;var pixel=GetDevicePixelRatio();radius*=pixel;this.Canvas.beginPath();this.Canvas.moveTo(aryPoint[0].X,aryPoint[0].Y+radius);this.Canvas.lineTo(aryPoint[0].X,aryPoint[0].Y-radius);this.Canvas.lineTo(aryPoint[1].X,aryPoint[1].Y-radius);this.Canvas.lineTo(aryPoint[1].X,aryPoint[1].Y+radius);this.Canvas.closePath();if(this.Canvas.isPointInPath(x,y))return true;};//垂直线段
|
|
5893
5894
|
this.IsPointInLine2=function(aryPoint,x,y,option){var radius=5;if(option&&IFrameSplitOperator.IsNumber(option.Zoom))radius+=option.Zoom;else if(this.Option&&IFrameSplitOperator.IsNumber(this.Option.Zoom))radius+=this.Option.Zoom;var pixel=GetDevicePixelRatio();radius*=pixel;this.Canvas.beginPath();this.Canvas.moveTo(aryPoint[0].X-radius,aryPoint[0].Y);this.Canvas.lineTo(aryPoint[0].X+radius,aryPoint[0].Y);this.Canvas.lineTo(aryPoint[1].X+radius,aryPoint[1].Y);this.Canvas.lineTo(aryPoint[1].X-radius,aryPoint[1].Y);this.Canvas.closePath();if(this.Canvas.isPointInPath(x,y))return true;};}//画图工具-弧形
|
|
5894
5895
|
function ChartDrawPictureArc(){this.newMethod=IChartDrawPicture;//派生
|
|
5895
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureArc';this.Draw=function(){if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint||drawPoint.length!=2)return;this.ClipFrame();//this.Canvas.beginPath();
|
|
5896
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureArc';this.Draw=function(){if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint||drawPoint.length!=2)return;this.ClipFrame();//this.Canvas.beginPath();
|
|
5896
5897
|
//this.Canvas.rect(drawPoint[0].X,drawPoint[0].Y,drawPoint[1].X-drawPoint[0].X,drawPoint[1].Y-drawPoint[0].Y);
|
|
5897
5898
|
this.SetLineWidth();if(drawPoint[0].X<drawPoint[1].X&&drawPoint[0].Y>drawPoint[1].Y)// 第一象限
|
|
5898
5899
|
{var a=drawPoint[1].X-drawPoint[0].X;var b=drawPoint[0].Y-drawPoint[1].Y;var step=a>b?1/a:1/b;var xcenter=drawPoint[0].X;var ycenter=drawPoint[1].Y;this.Canvas.beginPath();this.Canvas.moveTo(drawPoint[0].X,drawPoint[0].Y);for(var i=1.5*Math.PI;i<2*Math.PI;i+=step){this.Canvas.lineTo(xcenter+a*Math.cos(i),ycenter+b*Math.sin(i)*-1);}for(var j=0;j<=0.5*Math.PI;j+=step){this.Canvas.lineTo(xcenter+a*Math.cos(j),ycenter+b*Math.sin(j)*-1);}}else if(drawPoint[0].X>drawPoint[1].X&&drawPoint[0].Y>drawPoint[1].Y)// 第二象限
|
|
@@ -5909,7 +5910,7 @@ var ArcPoint=[{X:aryPoint[0].X,Y:aryPoint[0].Y},{X:aryPoint[1].X,Y:aryPoint[1].Y
|
|
|
5909
5910
|
{var a=aryPoint[0].X-aryPoint[1].X;var b=aryPoint[1].Y-aryPoint[0].Y;var step=a>b?1/a:1/b;var ainer=a*0.8;var biner=b*0.8;var stepiner=ainer>biner?1/ainer:1/biner;var xcenter=aryPoint[0].X;var ycenter=aryPoint[1].Y;this.Canvas.beginPath();this.Canvas.moveTo(aryPoint[0].X,aryPoint[0].Y);for(var i=0.5*Math.PI;i<=1.5*Math.PI;i+=step){this.Canvas.lineTo(xcenter+a*Math.cos(i),ycenter+b*Math.sin(i)*-1);}for(var j=1.5*Math.PI;j>=0.5*Math.PI;j-=stepiner){this.Canvas.lineTo(xcenter+ainer*Math.cos(j),ycenter+biner*Math.sin(j)*-1);}this.Canvas.closePath();}else if(aryPoint[0].X<aryPoint[1].X&&aryPoint[0].Y<aryPoint[1].Y)// 第四象限
|
|
5910
5911
|
{var a=aryPoint[1].X-aryPoint[0].X;var b=aryPoint[1].Y-aryPoint[0].Y;var step=a>b?1/a:1/b;var ainer=a*0.8;var biner=b*0.8;var stepiner=ainer>biner?1/ainer:1/biner;var xcenter=aryPoint[1].X;var ycenter=aryPoint[0].Y;this.Canvas.beginPath();this.Canvas.moveTo(aryPoint[0].X,aryPoint[0].Y);for(var i=Math.PI;i<=2*Math.PI;i+=step){this.Canvas.lineTo(xcenter+a*Math.cos(i),ycenter+b*Math.sin(i)*-1);}for(var j=2*Math.PI;j>=Math.PI;j-=stepiner){this.Canvas.lineTo(xcenter+ainer*Math.cos(j),ycenter+biner*Math.sin(j)*-1);}this.Canvas.closePath();}if(this.Canvas.isPointInPath(x,y))return true;else return false;};}//M头W底 支持横屏
|
|
5911
5912
|
function ChartDrawPictureWaveMW(){this.newMethod=IChartDrawPicture;//派生
|
|
5912
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureWaveMW';this.PointCount=5;this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.IsHScreen=false;this.Draw=function(){this.LinePoint=[];if(!this.Frame)return;if(this.IsFrameMinSize())return;this.IsHScreen=this.Frame.IsHScreen;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;//var points=drawPoint.slice(0);
|
|
5913
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureWaveMW';this.PointCount=5;this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.IsHScreen=false;this.Draw=function(){this.LinePoint=[];if(!this.Frame)return;if(this.IsFrameMinSize())return;if(!this.IsShow)return;this.IsHScreen=this.Frame.IsHScreen;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;//var points=drawPoint.slice(0);
|
|
5913
5914
|
this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();this.CalculateLines(drawPoint);this.SetLineWidth();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
5914
5915
|
this.Canvas.restore();};this.CalculateLines=function(points){if(!this.Frame)return;if(points.length<2)return;if(this.Status==2){var line={Start:new Point(),End:new Point()};line.Start.Y=points[0].Y;line.Start.X=points[0].X;line.End.Y=points[1].Y;line.End.X=points[1].X;this.LinePoint.push(line);var xMove=points[1].X-points[0].X;var yMove=points[1].Y-points[0].Y;line={Start:new Point(),End:new Point()};if(this.IsHScreen){line.Start.Y=points[1].Y;line.Start.X=points[1].X;line.End.Y=points[1].Y+yMove;line.End.X=points[0].X;}else{line.Start.Y=points[1].Y;line.Start.X=points[1].X;line.End.Y=points[0].Y;line.End.X=points[1].X+xMove;}this.LinePoint.push(line);var ptStart=line.End;var newPt=new Point();newPt.X=ptStart.X;newPt.Y=ptStart.Y;this.Point[2]=newPt;line={Start:new Point(),End:new Point()};if(this.IsHScreen){line.Start.Y=ptStart.Y;line.Start.X=ptStart.X;line.End.Y=ptStart.Y+yMove;line.End.X=points[1].X;}else{line.Start.Y=ptStart.Y;line.Start.X=ptStart.X;line.End.Y=points[1].Y;line.End.X=ptStart.X+xMove;}this.LinePoint.push(line);var ptStart=line.End;var newPt=new Point();newPt.X=ptStart.X;newPt.Y=ptStart.Y;this.Point[3]=newPt;line={Start:new Point(),End:new Point()};if(this.IsHScreen){line.Start.Y=ptStart.Y;line.Start.X=ptStart.X;line.End.Y=ptStart.Y+yMove;line.End.X=points[0].X;}else{line.Start.Y=ptStart.Y;line.Start.X=ptStart.X;line.End.Y=points[0].Y;line.End.X=ptStart.X+xMove;}this.LinePoint.push(line);var ptStart=line.End;var newPt=new Point();newPt.X=ptStart.X;newPt.Y=ptStart.Y;this.Point[4]=newPt;this.PointCount=this.Point.length;}else if(points.length==5){var line={Start:new Point(),End:new Point()};line.Start.Y=points[0].Y;line.Start.X=points[0].X;line.End.Y=points[1].Y;line.End.X=points[1].X;this.LinePoint.push(line);var line={Start:new Point(),End:new Point()};line.Start.Y=points[1].Y;line.Start.X=points[1].X;line.End.Y=points[2].Y;line.End.X=points[2].X;this.LinePoint.push(line);var line={Start:new Point(),End:new Point()};line.Start.Y=points[2].Y;line.Start.X=points[2].X;line.End.Y=points[3].Y;line.End.X=points[3].X;this.LinePoint.push(line);var line={Start:new Point(),End:new Point()};line.Start.Y=points[3].Y;line.Start.X=points[3].X;line.End.Y=points[4].Y;line.End.X=points[4].X;this.LinePoint.push(line);}};}//头肩 头肩顶(Head and shoulders top)以及头肩底(Head and shoulders bottom)两种形态
|
|
5915
5916
|
//支持横屏
|
|
@@ -5918,13 +5919,13 @@ this.newMethod();delete this.newMethod;this.ClassName='ChartDrawHeadShouldersBT'
|
|
|
5918
5919
|
function ChartDrawPictureParallelLines(){this.newMethod=IChartDrawPicture;//派生
|
|
5919
5920
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureParallelLines';this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.PointCount=3;this.LastPoint;//中心线
|
|
5920
5921
|
this.CenterLine={LineDash:[2*GetDevicePixelRatio(),3*GetDevicePixelRatio()],Line:null,IsShow:false};this.Super_SetOption=this.SetOption;//父类函数
|
|
5921
|
-
this.Super_ExportStorageData=this.ExportStorageData;this.SetOption=function(option){if(this.Super_SetOption)this.Super_SetOption(option);if(option){if(option.CenterLine){var item=option.CenterLine;if(IFrameSplitOperator.IsNonEmptyArray(item.LineDash))this.CenterLine.LineDash=item.LineDash.slice(0);if(IFrameSplitOperator.IsBool(item.IsShow))this.CenterLine.IsShow=item.IsShow;}}};this.ExportStorageData=function(){var storageData;if(this.Super_ExportStorageData){storageData=this.Super_ExportStorageData();if(this.CenterLine){storageData.CenterLine={IsShow:this.CenterLine.IsShow,LineDash:this.CenterLine.LineDash.slice(0)};}}return storageData;};this.Draw=function(){this.LinePoint=[];this.CenterLine.Line=null;if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:false});//不检测x,y
|
|
5922
|
+
this.Super_ExportStorageData=this.ExportStorageData;this.SetOption=function(option){if(this.Super_SetOption)this.Super_SetOption(option);if(option){if(option.CenterLine){var item=option.CenterLine;if(IFrameSplitOperator.IsNonEmptyArray(item.LineDash))this.CenterLine.LineDash=item.LineDash.slice(0);if(IFrameSplitOperator.IsBool(item.IsShow))this.CenterLine.IsShow=item.IsShow;}}};this.ExportStorageData=function(){var storageData;if(this.Super_ExportStorageData){storageData=this.Super_ExportStorageData();if(this.CenterLine){storageData.CenterLine={IsShow:this.CenterLine.IsShow,LineDash:this.CenterLine.LineDash.slice(0)};}}return storageData;};this.Draw=function(){this.LinePoint=[];this.CenterLine.Line=null;if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:false});//不检测x,y
|
|
5922
5923
|
if(!drawPoint)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);var points=drawPoint.slice(0);this.CalculateLines(points);this.ClipFrame();this.DrawArea();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}if(this.CenterLine.IsShow&&this.CenterLine.Line){var item=this.CenterLine.Line;this.Canvas.setLineDash(this.CenterLine.LineDash);this.DrawLine(item.Start,item.End);this.Canvas.setLineDash([]);}this.DrawPoint(points);//画点
|
|
5923
5924
|
this.Canvas.restore();};this.SetLastPoint=function(obj){this.LastPoint={X:obj.X,Y:obj.Y};};this.DrawArea=function(){if(this.LinePoint.length!=2)return;this.Canvas.fillStyle=this.AreaColor;this.Canvas.beginPath();this.Canvas.moveTo(this.LinePoint[0].Start.X,this.LinePoint[0].Start.Y);this.Canvas.lineTo(this.LinePoint[0].End.X,this.LinePoint[0].End.Y);this.Canvas.lineTo(this.LinePoint[1].End.X,this.LinePoint[1].End.Y);this.Canvas.lineTo(this.LinePoint[1].Start.X,this.LinePoint[1].Start.Y);this.Canvas.closePath();this.Canvas.fill();};this.CalculateLines=function(points){if(this.PointStatus==2&&this.LastPoint){var pt=new Point();pt.X=this.LastPoint.X;pt.Y=this.LastPoint.Y;points[2]=pt;}if(points.length==2){var linePoint=this.CalculateExtendLinePoint(points[0],points[1]);this.LinePoint.push(linePoint);}else if(points.length==3){var linePoint=this.CalculateExtendLinePoint(points[0],points[1]);this.LinePoint.push(linePoint);//计算平行线
|
|
5924
5925
|
var xMove=points[2].X-points[1].X;var yMove=points[2].Y-points[1].Y;var ptStart=new Point();var ptEnd=new Point();ptStart.X=points[0].X+xMove;ptStart.Y=points[0].Y+yMove;ptEnd.X=points[1].X+xMove;ptEnd.Y=points[1].Y+yMove;linePoint=this.CalculateExtendLinePoint(ptStart,ptEnd);this.LinePoint.push(linePoint);//中心线
|
|
5925
5926
|
var ptStart=new Point();var ptEnd=new Point();ptStart.X=points[0].X+xMove/2;ptStart.Y=points[0].Y+yMove/2;ptEnd.X=points[1].X+xMove/2;ptEnd.Y=points[1].Y+yMove/2;linePoint=this.CalculateExtendLinePoint(ptStart,ptEnd);this.CenterLine.Line=linePoint;}};}//FlatTop/Bottom
|
|
5926
5927
|
function ChartDrawFlatTop(){this.newMethod=IChartDrawPicture;//派生
|
|
5927
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawFlatTop';this.IsPointIn=this.IsPointIn_XYValue_Line;this.PointCount=3;this.LastPoint;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);var points=drawPoint.slice(0);this.CalculateLines(points);this.ClipFrame();for(var i=0;i<this.LinePoint.length;++i){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}this.DrawArea();this.DrawPoint(points);//画点
|
|
5928
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawFlatTop';this.IsPointIn=this.IsPointIn_XYValue_Line;this.PointCount=3;this.LastPoint;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);var points=drawPoint.slice(0);this.CalculateLines(points);this.ClipFrame();for(var i=0;i<this.LinePoint.length;++i){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}this.DrawArea();this.DrawPoint(points);//画点
|
|
5928
5929
|
this.Canvas.restore();};this.SetLastPoint=function(obj){this.LastPoint={X:obj.X,Y:obj.Y};};this.DrawArea=function(){if(this.LinePoint.length!=2)return;this.Canvas.fillStyle=this.AreaColor;this.Canvas.beginPath();this.Canvas.moveTo(this.LinePoint[0].Start.X,this.LinePoint[0].Start.Y);this.Canvas.lineTo(this.LinePoint[0].End.X,this.LinePoint[0].End.Y);this.Canvas.lineTo(this.LinePoint[1].End.X,this.LinePoint[1].End.Y);this.Canvas.lineTo(this.LinePoint[1].Start.X,this.LinePoint[1].Start.Y);this.Canvas.closePath();this.Canvas.fill();};this.CalculateLines=function(points){if(this.PointStatus==2&&this.LastPoint){var ptSecond=points[1];var pt=new Point();pt.X=ptSecond.X;pt.Y=this.LastPoint.Y;points[2]=pt;}if(points.length==2){this.LinePoint.push({Start:points[0],End:points[1]});}else if(points.length==3){this.LinePoint.push({Start:points[0],End:points[1]});//计算水平线
|
|
5929
5930
|
var ptThrid=points[2];ptThrid.X=points[1].X;var ptStart={X:points[0].X,Y:ptThrid.Y};var ptEnd={X:points[1].X,Y:ptThrid.Y};this.LinePoint.push({Start:ptStart,End:ptEnd});}};}//Disjont Channel
|
|
5930
5931
|
function ChartDrawDisjontChannel(){this.newMethod=ChartDrawFlatTop;//派生
|
|
@@ -5944,7 +5945,7 @@ for(var i=0;i<this.Value.length&&i<2;++i){var item=this.Value[i];storageData.Val
|
|
|
5944
5945
|
this.CalculateDrawPoint=function(){if(this.Status<2)return null;if(!this.Point.length||!this.Frame)return null;var data=this.Frame.Data;if(!data)return null;var drawPoint=[];if(this.Status==10)//完成
|
|
5945
5946
|
{for(var i=0;i<2;++i){var item=this.Value[i];var pt=new Point();pt.X=this.Frame.GetXFromIndex(item.XValue-data.DataOffset,false);pt.Y=this.Frame.GetYFromData(item.YValue,false);drawPoint.push(pt);}}else{for(var i=0;i<this.Point.length;++i){var item=this.Point[i];var pt=new Point();pt.X=item.X;pt.Y=item.Y;drawPoint.push(pt);}}if(drawPoint.length>=2){var linePoint={Start:new Point(),End:new Point()};linePoint.Start.X=drawPoint[0].X;linePoint.Start.Y=drawPoint[0].Y;linePoint.End.X=drawPoint[1].X;linePoint.End.Y=drawPoint[1].Y;this.LinePoint.push(linePoint);if(drawPoint.length==3||this.Status==10){var x=linePoint.End.X-linePoint.Start.X;var y=linePoint.End.Y-linePoint.Start.Y;var angle=Math.atan(Math.abs(x/y));var yMove=this.ChannelWidth/Math.sin(angle);//JSConsole.Chart.Log('[ChartDrawPictureParallelChannel::CalculateDrawPoint]',xMove);
|
|
5946
5947
|
linePoint={Start:new Point(),End:new Point()};linePoint.Start.X=drawPoint[0].X;linePoint.Start.Y=drawPoint[0].Y-yMove;linePoint.End.X=drawPoint[1].X;linePoint.End.Y=drawPoint[1].Y-yMove;this.LinePoint.push(linePoint);var ptCenter=new Point();ptCenter.X=linePoint.Start.X+(linePoint.End.X-linePoint.Start.X)/2;ptCenter.Y=linePoint.Start.Y+(linePoint.End.Y-linePoint.Start.Y)/2;drawPoint[2]=ptCenter;this.Point[2]=ptCenter;var xValue=parseInt(this.Frame.GetXData(ptCenter.X))+data.DataOffset;var yValue=this.Frame.GetYData(ptCenter.Y);this.Value[2]={XValue:xValue,YValue:yValue};this.PointCount=this.Point.length;//完成以后是3个点
|
|
5947
|
-
linePoint={Start:new Point(),End:new Point()};linePoint.Start.X=drawPoint[0].X;linePoint.Start.Y=drawPoint[0].Y-yMove/2;linePoint.End.X=drawPoint[1].X;linePoint.End.Y=drawPoint[1].Y-yMove/2;this.CenterLine.Line=linePoint;}}return drawPoint;};this.DrawArea=function(pt,pt2,pt3,pt4){this.Canvas.fillStyle=this.AreaColor;this.Canvas.beginPath();this.Canvas.moveTo(pt.X,pt.Y);this.Canvas.lineTo(pt2.X,pt2.Y);this.Canvas.lineTo(pt3.X,pt3.Y);this.Canvas.lineTo(pt4.X,pt4.Y);this.Canvas.closePath();this.Canvas.fill();};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();if(this.LinePoint.length==2){this.DrawArea(this.LinePoint[0].Start,this.LinePoint[0].End,this.LinePoint[1].End,this.LinePoint[1].Start);}for(var i=0;i<this.LinePoint.length;++i){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}if(this.CenterLine.IsShow&&this.CenterLine.Line){var item=this.CenterLine.Line;this.Canvas.setLineDash(this.CenterLine.LineDash);this.DrawLine(item.Start,item.End);this.Canvas.setLineDash([]);}this.Canvas.restore();this.DrawPoint(drawPoint);//画点
|
|
5948
|
+
linePoint={Start:new Point(),End:new Point()};linePoint.Start.X=drawPoint[0].X;linePoint.Start.Y=drawPoint[0].Y-yMove/2;linePoint.End.X=drawPoint[1].X;linePoint.End.Y=drawPoint[1].Y-yMove/2;this.CenterLine.Line=linePoint;}}return drawPoint;};this.DrawArea=function(pt,pt2,pt3,pt4){this.Canvas.fillStyle=this.AreaColor;this.Canvas.beginPath();this.Canvas.moveTo(pt.X,pt.Y);this.Canvas.lineTo(pt2.X,pt2.Y);this.Canvas.lineTo(pt3.X,pt3.Y);this.Canvas.lineTo(pt4.X,pt4.Y);this.Canvas.closePath();this.Canvas.fill();};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();if(this.LinePoint.length==2){this.DrawArea(this.LinePoint[0].Start,this.LinePoint[0].End,this.LinePoint[1].End,this.LinePoint[1].Start);}for(var i=0;i<this.LinePoint.length;++i){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}if(this.CenterLine.IsShow&&this.CenterLine.Line){var item=this.CenterLine.Line;this.Canvas.setLineDash(this.CenterLine.LineDash);this.DrawLine(item.Start,item.End);this.Canvas.setLineDash([]);}this.Canvas.restore();this.DrawPoint(drawPoint);//画点
|
|
5948
5949
|
};//xStep,yStep 移动的偏移量
|
|
5949
5950
|
this.Move=function(xStep,yStep){if(this.Status!=20)return false;if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;if(this.MovePointIndex==100)//整体移动
|
|
5950
5951
|
{for(var i=0;i<this.Point.length;++i){this.Point[i].X+=xStep;this.Point[i].Y+=yStep;}}else if(this.MovePointIndex==0||this.MovePointIndex==1){if(this.MovePointIndex<this.Point.length){this.Point[this.MovePointIndex].X+=xStep;this.Point[this.MovePointIndex].Y+=yStep;}}else if(this.MovePointIndex==2)//宽度的点要计算
|
|
@@ -5960,7 +5961,7 @@ this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureText';thi
|
|
|
5960
5961
|
//this.FontOption={ Family:'iconfont', Size:20, Weight:null, Style:null }; //Weight(bold 粗体), Style(italic)
|
|
5961
5962
|
this.TextRect=null;//文字区域
|
|
5962
5963
|
this.IsInitialized=false;//是否初始化了
|
|
5963
|
-
this.SettingMenu;this.HQChart;this.SetOption=function(option){if(!option)return;if(option.LineColor)this.LineColor=option.LineColor;if(option.Text)this.Text=option.Text;if(option.FontOption)this.FontOption=option.FontOption;};this.Draw=function(textFont){this.TextRect=null;if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=1)return;this.ClipFrame();this.Canvas.fillStyle=this.LineColor;this.Canvas.textAlign="center";this.Canvas.textBaseline="bottom";this.Canvas.font=this.GetTextFont();this.Canvas.fillText(this.Text,drawPoint[0].X,drawPoint[0].Y);var textWidth=this.Canvas.measureText(this.Text).width;var textHeight=this.FontOption.Size*GetDevicePixelRatio();this.TextRect={};this.TextRect.Left=drawPoint[0].X-textWidth/2;this.TextRect.Top=drawPoint[0].Y-textHeight;this.TextRect.Width=textWidth;this.TextRect.Height=textHeight;//this.Canvas.strokeRect(this.TextRect.Left,this.TextRect.Top,this.TextRect.Width,this.TextRect.Height);
|
|
5964
|
+
this.SettingMenu;this.HQChart;this.SetOption=function(option){if(!option)return;if(option.LineColor)this.LineColor=option.LineColor;if(option.Text)this.Text=option.Text;if(option.FontOption)this.FontOption=option.FontOption;};this.Draw=function(textFont){this.TextRect=null;if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=1)return;this.ClipFrame();this.Canvas.fillStyle=this.LineColor;this.Canvas.textAlign="center";this.Canvas.textBaseline="bottom";this.Canvas.font=this.GetTextFont();this.Canvas.fillText(this.Text,drawPoint[0].X,drawPoint[0].Y);var textWidth=this.Canvas.measureText(this.Text).width;var textHeight=this.FontOption.Size*GetDevicePixelRatio();this.TextRect={};this.TextRect.Left=drawPoint[0].X-textWidth/2;this.TextRect.Top=drawPoint[0].Y-textHeight;this.TextRect.Width=textWidth;this.TextRect.Height=textHeight;//this.Canvas.strokeRect(this.TextRect.Left,this.TextRect.Top,this.TextRect.Width,this.TextRect.Height);
|
|
5964
5965
|
this.Canvas.restore();if(this.IsInitialized===false){this.SetTextOption();this.IsInitialized=true;}};//根据设置动态生成字体
|
|
5965
5966
|
this.GetTextFont=function(){var defaultFont=16*GetDevicePixelRatio()+"px 微软雅黑";if(!this.FontOption||!this.FontOption.Family||this.FontOption.Size<=0)return defaultFont;var font='';if(this.FontOption.Color)font+=this.FontOption.Color+' ';if(this.FontOption.Style)font+=this.FontOption.Style+' ';if(this.FontOption.Weight)font+=this.FontOption.Weight+' ';if(this.FontOption.Size>=0)font+=this.FontOption.Size*GetDevicePixelRatio()+'px ';font+=this.FontOption.Family;return font;};this.SetTextOption=function(){JSConsole.Chart.Log('[ChartDrawPictureText::SetTextOption]');//创建div设置窗口
|
|
5966
5967
|
if(!this.SettingMenu)this.SettingMenu=new ChartPictureTextSettingMenu(this.Frame.ChartBorder.UIElement.parentNode);this.SettingMenu.ChartPicture=this;this.SettingMenu.HQChart=this.HQChart;this.SettingMenu.Position={Left:this.TextRect.Left+this.TextRect.Width,Top:this.TextRect.Top};this.SettingMenu.DoModal();};this.IsPointIn=function(x,y){if(!this.Frame||this.Status!=10)return-1;var data=this.Frame.Data;if(!data)return-1;if(!this.TextRect)return-1;this.Canvas.beginPath();this.Canvas.rect(this.TextRect.Left,this.TextRect.Top,this.TextRect.Width,this.TextRect.Height);if(this.Canvas.isPointInPath(x,y))return 100;return-1;};}//iconfont 图片
|
|
@@ -5969,11 +5970,11 @@ this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureIconFont'
|
|
|
5969
5970
|
this.Text='\uE606';this.FontOption={Family:'iconfont',Size:24};//Weight(bold 粗体), Style(italic)
|
|
5970
5971
|
this.TextRect=null;//文字区域
|
|
5971
5972
|
this.SettingMenu;this.Angle=0;//旋转角度
|
|
5972
|
-
this.SetOption=function(option){if(!option)return;if(option.LineColor)this.LineColor=option.LineColor;if(option.FontOption&&option.FontOption.Size>0)this.FontOption.Size=option.FontOption.Size;if(IFrameSplitOperator.IsNumber(option.Angle))this.Angle=option.Angle;};this.Draw=function(){this.TextRect=null;if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=1)return;var font=this.GetTextFont();if(!font)return;this.ClipFrame();var isHScreen=this.Frame.IsHScreen;var pixel=GetDevicePixelRatio();this.Canvas.fillStyle=this.LineColor;this.Canvas.textAlign="center";this.Canvas.textBaseline="middle";this.Canvas.font=font;if(isHScreen){this.Canvas.translate(drawPoint[0].X,drawPoint[0].Y);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(this.Text,0,0);}else{if(this.Angle!=0){this.Canvas.translate(drawPoint[0].X,drawPoint[0].Y);this.Canvas.rotate(this.Angle*(Math.PI/180));this.Canvas.fillText(this.Text,0,0);}else{this.Canvas.fillText(this.Text,drawPoint[0].X,drawPoint[0].Y);}}var textWidth=this.Canvas.measureText(this.Text).width;this.TextRect={};this.TextRect.Left=drawPoint[0].X-textWidth/2;this.TextRect.Top=drawPoint[0].Y-this.FontOption.Size*pixel;this.TextRect.Width=textWidth;this.TextRect.Height=this.FontOption.Size*pixel;//this.Canvas.strokeRect(this.TextRect.Left,this.TextRect.Top,this.TextRect.Width,this.TextRect.Height);
|
|
5973
|
+
this.SetOption=function(option){if(!option)return;if(option.LineColor)this.LineColor=option.LineColor;if(option.FontOption&&option.FontOption.Size>0)this.FontOption.Size=option.FontOption.Size;if(IFrameSplitOperator.IsNumber(option.Angle))this.Angle=option.Angle;};this.Draw=function(){this.TextRect=null;if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=1)return;var font=this.GetTextFont();if(!font)return;this.ClipFrame();var isHScreen=this.Frame.IsHScreen;var pixel=GetDevicePixelRatio();this.Canvas.fillStyle=this.LineColor;this.Canvas.textAlign="center";this.Canvas.textBaseline="middle";this.Canvas.font=font;if(isHScreen){this.Canvas.translate(drawPoint[0].X,drawPoint[0].Y);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(this.Text,0,0);}else{if(this.Angle!=0){this.Canvas.translate(drawPoint[0].X,drawPoint[0].Y);this.Canvas.rotate(this.Angle*(Math.PI/180));this.Canvas.fillText(this.Text,0,0);}else{this.Canvas.fillText(this.Text,drawPoint[0].X,drawPoint[0].Y);}}var textWidth=this.Canvas.measureText(this.Text).width;this.TextRect={};this.TextRect.Left=drawPoint[0].X-textWidth/2;this.TextRect.Top=drawPoint[0].Y-this.FontOption.Size*pixel;this.TextRect.Width=textWidth;this.TextRect.Height=this.FontOption.Size*pixel;//this.Canvas.strokeRect(this.TextRect.Left,this.TextRect.Top,this.TextRect.Width,this.TextRect.Height);
|
|
5973
5974
|
this.Canvas.restore();};//根据设置动态生成字体
|
|
5974
5975
|
this.GetTextFont=function(){if(!this.FontOption||!this.FontOption.Family||this.FontOption.Size<=0)return null;var font='';if(this.FontOption.Size>=0)font+=this.FontOption.Size*GetDevicePixelRatio()+'px ';font+=this.FontOption.Family;return font;};this.IsPointIn=function(x,y){if(!this.Frame||this.Status!=10)return-1;var data=this.Frame.Data;if(!data)return-1;if(!this.TextRect)return-1;var offset=0;if(this.Option&&this.Option.Zoom>=1){offset=this.Option.Zoom*GetDevicePixelRatio();}this.Canvas.beginPath();this.Canvas.rect(this.TextRect.Left-offset,this.TextRect.Top-offset,this.TextRect.Width+offset*2,this.TextRect.Height+offset*2);if(this.Canvas.isPointInPath(x,y))return 100;return-1;};}//江恩角度线(Gann Fan),亦又称作甘氏线的
|
|
5975
5976
|
function ChartDrawPictureGannFan(){this.newMethod=IChartDrawPicture;//派生
|
|
5976
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureGannFan';this.IsPointIn=this.IsPointIn_XYValue_Line;this.LinePoint=[];this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=2)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();var quadrant=this.GetQuadrant(drawPoint[0],drawPoint[1]);this.SetLineWidth();if(quadrant===1||quadrant===4){this.CalculateLines(drawPoint[0],drawPoint[1],quadrant);this.DrawArea();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End,item.IsDottedLine);}for(var i in this.LinePoint){var item=this.LinePoint[i];if(item.Text&&item.PtEnd)this.DrawTitle(item.PtEnd,item.Text);}}else{this.DrawLine(drawPoint[0],drawPoint[1],false);}this.RestoreLineWidth();this.Canvas.restore();this.DrawPoint(drawPoint);//画点
|
|
5977
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureGannFan';this.IsPointIn=this.IsPointIn_XYValue_Line;this.LinePoint=[];this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=2)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();var quadrant=this.GetQuadrant(drawPoint[0],drawPoint[1]);this.SetLineWidth();if(quadrant===1||quadrant===4){this.CalculateLines(drawPoint[0],drawPoint[1],quadrant);this.DrawArea();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End,item.IsDottedLine);}for(var i in this.LinePoint){var item=this.LinePoint[i];if(item.Text&&item.PtEnd)this.DrawTitle(item.PtEnd,item.Text);}}else{this.DrawLine(drawPoint[0],drawPoint[1],false);}this.RestoreLineWidth();this.Canvas.restore();this.DrawPoint(drawPoint);//画点
|
|
5977
5978
|
};//获取在第几象限
|
|
5978
5979
|
this.GetQuadrant=function(ptStart,ptEnd){if(ptStart.X<ptEnd.X&&ptStart.Y>ptEnd.Y)return 1;else if(ptStart.X<ptEnd.X&&ptStart.Y>ptEnd.Y)return 2;else if(ptStart.X<ptEnd.X&&ptStart.Y<ptEnd.Y)return 4;else return 3;};//isDotline 是否是虚线
|
|
5979
5980
|
this.DrawLine=function(ptStart,ptEnd,isDottedline){if(isDottedline)this.Canvas.setLineDash([5,10]);this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();if(isDottedline)this.Canvas.setLineDash([]);};this.DrawTitle=function(pt,text){this.Canvas.fillStyle=this.LineColor;this.Canvas.textAlign="left";this.Canvas.textBaseline="bottom";this.Canvas.font=this.Font;this.Canvas.fillText(text,pt.X,pt.Y);};this.DrawArea=function(){var lineStart=null,lineEnd=null;for(var i in this.LinePoint){var item=this.LinePoint[i];if(item.Text=='1:8')lineStart=this.LinePoint[i];else if(item.Text=='8:1')lineEnd=this.LinePoint[i];}if(!lineStart||!lineEnd)return;this.Canvas.fillStyle=this.AreaColor;this.Canvas.beginPath();this.Canvas.moveTo(lineStart.End.X,lineStart.End.Y);this.Canvas.lineTo(lineStart.Start.X,lineStart.Start.Y);this.Canvas.lineTo(lineEnd.End.X,lineEnd.End.Y);this.Canvas.closePath();this.Canvas.fill();};//计算线段
|
|
@@ -6002,14 +6003,14 @@ function ChartDrawPictureResistanceLine(){this.newMethod=ChartDrawPictureGannFan
|
|
|
6002
6003
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureResistanceLine';//计算线段
|
|
6003
6004
|
this.CalculateLines=function(ptStart,ptEnd,quadrant){if(!this.Frame)return false;var top=this.Frame.ChartBorder.GetTopEx();var right=this.Frame.ChartBorder.GetRight();var bottom=this.Frame.ChartBorder.GetBottom();var SPLIT_LINE_VALUE=[1.0/3,2.0/3];var SPLIT_LINE_Y_TITLE=["3:1","3:2"];var ptLineStart=new Point();var ptLineEnd=new Point();ptLineStart.X=ptStart.X;ptLineStart.Y=ptStart.Y;ptLineEnd.X=ptEnd.X;ptLineEnd.Y=ptEnd.Y;var lineWidth=Math.abs(ptStart.X-ptEnd.X);var lineHeight=Math.abs(ptStart.Y-ptEnd.Y);if(quadrant===1){var extendLine=this.CalculateExtendLinePoint(ptStart,ptEnd);var line={Start:ptLineStart,End:extendLine.Start,IsDottedLine:false,PtEnd:ptLineEnd,Text:'1:1'};this.LinePoint.push(line);for(var i in SPLIT_LINE_VALUE){if(lineHeight>5){line={Start:ptLineStart,End:null,IsDottedLine:false,PtEnd:new Point(),Text:SPLIT_LINE_Y_TITLE[i]};line.PtEnd.Y=ptStart.Y-lineHeight*SPLIT_LINE_VALUE[i];line.PtEnd.X=ptEnd.X;var extendLine=this.CalculateExtendLinePoint(line.Start,line.PtEnd);line.End=extendLine.Start;this.LinePoint.push(line);}}}else if(quadrant==4){var extendLine=this.CalculateExtendLinePoint(ptStart,ptEnd);var line={Start:ptLineStart,End:extendLine.End,IsDottedLine:false,PtEnd:ptLineEnd,Text:'1:1'};this.LinePoint.push(line);for(var i in SPLIT_LINE_VALUE){if(lineHeight>5){line={Start:ptLineStart,End:null,IsDottedLine:false,PtEnd:new Point(),Text:SPLIT_LINE_Y_TITLE[i]};line.PtEnd.Y=ptStart.Y+lineHeight*SPLIT_LINE_VALUE[i];line.PtEnd.X=ptEnd.X;var extendLine=this.CalculateExtendLinePoint(line.Start,line.PtEnd);line.End=extendLine.End;this.LinePoint.push(line);}}}else return false;return true;};this.DrawArea=function(){var lineStart=null,lineEnd=null;for(var i in this.LinePoint){var item=this.LinePoint[i];if(item.Text=='1:1')lineStart=this.LinePoint[i];else if(item.Text=='3:1')lineEnd=this.LinePoint[i];}if(!lineStart||!lineEnd)return;this.Canvas.fillStyle=this.AreaColor;this.Canvas.beginPath();this.Canvas.moveTo(lineStart.End.X,lineStart.End.Y);this.Canvas.lineTo(lineStart.Start.X,lineStart.Start.Y);this.Canvas.lineTo(lineEnd.End.X,lineEnd.End.Y);this.Canvas.closePath();this.Canvas.fill();};}//黄金分割线
|
|
6004
6005
|
function ChartDrawPictureGoldenSection(){this.newMethod=IChartDrawPicture;//派生
|
|
6005
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureGoldenSection';this.IsPointIn=this.IsPointIn_XYValue_Line;this.Font=14*GetDevicePixelRatio()+"px 微软雅黑";this.GetSectionData=function(){var GOLDEN_SECTION_DATA=[0,0.236,0.382,0.5,0.618,0.80,1,1.236,1.382,1.5,1.618,1.8,2];return GOLDEN_SECTION_DATA;};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint)return;if(drawPoint.length!=2)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.CalculateLines(drawPoint[0],drawPoint[1]);this.ClipFrame();this.SetLineWidth();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End,item.IsDottedLine);}this.RestoreLineWidth();for(var i in this.LinePoint){var item=this.LinePoint[i];if(item.Text)this.DrawTitle(item.Start,item.Text);}this.DrawPoint(drawPoint);//画点
|
|
6006
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureGoldenSection';this.IsPointIn=this.IsPointIn_XYValue_Line;this.Font=14*GetDevicePixelRatio()+"px 微软雅黑";this.GetSectionData=function(){var GOLDEN_SECTION_DATA=[0,0.236,0.382,0.5,0.618,0.80,1,1.236,1.382,1.5,1.618,1.8,2];return GOLDEN_SECTION_DATA;};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint)return;if(drawPoint.length!=2)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.CalculateLines(drawPoint[0],drawPoint[1]);this.ClipFrame();this.SetLineWidth();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End,item.IsDottedLine);}this.RestoreLineWidth();for(var i in this.LinePoint){var item=this.LinePoint[i];if(item.Text)this.DrawTitle(item.Start,item.Text);}this.DrawPoint(drawPoint);//画点
|
|
6006
6007
|
this.Canvas.restore();};this.CalculateHSCreenLines=function(ptStart,ptEnd){var sectionData=this.GetSectionData();var left=this.Frame.ChartBorder.GetTop();var right=this.Frame.ChartBorder.GetBottom();var lineHeight=ptStart.X-ptEnd.X;for(var i=0;i<sectionData.length;++i){var yMove=lineHeight*sectionData[i];var line={Start:new Point(),End:new Point()};line.Start.X=ptStart.X-yMove;line.Start.Y=left;line.End.X=ptStart.X-yMove;line.End.Y=right;var text='';if(i==0)text='Base ';else text=(sectionData[i]*100).toFixed(2)+'% ';var yValue=this.Frame.GetYData(line.Start.X);text+=yValue.toFixed(2);line.Text=text;this.LinePoint.push(line);}};this.CalculateLines=function(ptStart,ptEnd){if(this.Frame.IsHScreen){this.CalculateHSCreenLines(ptStart,ptEnd);return;}var sectionData=this.GetSectionData();var left=this.Frame.ChartBorder.GetLeft();var right=this.Frame.ChartBorder.GetRight();var lineHeight=ptStart.Y-ptEnd.Y;for(var i=0;i<sectionData.length;++i){var yMove=lineHeight*sectionData[i];var line={Start:new Point(),End:new Point()};line.Start.Y=ptStart.Y-yMove;line.Start.X=left;line.End.Y=ptStart.Y-yMove;line.End.X=right;var text='';if(i==0)text='Base ';else text=(sectionData[i]*100).toFixed(2)+'% ';var yValue=this.Frame.GetYData(line.Start.Y);text+=yValue.toFixed(2);line.Text=text;this.LinePoint.push(line);}};this.DrawLine=function(ptStart,ptEnd){this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();};this.DrawTitle=function(pt,text){this.Canvas.fillStyle=this.LineColor;this.Canvas.textAlign="left";this.Canvas.textBaseline="bottom";this.Canvas.font=this.Font;if(this.Frame.IsHScreen){this.Canvas.save();this.Canvas.translate(pt.X,pt.Y);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(text,0,0);this.Canvas.restore();}else{this.Canvas.fillText(text,pt.X,pt.Y);}};}//百分比线
|
|
6007
6008
|
function ChartDrawPicturePercentage(){this.newMethod=ChartDrawPictureGoldenSection;//派生
|
|
6008
6009
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPicturePercentage';this.GetSectionData=function(){var GOLDEN_SECTION_DATA=[0,0.25,0.333,0.50,1];return GOLDEN_SECTION_DATA;};}//波段线
|
|
6009
6010
|
function ChartDrawPictureWaveBand(){this.newMethod=ChartDrawPictureGoldenSection;//派生
|
|
6010
6011
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureWaveBand';this.GetSectionData=function(){var GOLDEN_SECTION_DATA=[0,0.125,0.25,0.375,0.50,0.625,0.75,0.875,1];return GOLDEN_SECTION_DATA;};}//三角形
|
|
6011
6012
|
function ChartDrawPictureTriangle(){this.newMethod=IChartDrawPicture;//派生
|
|
6012
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureTriangle';this.PointCount=3;this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.LastPoint;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;var points=drawPoint.slice(0);this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();this.CalculateLines(points);for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}this.DrawArea(points);this.DrawPoint(points);//画点
|
|
6013
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureTriangle';this.PointCount=3;this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.LastPoint;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;var points=drawPoint.slice(0);this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();this.CalculateLines(points);for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}this.DrawArea(points);this.DrawPoint(points);//画点
|
|
6013
6014
|
this.DrawTitle(points);this.Canvas.restore();};this.DrawArea=function(points){if(points.length!=3)return;this.Canvas.fillStyle=this.AreaColor;this.Canvas.beginPath();this.Canvas.moveTo(points[0].X,points[0].Y);this.Canvas.lineTo(points[1].X,points[1].Y);this.Canvas.lineTo(points[2].X,points[2].Y);this.Canvas.lineTo(points[0].X,points[0].Y);this.Canvas.closePath();this.Canvas.fill();};//显示角度数据
|
|
6014
6015
|
this.DrawTitle=function(points){if(this.Status!=10)return;//拖拽完成以后才显示角度数据
|
|
6015
6016
|
//输出3个点的角度
|
|
@@ -6021,7 +6022,7 @@ this.DrawTitle=function(points){if(this.Status!=10)return;//拖拽完成以后
|
|
|
6021
6022
|
this.Canvas.fillText('∠60',points[0].X,points[0].Y);
|
|
6022
6023
|
*/};this.SetLastPoint=function(obj){this.LastPoint={X:obj.X,Y:obj.Y};};this.CalculateLines=function(points){if(this.PointStatus==2&&this.LastPoint){var pt=new Point();pt.X=this.LastPoint.X;pt.Y=this.LastPoint.Y;points[2]=pt;}if(points.length===2){var line={Start:new Point(),End:new Point()};line.Start.Y=points[0].Y;line.Start.X=points[0].X;line.End.Y=points[1].Y;line.End.X=points[1].X;this.LinePoint.push(line);}else if(points.length===3){var line={Start:new Point(),End:new Point()};line.Start.Y=points[0].Y;line.Start.X=points[0].X;line.End.Y=points[1].Y;line.End.X=points[1].X;this.LinePoint.push(line);line={Start:new Point(),End:new Point()};line.Start.Y=points[1].Y;line.Start.X=points[1].X;line.End.Y=points[2].Y;line.End.X=points[2].X;this.LinePoint.push(line);line={Start:new Point(),End:new Point()};line.Start.Y=points[2].Y;line.Start.X=points[2].X;line.End.Y=points[0].Y;line.End.X=points[0].X;this.LinePoint.push(line);}};}//对称角度
|
|
6023
6024
|
function ChartDrawPictureSymmetryAngle(){this.newMethod=IChartDrawPicture;//派生
|
|
6024
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureSymmetryAngle';this.PointCount=2;this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;//var points=drawPoint.slice(0);
|
|
6025
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureSymmetryAngle';this.PointCount=2;this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;//var points=drawPoint.slice(0);
|
|
6025
6026
|
this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();this.CalculateLines(drawPoint);for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}this.DrawArea();this.DrawPoint(drawPoint);//画点
|
|
6026
6027
|
this.DrawTitle(drawPoint);this.Canvas.restore();};this.CalculateLines=function(points){if(points.length!=2)return;if(!this.Frame)return;var line={Start:new Point(),End:new Point()};line.Start.Y=points[0].Y;line.Start.X=points[0].X;line.End.Y=points[1].Y;line.End.X=points[1].X;this.LinePoint.push(line);line={Start:new Point(),End:new Point()};line.Start.Y=points[0].Y;line.Start.X=points[0].X;line.End.Y=points[1].Y;line.End.X=points[0].X;this.LinePoint.push(line);var xMove=points[0].X-points[1].X;line={Start:new Point(),End:new Point()};line.Start.Y=points[0].Y;line.Start.X=points[0].X;line.End.Y=points[1].Y;line.End.X=points[0].X+xMove;this.LinePoint.push(line);};this.DrawArea=function(){if(this.LinePoint.length!=3)return;this.Canvas.fillStyle=this.AreaColor;this.Canvas.beginPath();this.Canvas.moveTo(this.LinePoint[0].Start.X,this.LinePoint[0].Start.Y);this.Canvas.lineTo(this.LinePoint[0].End.X,this.LinePoint[0].End.Y);this.Canvas.lineTo(this.LinePoint[2].End.X,this.LinePoint[2].End.Y);this.Canvas.moveTo(this.LinePoint[0].Start.X,this.LinePoint[0].Start.Y);this.Canvas.closePath();this.Canvas.fill();};//显示角度数据
|
|
6027
6028
|
this.DrawTitle=function(points){if(this.Status!=10)return;//拖拽完成以后才显示角度数据
|
|
@@ -6034,17 +6035,17 @@ this.DrawTitle=function(points){if(this.Status!=10)return;//拖拽完成以后
|
|
|
6034
6035
|
this.Canvas.fillText('∠60',points[0].X,points[0].Y);
|
|
6035
6036
|
*/};}//圆
|
|
6036
6037
|
function ChartDrawPictureCircle(){this.newMethod=IChartDrawPicture;//派生
|
|
6037
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureCircle';this.PointCount=2;this.CircleData;this.GetXYCoordinate=this.GetXYCoordinate_default;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=2)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();var x=drawPoint[0].X-drawPoint[1].X;var y=drawPoint[0].Y-drawPoint[1].Y;var r=Math.sqrt(x*x+y*y);this.Canvas.fillStyle=this.AreaColor;this.Canvas.strokeStyle=this.LineColor;this.DrawLine(drawPoint[0],drawPoint[1]);this.Canvas.beginPath();this.Canvas.arc(drawPoint[0].X,drawPoint[0].Y,r,0,2*Math.PI);this.Canvas.stroke();this.Canvas.fill();this.CircleData={X:drawPoint[0].X,Y:drawPoint[0].Y,R:r};this.DrawPoint(drawPoint);//画点
|
|
6038
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureCircle';this.PointCount=2;this.CircleData;this.GetXYCoordinate=this.GetXYCoordinate_default;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=2)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();var x=drawPoint[0].X-drawPoint[1].X;var y=drawPoint[0].Y-drawPoint[1].Y;var r=Math.sqrt(x*x+y*y);this.Canvas.fillStyle=this.AreaColor;this.Canvas.strokeStyle=this.LineColor;this.DrawLine(drawPoint[0],drawPoint[1]);this.Canvas.beginPath();this.Canvas.arc(drawPoint[0].X,drawPoint[0].Y,r,0,2*Math.PI);this.Canvas.stroke();this.Canvas.fill();this.CircleData={X:drawPoint[0].X,Y:drawPoint[0].Y,R:r};this.DrawPoint(drawPoint);//画点
|
|
6038
6039
|
this.Canvas.restore();};//0-10 鼠标对应的点索引 100=鼠标在正个图形上 -1 鼠标不在图形上
|
|
6039
6040
|
this.IsPointIn=function(x,y,option){if(this.IsFrameMinSize())return-1;if(this.Status!=10)return-1;var value=this.IsPointInXYValue(x,y,option);if(value>=0)return value;if(this.CircleData&&this.CircleData.R>8){var triangleX=this.CircleData.X-x;var triangleY=this.CircleData.Y-y;var r=Math.sqrt(triangleX*triangleX+triangleY*triangleY);//计算直径
|
|
6040
6041
|
if(r<this.CircleData.R&&r>this.CircleData.R-8)return 100;}return-1;};}//四边形
|
|
6041
6042
|
function ChartDrawPictureQuadrangle(){this.newMethod=IChartDrawPicture;//派生
|
|
6042
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureQuadrangle';this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.PointCount=3;this.LastPoint;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);var points=drawPoint.slice(0);this.CalculateLines(points);this.ClipFrame();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}this.DrawArea();this.DrawPoint(points);//画点
|
|
6043
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureQuadrangle';this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.PointCount=3;this.LastPoint;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);var points=drawPoint.slice(0);this.CalculateLines(points);this.ClipFrame();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}this.DrawArea();this.DrawPoint(points);//画点
|
|
6043
6044
|
this.Canvas.restore();};this.SetLastPoint=function(obj){this.LastPoint={X:obj.X,Y:obj.Y};};this.DrawArea=function(){if(this.LinePoint.length!=4)return;this.Canvas.fillStyle=this.AreaColor;this.Canvas.beginPath();this.Canvas.moveTo(this.LinePoint[0].Start.X,this.LinePoint[0].Start.Y);this.Canvas.lineTo(this.LinePoint[0].End.X,this.LinePoint[0].End.Y);this.Canvas.lineTo(this.LinePoint[1].End.X,this.LinePoint[1].End.Y);this.Canvas.lineTo(this.LinePoint[2].End.X,this.LinePoint[2].End.Y);this.Canvas.closePath();this.Canvas.fill();};this.CalculateLines=function(points){if(this.PointStatus==2&&this.LastPoint){var pt=new Point();pt.X=this.LastPoint.X;pt.Y=this.LastPoint.Y;points[2]=pt;}if(points.length==2){var linePoint=this.CreateLineData(points[0],points[1]);this.LinePoint.push(linePoint);}else if(points.length==3){var linePoint=this.CreateLineData(points[0],points[1]);this.LinePoint.push(linePoint);var linePoint=this.CreateLineData(points[1],points[2]);this.LinePoint.push(linePoint);//计算平行线
|
|
6044
6045
|
var xMove=points[2].X-points[1].X;var yMove=points[2].Y-points[1].Y;var pt4=new Point();//第4个点的坐标
|
|
6045
6046
|
pt4.X=points[0].X+xMove;pt4.Y=points[0].Y+yMove;var linePoint=this.CreateLineData(points[2],pt4);this.LinePoint.push(linePoint);var linePoint=this.CreateLineData(pt4,points[0]);this.LinePoint.push(linePoint);}};}//斐波那契周期线
|
|
6046
6047
|
function ChartDrawPictureFibonacci(){this.newMethod=IChartDrawPicture;//派生
|
|
6047
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureFibonacci';this.PointCount=1;this.Font=14*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint)return;this.CalculateLines();if(this.LinePoint.length<=0)return;this.ClipFrame();this.SetLineWidth();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);this.DrawTitle(item.Start,item.Title);}this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
6048
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureFibonacci';this.PointCount=1;this.Font=14*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint)return;this.CalculateLines();if(this.LinePoint.length<=0)return;this.ClipFrame();this.SetLineWidth();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);this.DrawTitle(item.Start,item.Title);}this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
6048
6049
|
this.Canvas.restore();};this.DrawTitle=function(pt,text){this.Canvas.fillStyle=this.LineColor;this.Canvas.textAlign="left";this.Canvas.textBaseline="top";this.Canvas.font=this.Font;if(this.Frame.IsHScreen){this.Canvas.save();this.Canvas.translate(pt.X,pt.Y);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(text,2,10);this.Canvas.restore();}else{this.Canvas.fillText(text,pt.X+2,pt.Y+10);}};this.CalculateHSCreenLines=function(){var data=this.Frame.Data;if(!data)return;var xStart=null;if(this.Status==10){if(this.Value.length!=1)return;xStart=this.Value[0].XValue;}else{if(this.Point.length!=1)return;xStart=parseInt(this.Frame.GetXData(this.Point[0].Y))+data.DataOffset;}var top=this.Frame.ChartBorder.GetRightEx();var bottom=this.Frame.ChartBorder.GetLeftEx();var showCount=this.Frame.XPointCount;var LINE_DATA=[1,2,3,5,8,13,21,34,55,89,144,233];for(var i=0;i<LINE_DATA.length;++i){var xValue=xStart+LINE_DATA[i];var dataIndex=xValue-data.DataOffset;if(dataIndex<0||dataIndex>=showCount)continue;var x=this.Frame.GetXFromIndex(xValue-data.DataOffset,false);var line={Start:new Point(),End:new Point(),Title:LINE_DATA[i]};line.Start.X=top;line.Start.Y=x;line.End.X=bottom;line.End.Y=x;this.LinePoint.push(line);}};this.CalculateLines=function(){if(this.Status<2)return;if(!this.Frame)return;var data=this.Frame.Data;if(!data)return;if(this.Frame.IsHScreen){this.CalculateHSCreenLines();return;}var xStart=null;if(this.Status==10){if(this.Value.length!=1)return;xStart=this.Value[0].XValue;}else{if(this.Point.length!=1)return;xStart=parseInt(this.Frame.GetXData(this.Point[0].X))+data.DataOffset;}var top=this.Frame.ChartBorder.GetTopEx();var bottom=this.Frame.ChartBorder.GetBottom();var showCount=this.Frame.XPointCount;var LINE_DATA=[1,2,3,5,8,13,21,34,55,89,144,233];for(var i=0;i<LINE_DATA.length;++i){var xValue=xStart+LINE_DATA[i];var dataIndex=xValue-data.DataOffset;if(dataIndex<0||dataIndex>=showCount)continue;var x=this.Frame.GetXFromIndex(xValue-data.DataOffset,false);var line={Start:new Point(),End:new Point(),Title:LINE_DATA[i]};line.Start.Y=top;line.Start.X=x;line.End.Y=bottom;line.End.X=x;this.LinePoint.push(line);}};}//线性回归
|
|
6049
6050
|
function ChartDrawLinearRegression(option){this.newMethod=IChartDrawPicture;//派生
|
|
6050
6051
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawLinearRegression';this.PointCount=2;this.IsPointIn=this.IsPointIn_XYValue_Line;this.ChartBorder;this.Lines=[];//回归线 { XValue:, YValue: }
|
|
@@ -6054,7 +6055,7 @@ this.ExtendLineDash=[5,5];//延长线虚线
|
|
|
6054
6055
|
this.MaxPoint;this.MinPoint;if(option){if(option.IsShowMaxMinLine==true)this.IsShowMaxMinLine=true;if(option.IsShowExtendLine==true)this.IsShowExtendLine=true;}//导入
|
|
6055
6056
|
this.ImportStorageData=function(storageData){if(storageData.IsShowMaxMinLine==true)this.IsShowMaxMinLine=true;if(storageData.IsShowExtendLine==true)this.IsShowExtendLine=true;if(storageData.Lines)this.Lines=storageData.Lines;if(storageData.MaxPoint&&storageData.MinPoint){this.MaxPoint=storageData.MaxPoint;this.MinPoint=storageData.MinPoint;}};//导出
|
|
6056
6057
|
this.Super_ExportStorageData=this.ExportStorageData;this.ExportStorageData=function(){var storageData;if(this.Super_ExportStorageData){storageData=this.Super_ExportStorageData();storageData.IsShowMaxMinLine=this.IsShowMaxMinLine;storageData.IsShowExtendLine=this.IsShowExtendLine;storageData.Lines=this.Lines;if(this.IsShowMaxMinLine){storageData.MaxPoint=this.MaxPoint;storageData.MinPoint=this.MinPoint;}}return storageData;};this.PointToValue_Backup=this.PointToValue;this.PointToValue=function(){//拖拽完成 把点移动到线段头尾
|
|
6057
|
-
this.Point[0]={X:this.Lines[0].X,Y:this.Lines[0].Y};this.Point[1]={X:this.Lines[this.Lines.length-1].X,Y:this.Lines[this.Lines.length-1].Y};this.PointToValue_Backup();};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=2){if(this.Status==10){this.ClipFrame();this.ChartBorder=this.Frame.ChartBorder;this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.DrawLinearLines();this.RestoreLineWidth();this.Canvas.restore();}return;}this.ClipFrame();this.ChartBorder=this.Frame.ChartBorder;//0=开始画 1=完成第1个点 2=完成第2个点 3=完成第3个点 10=完成 20=移动)
|
|
6058
|
+
this.Point[0]={X:this.Lines[0].X,Y:this.Lines[0].Y};this.Point[1]={X:this.Lines[this.Lines.length-1].X,Y:this.Lines[this.Lines.length-1].Y};this.PointToValue_Backup();};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=2){if(this.Status==10){this.ClipFrame();this.ChartBorder=this.Frame.ChartBorder;this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.DrawLinearLines();this.RestoreLineWidth();this.Canvas.restore();}return;}this.ClipFrame();this.ChartBorder=this.Frame.ChartBorder;//0=开始画 1=完成第1个点 2=完成第2个点 3=完成第3个点 10=完成 20=移动)
|
|
6058
6059
|
this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;var ptStart=drawPoint[0];var ptEnd=drawPoint[1];if(this.Status==10){this.DrawLinearLines();}else{var top=this.ChartBorder.GetTopEx();var bottom=this.ChartBorder.GetBottomEx();var kPoint=this.PointToKLine([ptStart,ptEnd]);//JSConsole.Chart.Log('[ChartDrawLinearRegression::Draw] kPoint', kPoint);
|
|
6059
6060
|
var linear=this.Calculate(kPoint);//JSConsole.Chart.Log('[ChartDrawLinearRegression::Draw] linear', linear);
|
|
6060
6061
|
this.Lines=linear.Points;this.MaxPoint=linear.Max;this.MinPoint=linear.Min;this.DrawLinearLines();this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,top);this.Canvas.lineTo(ptStart.X,bottom);this.Canvas.moveTo(ptEnd.X,top);this.Canvas.lineTo(ptEnd.X,bottom);this.Canvas.stroke();}this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
|
|
@@ -6073,22 +6074,22 @@ this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath
|
|
|
6073
6074
|
this.Canvas.textBaseline='bottom';this.Canvas.textAlign='left';this.Canvas.font=this.Font;if(this.TitleColor){this.Canvas.fillStyle=this.TitleColor;}else if(IFrameSplitOperator.IsNumber(kDataInfo.Increase)){if(kDataInfo.Increase>0)this.Canvas.fillStyle=g_JSChartResource.UpTextColor;else if(kDataInfo.Increase<0)this.Canvas.fillStyle=g_JSChartResource.DownTextColor;else this.Canvas.fillStyle=g_JSChartResource.UnchagneTextColor;}else{this.Canvas.fillStyle=g_JSChartResource.UnchagneTextColor;}var offset=3*GetDevicePixelRatio();var xText=ptStart.X;var yText=ptStart.Y;if(this.IsHScreen){this.Canvas.translate(xText+offset,yText+offset);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(title,0,0);}else{this.Canvas.fillText(title,xText+offset,yText-offset);}this.Canvas.restore();};this.Calculate=function(kPoint){var startPoint=kPoint[0];var endPoint=kPoint[1];if(startPoint.XValue>endPoint.XValue){startPoint=kPoint[1];endPoint=kPoint[0];}var data=this.Frame.Data.Data;var open,high,low,yClose,close;var count=0;for(var i=startPoint.XValue;i<=endPoint.XValue;++i,++count){var item=data[i];if(count==0){yClose=item.YClose;open=item.Open;close=item.Close;low=item.Low;high=item.High;}else{close=item.Close;if(low>item.Low)low=item.Low;if(high<item.High)high=item.High;}}if(!IFrameSplitOperator.IsPlusNumber(yClose))//前收盘无效, 取上一个交易日的收盘价
|
|
6074
6075
|
{var index=startPoint.XValue-1;if(index>=0&&index<data.length)yClose=data[index].Close;}var result={YClose:yClose,Open:open,High:high,Low:low,Close:close,Count:count};if(IFrameSplitOperator.IsPlusNumber(yClose)){result.Increase=(close-yClose)/yClose*100;result.Risefall=close-yClose;}return result;};}//画图工具-标价线 支持横屏
|
|
6075
6076
|
function ChartDrawPriceLine(){this.newMethod=IChartDrawPicture;//派生
|
|
6076
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPriceLine';this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.PointCount=1;this.IsPointIn=this.IsPointIn_XYValue_Line;this.IsHScreen=false;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=1)return;this.IsHScreen=this.Frame.IsHScreen;var ptStart=drawPoint[0];var chartBorder=this.Frame.ChartBorder;if(this.IsHScreen){var left=chartBorder.GetLeftEx();var right=chartBorder.GetRightEx();if(ptStart.X<left||ptStart.X>right)return;var bottom=chartBorder.GetBottom();var ptEnd={X:ptStart.X,Y:bottom};var price=this.Frame.GetYData(ptStart.X,false);}else{var bottom=chartBorder.GetBottomEx();var top=chartBorder.GetTopEx();if(ptStart.Y<top||ptStart.Y>bottom)return;var right=chartBorder.GetRight();var ptEnd={X:right,Y:ptStart.Y};var price=this.Frame.GetYData(ptStart.Y,false);}this.ClipFrame();this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
|
|
6077
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPriceLine';this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.PointCount=1;this.IsPointIn=this.IsPointIn_XYValue_Line;this.IsHScreen=false;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=1)return;this.IsHScreen=this.Frame.IsHScreen;var ptStart=drawPoint[0];var chartBorder=this.Frame.ChartBorder;if(this.IsHScreen){var left=chartBorder.GetLeftEx();var right=chartBorder.GetRightEx();if(ptStart.X<left||ptStart.X>right)return;var bottom=chartBorder.GetBottom();var ptEnd={X:ptStart.X,Y:bottom};var price=this.Frame.GetYData(ptStart.X,false);}else{var bottom=chartBorder.GetBottomEx();var top=chartBorder.GetTopEx();if(ptStart.Y<top||ptStart.Y>bottom)return;var right=chartBorder.GetRight();var ptEnd={X:right,Y:ptStart.Y};var price=this.Frame.GetYData(ptStart.Y,false);}this.ClipFrame();this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
|
|
6077
6078
|
this.Canvas.textBaseline='bottom';this.Canvas.textAlign='left';this.Canvas.fillStyle=this.LineColor;this.Canvas.font=this.Font;var offset=2*GetDevicePixelRatio();var xText=ptStart.X;var yText=ptStart.Y;if(this.IsHScreen){this.Canvas.translate(xText+offset,yText+offset);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(price.toFixed(2),0,0);}else{this.Canvas.fillText(price.toFixed(2),xText+offset,yText-offset);}this.Canvas.restore();};}//画图工具-标价线2 支持横屏
|
|
6078
6079
|
function ChartDrawPriceLineV2(){this.newMethod=IChartDrawPicture;//派生
|
|
6079
6080
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPriceLineV2';this.Font=12*GetDevicePixelRatio()+"px 微软雅黑";this.PointCount=1;this.IsPointIn=this.IsPointIn_XYValue_Line;this.IsHScreen=false;this.LineWidth=1;this.IsDrawFirst=true;this.TextColor="rgb(255,255,255)";this.Title;//标题
|
|
6080
6081
|
this.Super_SetOption=this.SetOption;//父类函数
|
|
6081
|
-
this.SetOption=function(option){if(this.Super_SetOption)this.Super_SetOption(option);if(option){if(option.TextColor)this.TextColor=option.TextColor;if(option.Title)this.Title=option.Title;}};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=1)return;if(!this.IsYValueInFrame(this.Value[0].YValue))return;this.IsHScreen=this.Frame.IsHScreen;var chartBorder=this.Frame.ChartBorder;var border=this.Frame.GetBorder();if(this.IsHScreen){var left=border.LeftEx;var right=border.RightEx;var bottom=border.Bottom;var top=border.Top;var ptStart={X:drawPoint[0].X,Y:top};if(ptStart.X<left||ptStart.X>right)return;var ptEnd={X:drawPoint[0].X,Y:bottom};var price=this.Frame.GetYData(ptStart.X,false);}else{var bottom=border.BottomEx;var top=border.TopTitle;var left=border.Left;var right=border.Right;var ptStart={X:left,Y:drawPoint[0].Y};if(ptStart.Y<top||ptStart.Y>bottom)return;var ptEnd={X:right,Y:drawPoint[0].Y};var price=this.Frame.GetYData(ptStart.Y,false);}//this.ClipFrame();
|
|
6082
|
+
this.SetOption=function(option){if(this.Super_SetOption)this.Super_SetOption(option);if(option){if(option.TextColor)this.TextColor=option.TextColor;if(option.Title)this.Title=option.Title;}};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=1)return;if(!this.IsYValueInFrame(this.Value[0].YValue))return;this.IsHScreen=this.Frame.IsHScreen;var chartBorder=this.Frame.ChartBorder;var border=this.Frame.GetBorder();if(this.IsHScreen){var left=border.LeftEx;var right=border.RightEx;var bottom=border.Bottom;var top=border.Top;var ptStart={X:drawPoint[0].X,Y:top};if(ptStart.X<left||ptStart.X>right)return;var ptEnd={X:drawPoint[0].X,Y:bottom};var price=this.Frame.GetYData(ptStart.X,false);}else{var bottom=border.BottomEx;var top=border.TopTitle;var left=border.Left;var right=border.Right;var ptStart={X:left,Y:drawPoint[0].Y};if(ptStart.Y<top||ptStart.Y>bottom)return;var ptEnd={X:right,Y:drawPoint[0].Y};var price=this.Frame.GetYData(ptStart.Y,false);}//this.ClipFrame();
|
|
6082
6083
|
this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ToFixedPoint(ptStart.X),ToFixedPoint(ptStart.Y));this.Canvas.lineTo(ToFixedPoint(ptEnd.X),ToFixedPoint(ptEnd.Y));this.Canvas.stroke();this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);var pixelTatio=GetDevicePixelRatio();this.Canvas.font=this.Font;var offset=2*pixelTatio;var xText=ptEnd.X;var yText=ptEnd.Y;this.Canvas.textBaseline='middle';this.Canvas.textAlign='left';var textHeight=this.GetFontHeight();var text=price.toFixed(2);var textWidth=this.Canvas.measureText(text).width+2*offset;if(this.IsHScreen){if(chartBorder.Bottom>10){var rtBG={Left:xText-textHeight/2,Top:yText,Width:textHeight,Height:textWidth};}else//框架内部显示
|
|
6083
6084
|
{yText=yText-textWidth;var rtBG={Left:xText-textHeight/2,Top:yText,Width:textHeight,Height:textWidth};}this.Canvas.fillStyle=this.LineColor;this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);this.Canvas.save();this.Canvas.translate(xText,yText+1*pixelTatio);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillStyle=this.TextColor;this.Canvas.fillText(text,0,0);this.Canvas.restore();if(this.Title){var textWidth=this.Canvas.measureText(this.Title).width+2*pixelTatio;if(chartBorder.Bottom>10){var rtTitle={Left:rtBG.Left,Top:bottom-textWidth-1*pixelTatio,Width:textHeight,Height:textWidth};}else{var rtTitle={Left:rtBG.Left,Top:rtBG.Top-textWidth-1*pixelTatio,Width:textHeight,Height:textWidth};}this.Canvas.fillStyle=this.LineColor;this.Canvas.fillRect(rtTitle.Left,rtTitle.Top,rtTitle.Width,rtTitle.Height);this.Canvas.save();this.Canvas.translate(xText,rtTitle.Top+1*pixelTatio);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillStyle=this.TextColor;this.Canvas.fillText(this.Title,0,0);this.Canvas.restore();}}else{if(chartBorder.Right>10){var rtBG={Left:xText,Top:yText-textHeight/2-1*pixelTatio,Width:textWidth,Height:textHeight};if(rtBG.Left+rtBG.Width>border.ChartWidth)rtBG.Left=border.ChartWidth-rtBG.Width-2*pixelTatio;}else//框架内部显示
|
|
6084
6085
|
{var rtBG={Left:xText-textWidth,Top:yText-textHeight/2-1*pixelTatio,Width:textWidth,Height:textHeight};}this.Canvas.fillStyle=this.LineColor;this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);this.Canvas.fillStyle=this.TextColor;this.Canvas.fillText(text,rtBG.Left+offset,yText);if(this.Title){var textWidth=this.Canvas.measureText(this.Title).width+2*pixelTatio;if(chartBorder.Right>10){var rtTitle={Left:right-textWidth-1*pixelTatio,Top:rtBG.Top,Width:textWidth,Height:textHeight};if(rtBG.Left!=right)rtTitle.Left=rtBG.Left-textWidth-1*pixelTatio;}else{var rtTitle={Left:rtBG.Left-textWidth,Top:rtBG.Top,Width:textWidth,Height:textHeight};}this.Canvas.fillStyle=this.LineColor;this.Canvas.fillRect(rtTitle.Left,rtTitle.Top,rtTitle.Width,rtTitle.Height);this.Canvas.fillStyle=this.TextColor;this.Canvas.fillText(this.Title,rtTitle.Left+1*pixelTatio,yText);}}};this.DrawPrice=function(){};}//画图工具-竖线 支持横屏
|
|
6085
6086
|
function ChartDrawVerticalLine(){this.newMethod=IChartDrawPicture;//派生
|
|
6086
|
-
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawVerticalLine';this.PointCount=1;this.IsPointIn=this.IsPointIn_XYValue_Line;this.IsHScreen=false;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.Frame||!this.Frame.Data)return;var data=this.Frame.Data;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=1)return;this.IsHScreen=this.Frame.IsHScreen;var pt=drawPoint[0];var chartBorder=this.Frame.ChartBorder;if(this.IsHScreen){var xValue=Math.round(this.Frame.GetXData(pt.Y,false))+data.DataOffset;if(xValue<0)xValue=0;else if(xValue>=data.Data.length)xValue=data.Data.length-1;var yLine=this.Frame.GetXFromIndex(xValue-data.DataOffset,false);yLine=ToFixedPoint2(this.LineWidth,yLine);var left=chartBorder.GetLeftEx();var right=chartBorder.GetRightEx();var ptStart={X:left,Y:yLine};var ptEnd={X:right,Y:yLine};}else{var xValue=Math.round(this.Frame.GetXData(pt.X,false))+data.DataOffset;if(xValue<0)xValue=0;else if(xValue>=data.Data.length)xValue=data.Data.length-1;var xLine=this.Frame.GetXFromIndex(xValue-data.DataOffset,false);xLine=ToFixedPoint2(this.LineWidth,xLine);var top=chartBorder.GetTopEx();var bottom=chartBorder.GetBottomEx();var ptStart={X:xLine,Y:top};var ptEnd={X:xLine,Y:bottom};}this.ClipFrame();this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);if(this.Status==10)this.DrawPoint(drawPoint);//画点
|
|
6087
|
+
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawVerticalLine';this.PointCount=1;this.IsPointIn=this.IsPointIn_XYValue_Line;this.IsHScreen=false;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;if(!this.Frame||!this.Frame.Data)return;var data=this.Frame.Data;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=1)return;this.IsHScreen=this.Frame.IsHScreen;var pt=drawPoint[0];var chartBorder=this.Frame.ChartBorder;if(this.IsHScreen){var xValue=Math.round(this.Frame.GetXData(pt.Y,false))+data.DataOffset;if(xValue<0)xValue=0;else if(xValue>=data.Data.length)xValue=data.Data.length-1;var yLine=this.Frame.GetXFromIndex(xValue-data.DataOffset,false);yLine=ToFixedPoint2(this.LineWidth,yLine);var left=chartBorder.GetLeftEx();var right=chartBorder.GetRightEx();var ptStart={X:left,Y:yLine};var ptEnd={X:right,Y:yLine};}else{var xValue=Math.round(this.Frame.GetXData(pt.X,false))+data.DataOffset;if(xValue<0)xValue=0;else if(xValue>=data.Data.length)xValue=data.Data.length-1;var xLine=this.Frame.GetXFromIndex(xValue-data.DataOffset,false);xLine=ToFixedPoint2(this.LineWidth,xLine);var top=chartBorder.GetTopEx();var bottom=chartBorder.GetBottomEx();var ptStart={X:xLine,Y:top};var ptEnd={X:xLine,Y:bottom};}this.ClipFrame();this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);if(this.Status==10)this.DrawPoint(drawPoint);//画点
|
|
6087
6088
|
this.Canvas.restore();};}//画图工具-波浪尺
|
|
6088
6089
|
function ChartDrawWaveRuler(){this.newMethod=IChartDrawPicture;//派生
|
|
6089
6090
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawWaveRuler';this.PointCount=3;this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.LastPoint;this.LinePoint;this.ScaleRuler=g_JSChartResource.ChartDrawWaveRuler.ScaleRuler;this.RulerWidth=g_JSChartResource.ChartDrawWaveRuler.RulerWidth;;//刻度尺长度
|
|
6090
6091
|
this.RulerLineWidth=g_JSChartResource.ChartDrawWaveRuler.RulerLineWidth;this.MaxScaleRuler=g_JSChartResource.ChartDrawWaveRuler.MaxScaleRuler;//尺子最大的高度比
|
|
6091
|
-
this.Font=g_JSChartResource.ChartDrawWaveRuler.MaxScaleRuler;this.IsHScreen=false;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;this.IsHScreen=this.Frame.IsHScreen;this.CalculateLines(drawPoint);this.ClipFrame();this.SetLineWidth();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}//绘制波浪信息
|
|
6092
|
+
this.Font=g_JSChartResource.ChartDrawWaveRuler.MaxScaleRuler;this.IsHScreen=false;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;this.IsHScreen=this.Frame.IsHScreen;this.CalculateLines(drawPoint);this.ClipFrame();this.SetLineWidth();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}//绘制波浪信息
|
|
6092
6093
|
if(drawPoint.length==3)this.DrawWaveRuler(drawPoint);this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
6093
6094
|
this.Canvas.restore();};this.SetLastPoint=function(obj){this.LastPoint={X:obj.X,Y:obj.Y};};this.CalculateLines=function(points){if(this.PointStatus==2&&this.LastPoint){var pt=new Point();pt.X=this.LastPoint.X;pt.Y=this.LastPoint.Y;points[2]=pt;}if(points.length==2){var linePoint={Start:{X:points[0].X,Y:points[0].Y},End:{X:points[1].X,Y:points[1].Y}};this.LinePoint.push(linePoint);}else if(points.length==3){var linePoint={Start:{X:points[0].X,Y:points[0].Y},End:{X:points[1].X,Y:points[1].Y}};this.LinePoint.push(linePoint);linePoint={Start:{X:points[1].X,Y:points[1].Y},End:{X:points[2].X,Y:points[2].Y}};this.LinePoint.push(linePoint);}};this.DrawWaveRuler=function(points){var ptBottom=points[1];var ptStart=points[0];var ptEnd=points[2];var lineWidth=this.RulerLineWidth*GetDevicePixelRatio();this.Canvas.lineWidth=lineWidth;this.Canvas.textBaseline='middle';this.Canvas.textAlign='left';this.Canvas.fillStyle=this.LineColor;this.Canvas.font=this.Font;var rulerWidth=this.RulerWidth*GetDevicePixelRatio();//刻度线长度
|
|
6094
6095
|
if(this.IsHScreen){var rulerHeight=ptStart.X-ptBottom.X;var ptExtendBottom={X:ptEnd.X-this.MaxScaleRuler*rulerHeight,Y:ptEnd.Y};this.DrawLine(ptEnd,ptExtendBottom);this.LinePoint.push({Start:ptEnd,End:ptExtendBottom});var y=ptEnd.Y-rulerWidth/2,y2=ptEnd.Y+rulerWidth/2;}else{var rulerHeight=ptStart.Y-ptBottom.Y;var ptExtendBottom={X:ToFixedPoint2(lineWidth,ptEnd.X),Y:ptEnd.Y-this.MaxScaleRuler*rulerHeight};this.DrawLine({X:ToFixedPoint2(lineWidth,ptEnd.X),Y:ptEnd.Y},ptExtendBottom);this.LinePoint.push({Start:ptEnd,End:ptExtendBottom});var x=ptEnd.X-rulerWidth/2,x2=ptEnd.X+rulerWidth/2;}var textOffset=4*GetDevicePixelRatio();for(var i in this.ScaleRuler){var item=this.ScaleRuler[i];if(this.IsHScreen){var x=ptEnd.X-item.Value*rulerHeight;var price=this.Frame.GetYData(x,false);this.DrawLine({X:x,Y:y},{X:x,Y:y2});var text=price.toFixed(2)+' '+(item.Text?item.Text:item.Value.toFixed(3));this.Canvas.save();this.Canvas.translate(x,ptEnd.Y);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(text,textOffset,0);this.Canvas.restore();}else{var y=ptEnd.Y-item.Value*rulerHeight;var price=this.Frame.GetYData(y,false);this.DrawLine({X:x,Y:ToFixedPoint2(lineWidth,y)},{X:x2,Y:ToFixedPoint2(lineWidth,y)});var text=price.toFixed(2)+' '+(item.Text?item.Text:item.Value.toFixed(3));this.Canvas.fillText(text,x2+textOffset,y);}}};}//画图工具-波浪尺 2个点的
|
|
@@ -6096,12 +6097,12 @@ function ChartDrawWaveRuler2Point(){this.newMethod=IChartDrawPicture;//派生
|
|
|
6096
6097
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawWaveRuler2Point';this.PointCount=2;this.Font=14*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.PointRate=[510,517,511.4];this.LinePoint;this.CPoint;this.ScaleRuler=g_JSChartResource.ChartDrawWaveRuler2Point.ScaleRuler;this.RulerWidth=g_JSChartResource.ChartDrawWaveRuler2Point.RulerWidth;;//刻度尺长度
|
|
6097
6098
|
this.RulerLineWidth=g_JSChartResource.ChartDrawWaveRuler2Point.RulerLineWidth;this.MaxScaleRuler=g_JSChartResource.ChartDrawWaveRuler2Point.MaxScaleRuler;//尺子最大的高度比
|
|
6098
6099
|
this.Font=g_JSChartResource.ChartDrawWaveRuler2Point.MaxScaleRuler;this.IsHScreen=false;this.Super_SetOption=this.SetOption;//父类函数
|
|
6099
|
-
this.SetOption=function(option){if(this.Super_SetOption)this.Super_SetOption(option);if(option){if(option.PointRate)this.PointRate=option.PointRate;}};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;this.IsHScreen=this.Frame.IsHScreen;this.CalculateLines(drawPoint);this.ClipFrame();this.SetLineWidth();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}var points=[drawPoint[0],drawPoint[1],this.CPoint];this.DrawWaveRuler(points);this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
6100
|
+
this.SetOption=function(option){if(this.Super_SetOption)this.Super_SetOption(option);if(option){if(option.PointRate)this.PointRate=option.PointRate;}};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;this.IsHScreen=this.Frame.IsHScreen;this.CalculateLines(drawPoint);this.ClipFrame();this.SetLineWidth();for(var i in this.LinePoint){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}var points=[drawPoint[0],drawPoint[1],this.CPoint];this.DrawWaveRuler(points);this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
6100
6101
|
this.Canvas.restore();};this.CalculateLines=function(points){var firstLine={Start:{X:points[0].X,Y:points[0].Y},End:{X:points[1].X,Y:points[1].Y}};this.LinePoint.push(firstLine);var a=points[0].Y;var b=points[1].Y;var width=this.PointRate[1]-this.PointRate[0];var offset=this.PointRate[2]-this.PointRate[0];var c=a-(a-b)*offset/width;this.CPoint={X:points[1].X,Y:c};};this.DrawWaveRuler=function(points){var ptBottom=points[1];var ptStart=points[0];var ptEnd=points[2];var lineWidth=this.RulerLineWidth*GetDevicePixelRatio();this.Canvas.lineWidth=lineWidth;this.Canvas.textBaseline='middle';this.Canvas.textAlign='left';this.Canvas.fillStyle=this.LineColor;this.Canvas.font=this.Font;var rulerWidth=this.RulerWidth*GetDevicePixelRatio();//刻度线长度
|
|
6101
6102
|
if(this.IsHScreen){var rulerHeight=ptStart.X-ptBottom.X;var ptExtendBottom={X:ptEnd.X-this.MaxScaleRuler*rulerHeight,Y:ptEnd.Y};this.DrawLine(ptEnd,ptExtendBottom);this.LinePoint.push({Start:ptEnd,End:ptExtendBottom});var y=ptEnd.Y-rulerWidth/2,y2=ptEnd.Y+rulerWidth/2;}else{var rulerHeight=ptStart.Y-ptBottom.Y;var ptExtendBottom={X:ToFixedPoint2(lineWidth,ptEnd.X),Y:ptEnd.Y-this.MaxScaleRuler*rulerHeight};this.DrawLine({X:ToFixedPoint2(lineWidth,ptEnd.X),Y:ptEnd.Y},ptExtendBottom);this.LinePoint.push({Start:ptEnd,End:ptExtendBottom});var x=ptEnd.X,x2=ptEnd.X+rulerWidth;}var textOffset=4*GetDevicePixelRatio();for(var i in this.ScaleRuler){var item=this.ScaleRuler[i];if(this.IsHScreen){var x=ptEnd.X-item.Value*rulerHeight;var price=this.Frame.GetYData(x,false);this.DrawLine({X:x,Y:y},{X:x,Y:y2});var text=price.toFixed(2)+' '+(item.Text?item.Text:item.Value.toFixed(3));this.Canvas.save();this.Canvas.translate(x,ptEnd.Y);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(text,textOffset,0);this.Canvas.restore();}else{var y=ptEnd.Y-item.Value*rulerHeight;var price=this.Frame.GetYData(y,false);this.DrawLine({X:x,Y:ToFixedPoint2(lineWidth,y)},{X:x2,Y:ToFixedPoint2(lineWidth,y)});var text=price.toFixed(2)+' '+(item.Text?item.Text:item.Value.toFixed(3));this.Canvas.fillText(text,x2+textOffset,y);}}};}//画图工具-箱型线 支持横屏
|
|
6102
6103
|
function ChartDrawBox(){this.newMethod=IChartDrawPicture;//派生
|
|
6103
6104
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawBox';this.PointCount=2;this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.IsHScreen=false;this.AvPriceLineDash=[5*GetDevicePixelRatio(),5*GetDevicePixelRatio()];this.KLineBorder;this.PointToValue_Backup=this.PointToValue;this.PointToValue=function(){//拖拽完成 把点移动到线段头尾
|
|
6104
|
-
this.Point[0]={X:this.KLineBorder.Left,Y:this.KLineBorder.Top};this.Point[1]={X:this.KLineBorder.Right,Y:this.KLineBorder.Bottom};this.PointToValue_Backup();};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=2)return;this.IsHScreen=this.Frame.IsHScreen;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];var kPoint=this.PointToKLine([ptStart,ptEnd]);JSConsole.Chart.Log('[ChartDrawBox::Draw] kPoint',kPoint);var kDataInfo=this.Calculate(kPoint);JSConsole.Chart.Log('[ChartDrawBox::Draw] kDataInfo',kDataInfo);var klineBorder=this.GetKLineBorder(drawPoint,kDataInfo);this.KLineBorder=klineBorder;this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.strokeRect(ToFixedRect(klineBorder.Left),ToFixedRect(klineBorder.Top),ToFixedRect(klineBorder.Right-klineBorder.Left),ToFixedRect(klineBorder.Bottom-klineBorder.Top));//均价
|
|
6105
|
+
this.Point[0]={X:this.KLineBorder.Left,Y:this.KLineBorder.Top};this.Point[1]={X:this.KLineBorder.Right,Y:this.KLineBorder.Bottom};this.PointToValue_Backup();};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=2)return;this.IsHScreen=this.Frame.IsHScreen;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];var kPoint=this.PointToKLine([ptStart,ptEnd]);JSConsole.Chart.Log('[ChartDrawBox::Draw] kPoint',kPoint);var kDataInfo=this.Calculate(kPoint);JSConsole.Chart.Log('[ChartDrawBox::Draw] kDataInfo',kDataInfo);var klineBorder=this.GetKLineBorder(drawPoint,kDataInfo);this.KLineBorder=klineBorder;this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.strokeRect(ToFixedRect(klineBorder.Left),ToFixedRect(klineBorder.Top),ToFixedRect(klineBorder.Right-klineBorder.Left),ToFixedRect(klineBorder.Bottom-klineBorder.Top));//均价
|
|
6105
6106
|
var avPriceText;if(kDataInfo.Amount>0&&kDataInfo.Vol>0){var price=kDataInfo.Amount/kDataInfo.Vol;avPriceText='\u5747\u4EF7'+price.toFixed(2);this.Canvas.beginPath();if(this.IsHScreen){var x=this.Frame.GetYFromData(price,false);this.Canvas.moveTo(ToFixedPoint2(this.Canvas.lineWidth,x),klineBorder.Top);this.Canvas.lineTo(ToFixedPoint2(this.Canvas.lineWidth,x),klineBorder.Bottom);}else{var y=this.Frame.GetYFromData(price,false);this.Canvas.moveTo(klineBorder.Left,ToFixedPoint2(this.Canvas.lineWidth,y));this.Canvas.lineTo(klineBorder.Right,ToFixedPoint2(this.Canvas.lineWidth,y));}this.Canvas.setLineDash(this.AvPriceLineDash);this.Canvas.stroke();this.Canvas.setLineDash([]);}this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
6106
6107
|
//绘制信息
|
|
6107
6108
|
this.Canvas.textBaseline='top';this.Canvas.textAlign='left';this.Canvas.font=this.Font;this.Canvas.fillStyle=this.LineColor;var textOffset=2*GetDevicePixelRatio();var text='K\u7EBF\u6570'+kDataInfo.Count;if(this.IsHScreen)this.DrawText(text,klineBorder.Right,klineBorder.Top,textOffset,textOffset);else this.DrawText(text,klineBorder.Left,klineBorder.Top,textOffset,textOffset);if(avPriceText){if(this.IsHScreen)this.DrawText(avPriceText,x,klineBorder.Top,textOffset,textOffset);//均价
|
|
@@ -6110,7 +6111,7 @@ else this.DrawText(avPriceText,klineBorder.Left,y,textOffset,textOffset);//均
|
|
|
6110
6111
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawTwoPointDemo';this.PointCount=2;this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.IsHScreen=false;this.PointInfo=[];//保存点及点对应K线的信息
|
|
6111
6112
|
this.PointToValue_Backup=this.PointToValue;this.PointToValue=function(){this.OnFinish();this.PointToValue_Backup();};//移动或创建完成
|
|
6112
6113
|
this.OnFinish=function(){for(var i in this.PointInfo){var item=this.PointInfo[i];if(!item||!item.Point||!IFrameSplitOperator.IsNumber(item.Point.Y2))continue;this.Point[i].Y=this.PointInfo[i].Point.Y2;//点Y轴坐标调整
|
|
6113
|
-
}};this.Draw=function(){this.LinePoint=[];this.PointInfo=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;this.IsHScreen=this.Frame.IsHScreen;//this.CalculateLines(drawPoint);
|
|
6114
|
+
}};this.Draw=function(){this.LinePoint=[];this.PointInfo=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;this.IsHScreen=this.Frame.IsHScreen;//this.CalculateLines(drawPoint);
|
|
6114
6115
|
this.ClipFrame();this.SetLineWidth();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.CalculatePointInfo(drawPoint);if(this.Status==10)//绘制完成
|
|
6115
6116
|
{this.DrawEx();}else//绘制中只画连线
|
|
6116
6117
|
{for(var i=1;i<drawPoint.length;++i){this.DrawLine(drawPoint[i-1],drawPoint[i]);}}this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
@@ -6140,7 +6141,7 @@ this.DrawLine({X:ptEnd.X,Y:y},{X:ptEnd.X+100,Y:y});//文字
|
|
|
6140
6141
|
this.Canvas.fillText(price.toFixed(2),ptEnd.X-5,y);}this.Canvas.setLineDash([]);};}//画图工具-水平线段
|
|
6141
6142
|
function ChartDrawHLineSegment(){this.newMethod=IChartDrawPicture;//派生
|
|
6142
6143
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawHLineSegment';this.PointCount=2;this.IsPointIn=this.IsPointIn_XYValue_Line;this.ChartBorder;this.PointToValue_Backup=this.PointToValue;this.PointToValue=function(){//拖拽完成 把点移动到线段头尾
|
|
6143
|
-
if(this.Frame.IsHScreen){this.Point[1].X=this.Point[0].X;}else{this.Point[1].Y=this.Point[0].Y;}this.PointToValue_Backup();};this.GetXYCoordinate=function(){if(this.IsFrameMinSize())return null;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:true});return this.PointRange(drawPoint);};this.Draw=function(){if(!this.Frame)return;this.IsHScreen=this.Frame.IsHScreen;this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:true});if(!drawPoint||drawPoint.length!=2)return;this.ClipFrame();this.ChartBorder=this.Frame.ChartBorder;this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;var ptStart=drawPoint[0];var ptEnd=drawPoint[1];if(this.Status==10)//0=开始画 1=完成第1个点 2=完成第2个点 3=完成第3个点 10=完成 20=移动)
|
|
6144
|
+
if(this.Frame.IsHScreen){this.Point[1].X=this.Point[0].X;}else{this.Point[1].Y=this.Point[0].Y;}this.PointToValue_Backup();};this.GetXYCoordinate=function(){if(this.IsFrameMinSize())return null;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:true});return this.PointRange(drawPoint);};this.Draw=function(){if(!this.Frame)return;this.IsHScreen=this.Frame.IsHScreen;this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:true});if(!drawPoint||drawPoint.length!=2)return;this.ClipFrame();this.ChartBorder=this.Frame.ChartBorder;this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;var ptStart=drawPoint[0];var ptEnd=drawPoint[1];if(this.Status==10)//0=开始画 1=完成第1个点 2=完成第2个点 3=完成第3个点 10=完成 20=移动)
|
|
6144
6145
|
{this.DrawLine(ptStart,ptEnd,false);}else{//var kPoint=this.PointToKLine([ptStart,ptEnd]);
|
|
6145
6146
|
this.DrawVerticalLine(ptStart,ptEnd);}this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
|
|
6146
6147
|
this.Canvas.restore();};this.DrawVerticalLine=function(ptStart,ptEnd){var data=this.Frame.Data;if(this.IsHScreen){var left=this.ChartBorder.GetLeft();var right=this.ChartBorder.GetRight();var xValue=Math.round(this.Frame.GetXData(ptStart.Y,false))+data.DataOffset;if(xValue<0)xValue=0;else if(xValue>=data.Data.length)xValue=data.Data.length-1;var yStart=this.Frame.GetXFromIndex(xValue-data.DataOffset,false);xValue=Math.round(this.Frame.GetXData(ptEnd.Y,false))+data.DataOffset;if(xValue<0)xValue=0;else if(xValue>=data.Data.length)xValue=data.Data.length-1;var yEnd=this.Frame.GetXFromIndex(xValue-data.DataOffset,false);this.Canvas.beginPath();this.Canvas.moveTo(left,yStart);this.Canvas.lineTo(right,yStart);this.Canvas.moveTo(left,yEnd);this.Canvas.lineTo(right,yEnd);this.Canvas.stroke();this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,yStart);this.Canvas.lineTo(ptStart.X,yEnd);this.Canvas.stroke();}else{var top=this.ChartBorder.GetTopEx();var bottom=this.ChartBorder.GetBottomEx();var xValue=Math.round(this.Frame.GetXData(ptStart.X,false))+data.DataOffset;if(xValue<0)xValue=0;else if(xValue>=data.Data.length)xValue=data.Data.length-1;var xStart=this.Frame.GetXFromIndex(xValue-data.DataOffset,false);xValue=Math.round(this.Frame.GetXData(ptEnd.X,false))+data.DataOffset;if(xValue<0)xValue=0;else if(xValue>=data.Data.length)xValue=data.Data.length-1;var xEnd=this.Frame.GetXFromIndex(xValue-data.DataOffset,false);this.Canvas.beginPath();this.Canvas.moveTo(xStart,top);this.Canvas.lineTo(xStart,bottom);this.Canvas.moveTo(xEnd,top);this.Canvas.lineTo(xEnd,bottom);this.Canvas.stroke();this.Canvas.beginPath();this.Canvas.moveTo(xStart,ptStart.Y);this.Canvas.lineTo(xEnd,ptStart.Y);this.Canvas.stroke();}};}//画图工具-volume profile fixed range
|
|
@@ -6174,7 +6175,7 @@ this.AryNoteText=[{Text:"输入内容 ......"}];/*
|
|
|
6174
6175
|
this.ArrowSize=g_JSChartResource.ChartDrawNote.ArrowSize;this.OnlyMoveXIndex=true;this.IsSupportMagnet=false;//内部变量
|
|
6175
6176
|
this.PtButtom;this.PtTop;this.TextRect=null;//文字区域
|
|
6176
6177
|
this.PtCenter;this.SetOption_Backup=this.SetOption;this.SetOption=function(option){this.SetOption_Backup(option);if(!option)return;if(option.Text)this.Text=option.Text;if(option.FontOption)this.SetFont(this.FontOption,option.FontOption);if(option.NoteFontOption)this.SetFont(this.NoteFontOption,option.NoteFontOption);if(IFrameSplitOperator.IsNumber(option.NoteWidth))this.NoteWidth=option.NoteWidth;if(option.NoteMargin){var item=option.NoteMargin;if(IFrameSplitOperator.IsNumber(item.Left))this.NoteMargin.Left=item.Left;if(IFrameSplitOperator.IsNumber(item.Top))this.NoteMargin.Top=item.Top;if(IFrameSplitOperator.IsNumber(item.Bottom))this.NoteMargin.Bottom=item.Bottom;if(IFrameSplitOperator.IsNumber(item.Right))this.NoteMargin.Right=item.Right;}if(option.NoteBGColor)this.NoteBGColor=option.NoteBGColor;if(option.NoteTextColor)this.NoteTextColor=option.NoteTextColor;if(option.NoteBorderColor)this.NoteBorderColor=option.NoteBorderColor;if(IFrameSplitOperator.IsNumber(option.LineSpace))this.LineSpace=option.LineSpace;if(IFrameSplitOperator.IsNumber(option.ArrowSize))this.ArrowSize=option.ArrowSize;if(IFrameSplitOperator.IsNonEmptyArray(option.AryNoteText))this.AryNoteText=this.CloneArrayText(option.AryNoteText);};//导出成存储格式
|
|
6177
|
-
this.ExportStorageData=function(){var storageData=this.ExportBaseData();storageData.Value=[];if(this.Value&&this.Value[0]){var item=this.Value[0];storageData.Value.push({XValue:item.XValue,YValue:item.YValue,DateTime:item.DateTime});}storageData.NoteFont=this.NoteFont;storageData.NoteWidth=this.NoteWidth;storageData.NoteBGColor=this.NoteBGColor;storageData.NoteTextColor=this.NoteTextColor;storageData.NoteBorderColor=this.NoteBorderColor;storageData.LineSpace=this.LineSpace;storageData.ArrowSize=this.ArrowSize;storageData.NoteMargin={Left:this.NoteMargin.Left,Top:this.NoteMargin.Right,Bottom:this.NoteMargin.Bottom,Right:this.NoteMargin.Right};storageData.AryNoteText=this.CloneArrayText(this.AryNoteText);return storageData;};this.ImportStorageData=function(storageData){if(storageData.NoteFont)this.NoteFont=storageData.NoteFont;if(IFrameSplitOperator.IsNumber(storageData.NoteWidth))this.NoteWidth=storageData.NoteWidth;if(storageData.NoteMargin){var item=storageData.NoteMargin;if(IFrameSplitOperator.IsNumber(item.Left))this.NoteMargin.Left=item.Left;if(IFrameSplitOperator.IsNumber(item.Top))this.NoteMargin.Top=item.Top;if(IFrameSplitOperator.IsNumber(item.Bottom))this.NoteMargin.Bottom=item.Bottom;if(IFrameSplitOperator.IsNumber(item.Right))this.NoteMargin.Right=item.Right;}if(storageData.NoteBGColor)this.NoteBGColor=storageData.NoteBGColor;if(storageData.NoteTextColor)this.NoteTextColor=storageData.NoteTextColor;this.NoteBorderColor=storageData.NoteBorderColor;if(IFrameSplitOperator.IsNumber(storageData.LineSpace))this.LineSpace=storageData.LineSpace;if(IFrameSplitOperator.IsNumber(storageData.ArrowSize))this.ArrowSize=storageData.ArrowSize;this.AryNoteText=this.CloneArrayText(storageData.AryNoteText);};this.Draw=function(){this.PtButtom=null;this.PtTop=null;this.TextRect=null;this.PtCenter=null;if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=1)return;var font=this.GetTextFont();if(!font)return;this.ClipFrame();var isHScreen=this.Frame.IsHScreen;var pixel=GetDevicePixelRatio();this.Canvas.fillStyle=this.LineColor;this.Canvas.textAlign="center";this.Canvas.textBaseline="middle";this.Canvas.font=font;if(isHScreen){this.Canvas.translate(drawPoint[0].X,drawPoint[0].Y);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(this.Text,0,0);this.PtButtom={X:drawPoint[0].X,Y:drawPoint[0].Y+this.FontOption.Size*pixel/2+2};this.PtTop={X:drawPoint[0].X,Y:drawPoint[0].Y-this.FontOption.Size*pixel/2-2};this.PtCenter=drawPoint[0];var ptSelected={X:drawPoint[0].X-this.FontOption.Size*pixel/2-2,Y:drawPoint[0].Y};}else{this.Canvas.fillText(this.Text,drawPoint[0].X,drawPoint[0].Y);this.PtButtom={X:drawPoint[0].X,Y:drawPoint[0].Y+this.FontOption.Size*pixel/2+2};this.PtTop={X:drawPoint[0].X,Y:drawPoint[0].Y-this.FontOption.Size*pixel/2-2};var ptSelected={X:this.PtButtom.X,Y:this.PtButtom.Y};}var textWidth=this.Canvas.measureText(this.Text).width;this.TextRect={};this.TextRect.Left=drawPoint[0].X-textWidth/2;this.TextRect.Top=drawPoint[0].Y-this.FontOption.Size*pixel/2;this.TextRect.Width=textWidth;this.TextRect.Height=this.FontOption.Size*pixel;if(this.IsShowNoteText())this.DrawText();//this.Canvas.strokeRect(this.TextRect.Left,this.TextRect.Top,this.TextRect.Width,this.TextRect.Height);
|
|
6178
|
+
this.ExportStorageData=function(){var storageData=this.ExportBaseData();storageData.Value=[];if(this.Value&&this.Value[0]){var item=this.Value[0];storageData.Value.push({XValue:item.XValue,YValue:item.YValue,DateTime:item.DateTime});}storageData.NoteFont=this.NoteFont;storageData.NoteWidth=this.NoteWidth;storageData.NoteBGColor=this.NoteBGColor;storageData.NoteTextColor=this.NoteTextColor;storageData.NoteBorderColor=this.NoteBorderColor;storageData.LineSpace=this.LineSpace;storageData.ArrowSize=this.ArrowSize;storageData.NoteMargin={Left:this.NoteMargin.Left,Top:this.NoteMargin.Right,Bottom:this.NoteMargin.Bottom,Right:this.NoteMargin.Right};storageData.AryNoteText=this.CloneArrayText(this.AryNoteText);return storageData;};this.ImportStorageData=function(storageData){if(storageData.NoteFont)this.NoteFont=storageData.NoteFont;if(IFrameSplitOperator.IsNumber(storageData.NoteWidth))this.NoteWidth=storageData.NoteWidth;if(storageData.NoteMargin){var item=storageData.NoteMargin;if(IFrameSplitOperator.IsNumber(item.Left))this.NoteMargin.Left=item.Left;if(IFrameSplitOperator.IsNumber(item.Top))this.NoteMargin.Top=item.Top;if(IFrameSplitOperator.IsNumber(item.Bottom))this.NoteMargin.Bottom=item.Bottom;if(IFrameSplitOperator.IsNumber(item.Right))this.NoteMargin.Right=item.Right;}if(storageData.NoteBGColor)this.NoteBGColor=storageData.NoteBGColor;if(storageData.NoteTextColor)this.NoteTextColor=storageData.NoteTextColor;this.NoteBorderColor=storageData.NoteBorderColor;if(IFrameSplitOperator.IsNumber(storageData.LineSpace))this.LineSpace=storageData.LineSpace;if(IFrameSplitOperator.IsNumber(storageData.ArrowSize))this.ArrowSize=storageData.ArrowSize;this.AryNoteText=this.CloneArrayText(storageData.AryNoteText);};this.Draw=function(){this.PtButtom=null;this.PtTop=null;this.TextRect=null;this.PtCenter=null;if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=1)return;var font=this.GetTextFont();if(!font)return;this.ClipFrame();var isHScreen=this.Frame.IsHScreen;var pixel=GetDevicePixelRatio();this.Canvas.fillStyle=this.LineColor;this.Canvas.textAlign="center";this.Canvas.textBaseline="middle";this.Canvas.font=font;if(isHScreen){this.Canvas.translate(drawPoint[0].X,drawPoint[0].Y);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(this.Text,0,0);this.PtButtom={X:drawPoint[0].X,Y:drawPoint[0].Y+this.FontOption.Size*pixel/2+2};this.PtTop={X:drawPoint[0].X,Y:drawPoint[0].Y-this.FontOption.Size*pixel/2-2};this.PtCenter=drawPoint[0];var ptSelected={X:drawPoint[0].X-this.FontOption.Size*pixel/2-2,Y:drawPoint[0].Y};}else{this.Canvas.fillText(this.Text,drawPoint[0].X,drawPoint[0].Y);this.PtButtom={X:drawPoint[0].X,Y:drawPoint[0].Y+this.FontOption.Size*pixel/2+2};this.PtTop={X:drawPoint[0].X,Y:drawPoint[0].Y-this.FontOption.Size*pixel/2-2};var ptSelected={X:this.PtButtom.X,Y:this.PtButtom.Y};}var textWidth=this.Canvas.measureText(this.Text).width;this.TextRect={};this.TextRect.Left=drawPoint[0].X-textWidth/2;this.TextRect.Top=drawPoint[0].Y-this.FontOption.Size*pixel/2;this.TextRect.Width=textWidth;this.TextRect.Height=this.FontOption.Size*pixel;if(this.IsShowNoteText())this.DrawText();//this.Canvas.strokeRect(this.TextRect.Left,this.TextRect.Top,this.TextRect.Width,this.TextRect.Height);
|
|
6178
6179
|
this.Canvas.restore();this.DrawPoint([ptSelected]);//画点
|
|
6179
6180
|
};this.DrawText=function(){this.Canvas.font=this.GetFontString(this.NoteFontOption);var height=0;var lineHeight=this.Canvas.measureText("擎").width;var border=this.Frame.GetBorder();var pixel=GetDevicePixelRatio();var isHScreen=this.Frame.IsHScreen;var width=this.NoteWidth;var aryText=[];if(IFrameSplitOperator.IsNonEmptyArray(this.AryNoteText)){for(var i=0;i<this.AryNoteText.length;++i){var item=this.AryNoteText[i];if(!item)continue;if(height>0)height+=this.LineSpace;if(item.Text){var value=this.GetMultiLineText(item.Text,width);if(value&&IFrameSplitOperator.IsNonEmptyArray(value.AryText)){for(var j=0;j<value.AryText.length;++j){if(j>0)height+=this.LineSpace;var textItem=value.AryText[j];aryText.push(textItem);height+=lineHeight;}}}else{aryText.push({Text:""});height+=lineHeight;}}}else{height=lineHeight;}var rtBG={Width:width+this.NoteMargin.Left+this.NoteMargin.Right,Height:height+this.NoteMargin.Top+this.NoteMargin.Bottom,ArrowType:0};if(isHScreen){rtBG.Left=this.PtTop.X-rtBG.Width/2-this.PtCenter.X;rtBG.Top=this.PtTop.Y-rtBG.Height-this.ArrowSize-this.PtCenter.Y;rtBG.Right=rtBG.Left+rtBG.Width;rtBG.Bottom=rtBG.Top+rtBG.Height;rtBG.Arrow={X:this.PtTop.X-this.PtCenter.X,Y:this.PtTop.Y-this.PtCenter.Y};//Type 0=向下箭头 1=向上箭头
|
|
6180
6181
|
if(this.PtCenter.X+height+this.FontOption.Size*pixel/2+2+this.ArrowSize>border.RightEx){rtBG.Top=this.PtButtom.Y+this.ArrowSize+this.PointRadius*pixel-this.PtCenter.Y;rtBG.Bottom=rtBG.Top+rtBG.Height;rtBG.Arrow.X=this.PtButtom.X-this.PtCenter.X;rtBG.Arrow.Y=this.PtButtom.Y-this.PtCenter.Y;rtBG.ArrowType=1;}}else{rtBG.Left=this.PtTop.X-rtBG.Width/2;rtBG.Top=this.PtTop.Y-rtBG.Height-this.ArrowSize;rtBG.Right=rtBG.Left+rtBG.Width;rtBG.Bottom=rtBG.Top+rtBG.Height;rtBG.Arrow={X:this.PtTop.X,Y:this.PtTop.Y};//Type 0=向下箭头 1=向上箭头
|
|
@@ -6185,18 +6186,18 @@ this.GetTextFont=function(){if(!this.FontOption||!this.FontOption.Family||this.F
|
|
|
6185
6186
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawAnchoredText';this.PointCount=1;this.AryText=[{Text:"输入内容"}];this.TextColor=g_JSChartResource.ChartDrawAnchoredText.TextColor;this.FontOption={Family:g_JSChartResource.ChartDrawAnchoredText.FontOption.Family,Size:g_JSChartResource.ChartDrawAnchoredText.FontOption.Size,Weight:g_JSChartResource.ChartDrawAnchoredText.FontOption.Weight,Style:g_JSChartResource.ChartDrawAnchoredText.FontOption.Style};this.TextMaxWidth=g_JSChartResource.ChartDrawAnchoredText.TextMaxWidth;//文本最大宽度
|
|
6186
6187
|
this.LineSpace=g_JSChartResource.ChartDrawAnchoredText.LineSpace;this.BGColor=g_JSChartResource.ChartDrawAnchoredText.BGColor;this.BorderColor=g_JSChartResource.ChartDrawAnchoredText.BorderColor;this.TextMargin={Left:g_JSChartResource.ChartDrawAnchoredText.TextMargin.Left,Top:g_JSChartResource.ChartDrawAnchoredText.TextMargin.Top,Bottom:g_JSChartResource.ChartDrawAnchoredText.TextMargin.Bottom,Right:g_JSChartResource.ChartDrawAnchoredText.TextMargin.Right};//内部变量
|
|
6187
6188
|
this.TextRect;this.SetOption=function(option){if(!option)return;if(option.TextColor)this.TextColor=option.TextColor;if(option.Text)this.Text=option.Text;if(option.FontOption)this.SetFont(this.FontOption,option.FontOption);if(IFrameSplitOperator.IsNumber(option.TextMaxWidth))this.TextMaxWidth=option.TextMaxWidth;if(IFrameSplitOperator.IsNonEmptyArray(option.AryText))this.AryText=this.CloneArrayText(option.AryText);};//导出成存储格式
|
|
6188
|
-
this.ExportStorageData=function(){var storageData=this.ExportBaseData();var item=this.Value[0];storageData.Value=[{XValue:item.XValue,YValue:item.YValue}];storageData.FontOption={};this.SetFont(storageData.FontOption,this.FontOption);storageData.BGColor=this.BGColor;storageData.TextColor=this.TextColor;storageData.BorderColor=this.BorderColor;storageData.LineSpace=this.LineSpace;storageData.TextMaxWidth=this.TextMaxWidth;storageData.TextMargin={Left:this.TextMargin.Left,Top:this.TextMargin.Right,Bottom:this.TextMargin.Bottom,Right:this.TextMargin.Right};storageData.AryText=this.CloneArrayText(this.AryText);return storageData;};this.ImportStorageData=function(storageData){if(storageData.TextMargin){var item=storageData.TextMargin;if(IFrameSplitOperator.IsNumber(item.Left))this.TextMargin.Left=item.Left;if(IFrameSplitOperator.IsNumber(item.Top))this.TextMargin.Top=item.Top;if(IFrameSplitOperator.IsNumber(item.Bottom))this.TextMargin.Bottom=item.Bottom;if(IFrameSplitOperator.IsNumber(item.Right))this.TextMargin.Right=item.Right;}if(storageData.TextColor)this.TextColor=storageData.TextColor;this.BGColor=storageData.BGColor;this.BorderColor=storageData.BorderColor;this.TextMaxWidth=storageData.TextMaxWidth;if(IFrameSplitOperator.IsNumber(storageData.LineSpace))this.LineSpace=storageData.LineSpace;this.AryText=this.CloneArrayText(storageData.AryText);};this.Draw=function(){this.TextRect=null;if(this.Status<2)return;if(this.Point.length!=1||!this.Frame)return;if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint||drawPoint.length!=1)return;this.ClipFrame();this.DrawMultiLineText(drawPoint[0]);this.Canvas.restore();};this.ValueToPoint=function(){if(!this.Frame)return false;var item=this.Value[0];var pt=this.XYValueToPoint(item.XValue,item.YValue);this.Point=[pt];};this.PointToValue=function(){if(!this.Frame)return false;var border=this.Frame.GetBorder();var isHScreen=this.Frame.IsHScreen;if(isHScreen){var left=border.LeftEx;var top=border.Top;var width=border.RightEx-left;var height=border.Bottom-top;var pt=this.Point[0];var yValue=(pt.X-left)/width;var xValue=(pt.Y-top)/height;this.Value[0]={XValue:xValue,YValue:yValue};}else{var left=border.Left;var top=border.TopEx;var width=border.Right-left;var height=border.BottomEx-top;var pt=this.Point[0];var xValue=(pt.X-left)/width;var yValue=(pt.Y-top)/height;this.Value[0]={XValue:xValue,YValue:yValue};}};this.XYValueToPoint=function(xValue,yValue){if(!this.Frame)return null;var isHScreen=this.Frame.IsHScreen;var border=this.Frame.GetBorder();if(isHScreen){var left=border.LeftEx;var top=border.Top;var width=border.RightEx-left;var height=border.Bottom-top;var x=yValue*width+left;var y=xValue*height+top;return{X:x,Y:y};}else{var left=border.Left;var top=border.TopEx;var width=border.Right-left;var height=border.BottomEx-top;var x=xValue*width+left;var y=yValue*height+top;return{X:x,Y:y};}};this.CalculateDrawPoint=function(option){if(this.Status<2)return null;if(this.Point.length!=1||!this.Frame)return null;var drawPoint=[];if(this.Status==10){var item=this.Value[0];var pt=this.XYValueToPoint(item.XValue,item.YValue);drawPoint.push(pt);}else{drawPoint=this.Point;}return drawPoint;};this.DrawMultiLineText=function(pt){if(!IFrameSplitOperator.IsNonEmptyArray(this.AryText))return;var height=0;this.Canvas.font=this.GetFontString(this.FontOption);var lineHeight=this.Canvas.measureText("擎").width;var border=this.Frame.GetBorder();var pixel=GetDevicePixelRatio();var isHScreen=this.Frame.IsHScreen;var ptBottom={X:pt.X,Y:pt.Y};if(isHScreen){this.Canvas.translate(ptBottom.X,ptBottom.Y);this.Canvas.rotate(90*Math.PI/180);ptBottom.X=0;ptBottom.Y=0;}var aryText=[];var maxTextWidth=0;for(var i=0;i<this.AryText.length;++i)//计算输出高度和宽度
|
|
6189
|
+
this.ExportStorageData=function(){var storageData=this.ExportBaseData();var item=this.Value[0];storageData.Value=[{XValue:item.XValue,YValue:item.YValue}];storageData.FontOption={};this.SetFont(storageData.FontOption,this.FontOption);storageData.BGColor=this.BGColor;storageData.TextColor=this.TextColor;storageData.BorderColor=this.BorderColor;storageData.LineSpace=this.LineSpace;storageData.TextMaxWidth=this.TextMaxWidth;storageData.TextMargin={Left:this.TextMargin.Left,Top:this.TextMargin.Right,Bottom:this.TextMargin.Bottom,Right:this.TextMargin.Right};storageData.AryText=this.CloneArrayText(this.AryText);return storageData;};this.ImportStorageData=function(storageData){if(storageData.TextMargin){var item=storageData.TextMargin;if(IFrameSplitOperator.IsNumber(item.Left))this.TextMargin.Left=item.Left;if(IFrameSplitOperator.IsNumber(item.Top))this.TextMargin.Top=item.Top;if(IFrameSplitOperator.IsNumber(item.Bottom))this.TextMargin.Bottom=item.Bottom;if(IFrameSplitOperator.IsNumber(item.Right))this.TextMargin.Right=item.Right;}if(storageData.TextColor)this.TextColor=storageData.TextColor;this.BGColor=storageData.BGColor;this.BorderColor=storageData.BorderColor;this.TextMaxWidth=storageData.TextMaxWidth;if(IFrameSplitOperator.IsNumber(storageData.LineSpace))this.LineSpace=storageData.LineSpace;this.AryText=this.CloneArrayText(storageData.AryText);};this.Draw=function(){this.TextRect=null;if(this.Status<2)return;if(this.Point.length!=1||!this.Frame)return;if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint||drawPoint.length!=1)return;this.ClipFrame();this.DrawMultiLineText(drawPoint[0]);this.Canvas.restore();};this.ValueToPoint=function(){if(!this.Frame)return false;var item=this.Value[0];var pt=this.XYValueToPoint(item.XValue,item.YValue);this.Point=[pt];};this.PointToValue=function(){if(!this.Frame)return false;var border=this.Frame.GetBorder();var isHScreen=this.Frame.IsHScreen;if(isHScreen){var left=border.LeftEx;var top=border.Top;var width=border.RightEx-left;var height=border.Bottom-top;var pt=this.Point[0];var yValue=(pt.X-left)/width;var xValue=(pt.Y-top)/height;this.Value[0]={XValue:xValue,YValue:yValue};}else{var left=border.Left;var top=border.TopEx;var width=border.Right-left;var height=border.BottomEx-top;var pt=this.Point[0];var xValue=(pt.X-left)/width;var yValue=(pt.Y-top)/height;this.Value[0]={XValue:xValue,YValue:yValue};}};this.XYValueToPoint=function(xValue,yValue){if(!this.Frame)return null;var isHScreen=this.Frame.IsHScreen;var border=this.Frame.GetBorder();if(isHScreen){var left=border.LeftEx;var top=border.Top;var width=border.RightEx-left;var height=border.Bottom-top;var x=yValue*width+left;var y=xValue*height+top;return{X:x,Y:y};}else{var left=border.Left;var top=border.TopEx;var width=border.Right-left;var height=border.BottomEx-top;var x=xValue*width+left;var y=yValue*height+top;return{X:x,Y:y};}};this.CalculateDrawPoint=function(option){if(this.Status<2)return null;if(this.Point.length!=1||!this.Frame)return null;var drawPoint=[];if(this.Status==10){var item=this.Value[0];var pt=this.XYValueToPoint(item.XValue,item.YValue);drawPoint.push(pt);}else{drawPoint=this.Point;}return drawPoint;};this.DrawMultiLineText=function(pt){if(!IFrameSplitOperator.IsNonEmptyArray(this.AryText))return;var height=0;this.Canvas.font=this.GetFontString(this.FontOption);var lineHeight=this.Canvas.measureText("擎").width;var border=this.Frame.GetBorder();var pixel=GetDevicePixelRatio();var isHScreen=this.Frame.IsHScreen;var ptBottom={X:pt.X,Y:pt.Y};if(isHScreen){this.Canvas.translate(ptBottom.X,ptBottom.Y);this.Canvas.rotate(90*Math.PI/180);ptBottom.X=0;ptBottom.Y=0;}var aryText=[];var maxTextWidth=0;for(var i=0;i<this.AryText.length;++i)//计算输出高度和宽度
|
|
6189
6190
|
{var item=this.AryText[i];if(!item)continue;if(height>0)height+=this.LineSpace;if(this.TextMaxWidth>50&&item.Text)//限制宽度
|
|
6190
6191
|
{var value=this.GetMultiLineText(item.Text,this.TextMaxWidth);if(value&&IFrameSplitOperator.IsNonEmptyArray(value.AryText)){for(var j=0;j<value.AryText.length;++j){if(j>0)height+=this.LineSpace;var textItem=value.AryText[j];aryText.push(textItem);height+=lineHeight;}}}else{if(item.Text){var textWidth=this.Canvas.measureText(item.Text).width+2;if(maxTextWidth<textWidth)maxTextWidth=textWidth;}aryText.push({Text:item.Text});height+=lineHeight;}}if(this.TextMaxWidth>50)maxTextWidth=this.TextMaxWidth;var rtBG={Left:ptBottom.X,Bottom:ptBottom.Y,Height:height+this.TextMargin.Top+this.TextMargin.Bottom,Width:maxTextWidth+this.TextMargin.Left+this.TextMargin.Right};rtBG.Top=rtBG.Bottom-rtBG.Height;rtBG.Right=rtBG.Left+rtBG.Width;this.DrawBG(rtBG);this.Canvas.fillStyle=this.TextColor;this.Canvas.textAlign="left";this.Canvas.textBaseline="top";var xText=rtBG.Left+this.TextMargin.Left;var yText=rtBG.Top+this.TextMargin.Top;for(var i=0;i<aryText.length;++i){var item=aryText[i];if(!item)continue;if(item.Text){this.Canvas.fillText(item.Text,xText,yText);yText+=lineHeight;}else{yText+=lineHeight;}yText+=this.LineSpace;}if(isHScreen){rtBG.Left=pt.X;rtBG.Top=pt.Y;rtBG.Width=height+this.TextMargin.Top+this.TextMargin.Bottom;rtBG.Height=maxTextWidth+this.TextMargin.Left+this.TextMargin.Right;rtBG.Right=rtBG.Left+rtBG.Width;rtBG.Bottom=rtBG.Top+rtBG.Height;}this.TextRect=rtBG;var ptSelected={X:rtBG.Left+rtBG.Width/2,Y:rtBG.Bottom};this.DrawPoint([ptSelected]);//画点
|
|
6191
6192
|
};this.DrawBG=function(rtBG){if(!this.BGColor&&!this.BorderColor)return;var path=new Path2D();path.rect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);if(this.BGColor){this.Canvas.fillStyle=this.BGColor;this.Canvas.fill(path);}if(this.BorderColor){this.Canvas.strokeStyle=this.BorderColor;this.Canvas.stroke(path);}};this.IsPointIn=function(x,y){if(!this.Frame||this.Status!=10)return-1;if(!this.TextRect)return-1;var rect=this.TextRect;if(x>rect.Left&&x<rect.Right&&y>rect.Top&&y<rect.Bottom)return 100;return-1;};this.GetCursorType=function(ptIndex){if(ptIndex==100)return"pointer";return null;};}function ChartDrawPriceLabel(){this.newMethod=IChartDrawPicture;//派生
|
|
6192
6193
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPriceLabel';this.PointCount=1;this.OnlyMoveXIndex=true;this.TextColor=g_JSChartResource.ChartDrawPriceLabel.TextColor;this.FontOption={Family:g_JSChartResource.ChartDrawPriceLabel.FontOption.Family,Size:g_JSChartResource.ChartDrawPriceLabel.FontOption.Size,Weight:g_JSChartResource.ChartDrawPriceLabel.FontOption.Weight,Style:g_JSChartResource.ChartDrawPriceLabel.FontOption.Style};this.BGColor=g_JSChartResource.ChartDrawPriceLabel.BGColor;this.BorderColor=g_JSChartResource.ChartDrawPriceLabel.BorderColor;this.LabelOffset={X:10,Y:20};this.TextMargin={Left:g_JSChartResource.ChartDrawPriceLabel.TextMargin.Left,Top:g_JSChartResource.ChartDrawPriceLabel.TextMargin.Top,Bottom:g_JSChartResource.ChartDrawPriceLabel.TextMargin.Bottom,Right:g_JSChartResource.ChartDrawPriceLabel.TextMargin.Right};//内部变量
|
|
6193
6194
|
this.TextRect;this.SetOption=function(option){if(!option)return;if(option.TextColor)this.TextColor=option.TextColor;if(option.BGColor)this.BGColor=option.BGColor;if(option.BorderColor)this.BorderColor=option.BorderColor;if(option.FontOption)this.SetFont(this.FontOption,option.FontOption);if(option.LabelOffset){var item=option.LabelOffset;if(IFrameSplitOperator.IsNumber(item.X))this.LabelOffset.X=item.X;if(IFrameSplitOperator.IsNumber(item.Y))this.LabelOffset.Y=item.Y;}};//导出成存储格式
|
|
6194
|
-
this.ExportStorageData=function(){var storageData=this.ExportBaseData();var item=this.Value[0];storageData.Value=[{XValue:item.XValue,YValue:item.YValue}];storageData.BGColor=this.BGColor;storageData.TextColor=this.TextColor;storageData.BorderColor=this.BorderColor;storageData.TextMargin={Left:this.TextMargin.Left,Top:this.TextMargin.Right,Bottom:this.TextMargin.Bottom,Right:this.TextMargin.Right};return storageData;};this.ImportStorageData=function(storageData){if(storageData.TextMargin){var item=storageData.TextMargin;if(IFrameSplitOperator.IsNumber(item.Left))this.TextMargin.Left=item.Left;if(IFrameSplitOperator.IsNumber(item.Top))this.TextMargin.Top=item.Top;if(IFrameSplitOperator.IsNumber(item.Bottom))this.TextMargin.Bottom=item.Bottom;if(IFrameSplitOperator.IsNumber(item.Right))this.TextMargin.Right=item.Right;}if(storageData.TextColor)this.TextColor=storageData.TextColor;this.BGColor=storageData.BGColor;this.BorderColor=storageData.BorderColor;};this.Draw=function(){this.TextRect=null;if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=1)return;var pt=drawPoint[0];this.ClipFrame();this.DrawPriceLabel(pt);this.Canvas.restore();this.DrawPoint([pt]);//画点
|
|
6195
|
+
this.ExportStorageData=function(){var storageData=this.ExportBaseData();var item=this.Value[0];storageData.Value=[{XValue:item.XValue,YValue:item.YValue}];storageData.BGColor=this.BGColor;storageData.TextColor=this.TextColor;storageData.BorderColor=this.BorderColor;storageData.TextMargin={Left:this.TextMargin.Left,Top:this.TextMargin.Right,Bottom:this.TextMargin.Bottom,Right:this.TextMargin.Right};return storageData;};this.ImportStorageData=function(storageData){if(storageData.TextMargin){var item=storageData.TextMargin;if(IFrameSplitOperator.IsNumber(item.Left))this.TextMargin.Left=item.Left;if(IFrameSplitOperator.IsNumber(item.Top))this.TextMargin.Top=item.Top;if(IFrameSplitOperator.IsNumber(item.Bottom))this.TextMargin.Bottom=item.Bottom;if(IFrameSplitOperator.IsNumber(item.Right))this.TextMargin.Right=item.Right;}if(storageData.TextColor)this.TextColor=storageData.TextColor;this.BGColor=storageData.BGColor;this.BorderColor=storageData.BorderColor;};this.Draw=function(){this.TextRect=null;if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint||drawPoint.length!=1)return;var pt=drawPoint[0];this.ClipFrame();this.DrawPriceLabel(pt);this.Canvas.restore();this.DrawPoint([pt]);//画点
|
|
6195
6196
|
};this.DrawPriceLabel=function(pt){var font=this.GetFontString(this.FontOption);if(!font)return;var isHScreen=this.Frame.IsHScreen;var pixelRatio=GetDevicePixelRatio();var ptBottom,price;var yOffset=0;if(isHScreen){this.Canvas.translate(pt.X,pt.Y);this.Canvas.rotate(90*Math.PI/180);ptBottom={X:0,Y:0};price=this.Frame.GetYData(pt.X,false);yOffset=1;}else{ptBottom={X:pt.X,Y:pt.Y};price=this.Frame.GetYData(pt.Y,false);}var floatPrecision=2;if(this.Symbol&&this.Frame.Identify==0)floatPrecision=GetfloatPrecision(this.Symbol);var text=price.toFixed(floatPrecision);this.Canvas.font=font;var left=ptBottom.X+this.LabelOffset.X;var bottom=ptBottom.Y-this.LabelOffset.Y;var textHeight=this.Canvas.measureText("擎").width;var textWidth=this.Canvas.measureText(text).width;var rtBG={Left:left,Bottom:bottom,Width:textWidth+this.TextMargin.Left+this.TextMargin.Right,Height:textHeight+this.TextMargin.Top+this.TextMargin.Bottom};rtBG.Top=rtBG.Bottom-rtBG.Height;rtBG.Right=rtBG.Left+rtBG.Width;this.DrawBG(rtBG,ptBottom);var xText=rtBG.Left+rtBG.Width/2;var yText=rtBG.Top+rtBG.Height/2;this.Canvas.textAlign="center";this.Canvas.textBaseline="middle";this.Canvas.fillStyle=this.TextColor;this.Canvas.fillText(text,xText,yText+yOffset);if(isHScreen){this.TextRect={Left:pt.X+this.LabelOffset.Y,Top:pt.Y+this.LabelOffset.X,Width:textHeight+this.TextMargin.Top+this.TextMargin.Bottom,Height:textWidth+this.TextMargin.Left+this.TextMargin.Right};this.TextRect.Right=this.TextRect.Left+this.TextRect.Width;this.TextRect.Bottom=this.TextRect.Top+this.TextRect.Height;}else{this.TextRect=rtBG;}};this.DrawBG=function(rtBG,pt){var pixelRatio=GetDevicePixelRatio();var path=new Path2D();path.moveTo(rtBG.Left,rtBG.Bottom);path.lineTo(rtBG.Left,rtBG.Top);path.lineTo(rtBG.Right,rtBG.Top);path.lineTo(rtBG.Right,rtBG.Bottom);var x=rtBG.Left+15*pixelRatio;path.lineTo(x,rtBG.Bottom);path.lineTo(pt.X,pt.Y);x=rtBG.Left+5*pixelRatio;path.lineTo(x,rtBG.Bottom);path.closePath();if(this.BGColor){this.Canvas.fillStyle=this.BGColor;this.Canvas.fill(path);}if(this.BorderColor){this.Canvas.strokeStyle=this.BorderColor;this.Canvas.stroke(path);}//绘制一个点
|
|
6196
6197
|
if(this.BGColor){this.Canvas.beginPath();this.Canvas.arc(pt.X,pt.Y,2*pixelRatio,0,360,false);this.Canvas.fillStyle=this.BGColor;this.Canvas.fill();}};this.IsPointIn=function(x,y){if(!this.Frame||this.Status!=10)return-1;if(!this.TextRect)return-1;var rect=this.TextRect;if(x>rect.Left&&x<rect.Right&&y>rect.Top&&y<rect.Bottom)return 100;return-1;};this.GetCursorType=function(ptIndex){if(ptIndex==100)return"pointer";return null;};}function ChartDrawPriceNote(){this.newMethod=IChartDrawPicture;//派生
|
|
6197
6198
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPriceNote';this.PointCount=2;this.GetXYCoordinate=this.GetXYCoordinate_default;this.IsPointIn=this.IsPointIn_XYValue_Line;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.FontOption={Family:g_JSChartResource.ChartDrawPriceNote.FontOption.Family,Size:g_JSChartResource.ChartDrawPriceNote.FontOption.Size,Weight:g_JSChartResource.ChartDrawPriceNote.FontOption.Weight,Style:g_JSChartResource.ChartDrawPriceNote.FontOption.Style};this.TextMargin={Left:g_JSChartResource.ChartDrawPriceNote.TextMargin.Left,Top:g_JSChartResource.ChartDrawPriceNote.TextMargin.Top,Bottom:g_JSChartResource.ChartDrawPriceNote.TextMargin.Bottom,Right:g_JSChartResource.ChartDrawPriceNote.TextMargin.Right};this.BGColor=g_JSChartResource.ChartDrawPriceNote.BGColor;this.BorderColor=g_JSChartResource.ChartDrawPriceNote.BorderColor;this.TextColor=g_JSChartResource.ChartDrawPriceNote.TextColor;this.BorderRoundRadius=3;//内部变量
|
|
6198
6199
|
this.TextRect;this.SetOption=function(option){if(!option)return;if(option.TextColor)this.TextColor=option.TextColor;if(option.BGColor)this.BGColor=option.BGColor;if(option.BorderColor)this.BorderColor=option.BorderColor;if(option.FontOption)this.SetFont(this.FontOption,option.FontOption);};//导出成存储格式
|
|
6199
|
-
this.ExportStorageData=function(){var storageData=this.ExportBaseData();storageData.Value=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];storageData.Value.push({XValue:item.XValue,YValue:item.YValue});}storageData.BGColor=this.BGColor;storageData.TextColor=this.TextColor;storageData.BorderColor=this.BorderColor;storageData.TextMargin={Left:this.TextMargin.Left,Top:this.TextMargin.Right,Bottom:this.TextMargin.Bottom,Right:this.TextMargin.Right};return storageData;};this.ImportStorageData=function(storageData){if(storageData.TextMargin){var item=storageData.TextMargin;if(IFrameSplitOperator.IsNumber(item.Left))this.TextMargin.Left=item.Left;if(IFrameSplitOperator.IsNumber(item.Top))this.TextMargin.Top=item.Top;if(IFrameSplitOperator.IsNumber(item.Bottom))this.TextMargin.Bottom=item.Bottom;if(IFrameSplitOperator.IsNumber(item.Right))this.TextMargin.Right=item.Right;}if(storageData.TextColor)this.TextColor=storageData.TextColor;this.BGColor=storageData.BGColor;this.BorderColor=storageData.BorderColor;};this.Draw=function(){this.LinePoint=[];this.TextRect=null;if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.LineWidth=1;this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.RestoreLineWidth();this.DrawPriceLabel(ptStart,ptEnd);var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
|
|
6200
|
+
this.ExportStorageData=function(){var storageData=this.ExportBaseData();storageData.Value=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];storageData.Value.push({XValue:item.XValue,YValue:item.YValue});}storageData.BGColor=this.BGColor;storageData.TextColor=this.TextColor;storageData.BorderColor=this.BorderColor;storageData.TextMargin={Left:this.TextMargin.Left,Top:this.TextMargin.Right,Bottom:this.TextMargin.Bottom,Right:this.TextMargin.Right};return storageData;};this.ImportStorageData=function(storageData){if(storageData.TextMargin){var item=storageData.TextMargin;if(IFrameSplitOperator.IsNumber(item.Left))this.TextMargin.Left=item.Left;if(IFrameSplitOperator.IsNumber(item.Top))this.TextMargin.Top=item.Top;if(IFrameSplitOperator.IsNumber(item.Bottom))this.TextMargin.Bottom=item.Bottom;if(IFrameSplitOperator.IsNumber(item.Right))this.TextMargin.Right=item.Right;}if(storageData.TextColor)this.TextColor=storageData.TextColor;this.BGColor=storageData.BGColor;this.BorderColor=storageData.BorderColor;};this.Draw=function(){this.LinePoint=[];this.TextRect=null;if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.LineWidth=1;this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.RestoreLineWidth();this.DrawPriceLabel(ptStart,ptEnd);var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
|
|
6200
6201
|
this.Canvas.restore();};this.DrawPriceLabel=function(ptStart,ptEnd){var font=this.GetFontString(this.FontOption);if(!font)return;var floatPrecision=2;if(this.Symbol&&this.Frame.Identify==0)floatPrecision=GetfloatPrecision(this.Symbol);var pixelRatio=GetDevicePixelRatio();var ptPrice={X:ptEnd.X,Y:ptEnd.Y};var price=this.Frame.GetYData(ptStart.Y,false);var text=price.toFixed(floatPrecision);var textHeight=this.Canvas.measureText("擎").width;var textWidth=this.Canvas.measureText(text).width;var angle=this.CalculateAngle(ptStart.X,ptStart.Y,ptEnd.X,ptEnd.Y);if(angle>=0&&angle<=45||angle>=315&&angle<=360){var left=ptPrice.X;var bottom=ptPrice.Y;var rtBG={Left:left,Bottom:bottom,Width:textWidth+this.TextMargin.Left+this.TextMargin.Right,Height:textHeight+this.TextMargin.Top+this.TextMargin.Bottom};rtBG.Bottom=bottom+rtBG.Height/2;rtBG.Top=rtBG.Bottom-rtBG.Height;rtBG.Right=rtBG.Left+rtBG.Width;}else if(angle>45&&angle<=135){var left=ptPrice.X;var bottom=ptPrice.Y;var rtBG={Left:left,Bottom:bottom,Width:textWidth+this.TextMargin.Left+this.TextMargin.Right,Height:textHeight+this.TextMargin.Top+this.TextMargin.Bottom};rtBG.Left=left-rtBG.Width/2;rtBG.Top=rtBG.Bottom-rtBG.Height;rtBG.Right=rtBG.Left+rtBG.Width;}else if(angle>=135&&angle<=225){var left=ptPrice.X;var bottom=ptPrice.Y;var rtBG={Width:textWidth+this.TextMargin.Left+this.TextMargin.Right,Height:textHeight+this.TextMargin.Top+this.TextMargin.Bottom};rtBG.Bottom=bottom+rtBG.Height/2;rtBG.Top=rtBG.Bottom-rtBG.Height;rtBG.Right=left;rtBG.Left=rtBG.Right-rtBG.Width;}else if(angle>=225&&angle<=315){var left=ptPrice.X;var top=ptPrice.Y;var rtBG={Width:textWidth+this.TextMargin.Left+this.TextMargin.Right,Height:textHeight+this.TextMargin.Top+this.TextMargin.Bottom};rtBG.Top=top;rtBG.Bottom=rtBG.Top+rtBG.Height;rtBG.Left=left-rtBG.Width/2;rtBG.Right=rtBG.Left-rtBG.Width;}else return;this.DrawBG(rtBG);this.Canvas.textAlign="left";this.Canvas.textBaseline="middle";this.Canvas.fillStyle=this.TextColor;var xText=rtBG.Left+this.TextMargin.Left;var yText=rtBG.Top+rtBG.Height/2;var yOffset=0;this.Canvas.fillText(text,xText,yText+yOffset);//绘制一个点
|
|
6201
6202
|
if(this.BGColor){this.Canvas.beginPath();this.Canvas.arc(ptStart.X,ptStart.Y,2*pixelRatio,0,360,false);this.Canvas.fillStyle=this.BGColor;this.Canvas.fill();}this.TextRect=rtBG;};this.DrawBG=function(rtBG){if(!rtBG)return;var pixelRatio=GetDevicePixelRatio();var roundRadius=this.BorderRoundRadius*pixelRatio;var path=new Path2D();path.roundRect(ToFixedPoint(rtBG.Left),ToFixedPoint(rtBG.Top),ToFixedRect(rtBG.Width),ToFixedRect(rtBG.Height),[roundRadius]);if(this.BGColor){this.Canvas.fillStyle=this.BGColor;this.Canvas.fill(path);}if(this.BorderColor){this.Canvas.strokeStyle=this.BorderColor;this.Canvas.stroke(path);}};this.IsPointIn=function(x,y){if(!this.Frame||this.Status!=10)return-1;if(!this.TextRect)return-1;var rect=this.TextRect;if(x>rect.Left&&x<rect.Right&&y>rect.Top&&y<rect.Bottom)return 1;return this.IsPointIn_XYValue_Line(x,y);};}/////////////////////////////////////////////////////////////////////////////
|
|
6202
6203
|
// 0=中心点 1=起始点(决定半径长度) 2=结束点(任意位置)
|
|
@@ -6214,7 +6215,7 @@ this.ValueToPoint_V2=function(aryValue){if(!IFrameSplitOperator.IsNonEmptyArray(
|
|
|
6214
6215
|
{if(this.PointStatus==2&&this.LastPoint)//第3个点
|
|
6215
6216
|
{drawPoint=this.CalculateAllPoint(this.Point[0],this.Point[1],this.LastPoint);}else{for(var i=0;i<this.Point.length&&i<2;++i){var item=this.Point[i];drawPoint.push({X:item.X,Y:item.Y});}this.MagnetXY(drawPoint);}}else if(this.Status==10){var data=this.Frame.Data;if(!data)return null;var showCount=this.Frame.XPointCount;var invaildX=0;//超出范围的x点个数
|
|
6216
6217
|
var isHScreen=this.Frame.IsHScreen;for(var i=0;i<this.Value.length;++i){var item=this.Value[i];var dataIndex=item.XValue-data.DataOffset;if(dataIndex<0||dataIndex>=showCount)++invaildX;var pt=new Point();if(isHScreen)//横屏X,Y对调
|
|
6217
|
-
{pt.Y=this.Frame.GetXFromIndex(item.XValue-data.DataOffset,false);pt.X=this.Frame.GetYFromData(item.YValue,false);}else{pt.X=this.Frame.GetXFromIndex(item.XValue-data.DataOffset,false);pt.Y=this.Frame.GetYFromData(item.YValue,false);}drawPoint.push(pt);}}else if(this.Status==20){drawPoint=this.CalculateAllPoint(this.Point[0],this.Point[1],this.Point[2]);}return drawPoint;};this.Draw=function(){this.LinePoint=[];this.TextAngle=null;this.Radius=null;if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:false});if(!IFrameSplitOperator.IsNonEmptyArray(drawPoint))return;var points=drawPoint.slice(0);this.CalculateLines(points);this.ClipFrame();this.DrawArea(points);this.DrawLines(this.LinePoint);this.DrawPoint(points);//画点
|
|
6218
|
+
{pt.Y=this.Frame.GetXFromIndex(item.XValue-data.DataOffset,false);pt.X=this.Frame.GetYFromData(item.YValue,false);}else{pt.X=this.Frame.GetXFromIndex(item.XValue-data.DataOffset,false);pt.Y=this.Frame.GetYFromData(item.YValue,false);}drawPoint.push(pt);}}else if(this.Status==20){drawPoint=this.CalculateAllPoint(this.Point[0],this.Point[1],this.Point[2]);}return drawPoint;};this.Draw=function(){this.LinePoint=[];this.TextAngle=null;this.Radius=null;if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:false});if(!IFrameSplitOperator.IsNonEmptyArray(drawPoint))return;var points=drawPoint.slice(0);this.CalculateLines(points);this.ClipFrame();this.DrawArea(points);this.DrawLines(this.LinePoint);this.DrawPoint(points);//画点
|
|
6218
6219
|
this.DrawTitle(points);this.Canvas.restore();};this.DrawArea=function(aryPoint){if(aryPoint.length!=3)return;if(!this.AreaConfig||!IFrameSplitOperator.IsNonEmptyArray(this.AreaConfig.AryData))return;var ptCenter=aryPoint[0];var radius=this.CalculateHypotenuse(ptCenter,aryPoint[1]);//求半径
|
|
6219
6220
|
var startAngle=this.CalculateAngle(ptCenter.X,ptCenter.Y,aryPoint[1].X,aryPoint[1].Y);var endAngle=this.CalculateAngle(ptCenter.X,ptCenter.Y,aryPoint[2].X,aryPoint[2].Y);var sectorAngle=startAngle-endAngle;if(sectorAngle<0)sectorAngle+=360;if(sectorAngle>180){var temp=startAngle;startAngle=endAngle;endAngle=temp;}var centerAngle=startAngle-(startAngle-endAngle)/2;if(startAngle-endAngle<0)centerAngle-=180;var preValue=null;for(var i=0;i<this.AreaConfig.AryData.length;++i){var item=this.AreaConfig.AryData[i];if(!item.Enable)continue;var value=radius*item.Value;//半径
|
|
6220
6221
|
var lineColor=item.Color;var areaColor=IChartDrawPicture.ColorToRGBA(lineColor,this.AreaConfig.Opacity);var path=new Path2D();if(IFrameSplitOperator.IsNumber(preValue)){path.arc(ptCenter.X,ptCenter.Y,preValue,Math.PI/180*(360-startAngle),Math.PI/180*(360-endAngle));path.arc(ptCenter.X,ptCenter.Y,value,Math.PI/180*(360-endAngle),Math.PI/180*(360-startAngle),true);}else{path.moveTo(ptCenter.X,ptCenter.Y);path.arc(ptCenter.X,ptCenter.Y,value,Math.PI/180*(360-startAngle),Math.PI/180*(360-endAngle));}this.Canvas.fillStyle=areaColor;this.Canvas.fill(path);preValue=value;}for(var i=0;i<this.AreaConfig.AryData.length;++i){var item=this.AreaConfig.AryData[i];if(!item.Enable)continue;var value=radius*item.Value;//半径
|
|
@@ -6230,7 +6231,7 @@ var a=aryPoint[0].X-ptLast.X;var b=aryPoint[0].Y-ptLast.Y;var c=Math.sqrt(a*a+b*
|
|
|
6230
6231
|
function ChartFibRetracement(){this.newMethod=IChartDrawPicture;//派生
|
|
6231
6232
|
this.newMethod();delete this.newMethod;this.ClassName='ChartFibRetracement';this.PointCount=2;this.Font=12*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.PointToValue_Default=this.PointToValue;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.LineDash=[6,3];this.LineWidth=1;this.EnableBGColor=true;this.ExtendLine={Left:false,Right:false};//延长线
|
|
6232
6233
|
this.AreaConfig={AryData:[{Value:0,Color:"rgb(128,128,128)",Enable:true},{Value:0.236,Color:"rgb(242,52,69)",Enable:true},{Value:0.382,Color:"rgb(255,152,0)",Enable:true},{Value:0.5,Color:"rgb(76,175,80)",Enable:true},{Value:0.618,Color:"rgb(8,153,129)",Enable:true},{Value:0.786,Color:"rgb(0,188,212)",Enable:true},{Value:1,Color:"rgb(120,123,134)",Enable:true},{Value:1.618,Color:"rgb(41,98,255)",Enable:true},{Value:2.618,Color:"rgb(242,54,69)",Enable:false}],Opacity:0.3};this.SetOption=function(option){if(!option)return;if(option.Font)this.Font=option.Font;if(option.LineWidth)this.LineWidth=option.LineWidth;if(option.LineDash)this.LineDash=option.LineDash;if(IFrameSplitOperator.IsBool(option.EnableBGColor))this.EnableBGColor=option.EnableBGColor;if(option.ExtendLine){var item=option.ExtendLine;if(IFrameSplitOperator.IsBool(item.Left))this.ExtendLine.Left=item.Left;if(IFrameSplitOperator.IsBool(item.Right))this.ExtendLine.Left=item.Right;}if(option.AreaConfig)this.AreaConfig=option.AreaConfig;};//导出成存储格式
|
|
6233
|
-
this.ExportStorageData=function(){var storageData=this.ExportBaseData();storageData.Value=[];for(var i=0;i<this.Value.length&&i<this.PointCount;++i){var item=this.Value[i];storageData.Value.push({XValue:item.XValue,YValue:item.YValue});}storageData.Font=this.Font;storageData.EnableBGColor=this.EnableBGColor;storageData.LineDash=this.LineDash;storageData.ExtendLine={Left:this.ExtendLine.Left,Right:this.ExtendLine.Right};storageData.AreaConfig=CloneData(this.AreaConfig);return storageData;};this.ImportStorageData=function(storageData){if(storageData.Font)this.Font=storageData.Font;if(storageData.LineDash)this.LineDash=storageData.LineDash;if(IFrameSplitOperator.IsBool(storageData.EnableBGColor))this.EnableBGColor=storageData.EnableBGColor;if(storageData.ExtendLine)this.ExtendLine=storageData.ExtendLine;if(storageData.AreaConfig)this.AreaConfig=storageData.AreaConfig;};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var bCheckXY=true;if(this.ExtendLine.Left||this.ExtendLine.Right)bCheckXY=false;var drawPoint=this.CalculateDrawPoint({IsCheckX:bCheckXY,IsCheckY:bCheckXY});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.setLineDash(this.LineDash);this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.Canvas.setLineDash([]);this.DrawBlock(ptStart,ptEnd);this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
|
|
6234
|
+
this.ExportStorageData=function(){var storageData=this.ExportBaseData();storageData.Value=[];for(var i=0;i<this.Value.length&&i<this.PointCount;++i){var item=this.Value[i];storageData.Value.push({XValue:item.XValue,YValue:item.YValue});}storageData.Font=this.Font;storageData.EnableBGColor=this.EnableBGColor;storageData.LineDash=this.LineDash;storageData.ExtendLine={Left:this.ExtendLine.Left,Right:this.ExtendLine.Right};storageData.AreaConfig=CloneData(this.AreaConfig);return storageData;};this.ImportStorageData=function(storageData){if(storageData.Font)this.Font=storageData.Font;if(storageData.LineDash)this.LineDash=storageData.LineDash;if(IFrameSplitOperator.IsBool(storageData.EnableBGColor))this.EnableBGColor=storageData.EnableBGColor;if(storageData.ExtendLine)this.ExtendLine=storageData.ExtendLine;if(storageData.AreaConfig)this.AreaConfig=storageData.AreaConfig;};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var bCheckXY=true;if(this.ExtendLine.Left||this.ExtendLine.Right)bCheckXY=false;var drawPoint=this.CalculateDrawPoint({IsCheckX:bCheckXY,IsCheckY:bCheckXY});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.setLineDash(this.LineDash);this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.Canvas.setLineDash([]);this.DrawBlock(ptStart,ptEnd);this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
|
|
6234
6235
|
this.Canvas.restore();};this.GetArrayAreaConfig=function(){var aryArea=[];for(var i=0;i<this.AreaConfig.AryData.length;++i){var item=this.AreaConfig.AryData[i];if(item.Enable)aryArea.push(item);}aryArea.sort(function(left,right){return right.Value-left.Value;});return aryArea;};this.DrawBlock=function(ptStart,ptEnd){var yTop=Math.min(ptStart.Y,ptEnd.Y);var yBottom=Math.max(ptStart.Y,ptEnd.Y);var xLeft=Math.min(ptStart.X,ptEnd.X);var xRight=Math.max(ptStart.X,ptEnd.X);var height=yBottom-yTop;//var baseValue=Math.min(this.Value[0].YValue, this.Value[1].YValue);
|
|
6235
6236
|
//var diffValue=Math.abs(this.Value[0].YValue-this.Value[1].YValue); //差值
|
|
6236
6237
|
if(this.ExtendLine.Right)xRight=this.Frame.ChartBorder.GetRight();if(this.ExtendLine.Left)xLeft=this.Frame.ChartBorder.GetLeft();var aryArea=this.GetArrayAreaConfig();var yPre=null;//上一个点
|
|
@@ -6238,7 +6239,7 @@ var clrArea=null;this.Canvas.font=this.Font;if(this.ExtendLine.Left)this.Canvas.
|
|
|
6238
6239
|
yValue=this.Frame.GetYData(y,false);y=ToFixedPoint(y);if(this.EnableBGColor&&IFrameSplitOperator.IsNumber(yPre)){var rtBG={Left:xLeft,Right:xRight,Top:yPre,Bottom:y};rtBG.Width=rtBG.Right-rtBG.Left;rtBG.Height=rtBG.Bottom-rtBG.Top;this.Canvas.fillStyle=clrArea;this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);}this.Canvas.strokeStyle=item.Color;this.Canvas.beginPath();this.Canvas.moveTo(xLeft,y);this.Canvas.lineTo(xRight,y);this.Canvas.stroke();var line={Start:{X:xLeft,Y:y},End:{X:xRight,Y:y}};this.LinePoint.push(line);//文字
|
|
6239
6240
|
var text=item.Value+' ('+yValue.toFixed(2)+')';this.Canvas.fillStyle=item.Color;if(this.ExtendLine.Left)this.Canvas.fillText(text,xLeft+2,y-2);else this.Canvas.fillText(text,xLeft-2,y-2);yPre=y;clrArea=IChartDrawPicture.ColorToRGBA(item.Color,this.AreaConfig.Opacity);}};}function ChartFibSpeedResistanceFan(){this.newMethod=IChartDrawPicture;//派生
|
|
6240
6241
|
this.newMethod();delete this.newMethod;this.ClassName='ChartFibSpeedResistanceFan';this.PointCount=2;this.Font=12*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.PointToValue_Default=this.PointToValue;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.LineWidth=1;this.EnableBGColor=true;this.AreaConfig={AryYData:[{Value:0,Color:"rgb(128,128,128)",Enable:true},{Value:0.25,Color:"rgb(242,52,69)",Enable:true},{Value:0.382,Color:"rgb(255,152,0)",Enable:true},{Value:0.5,Color:"rgb(76,175,80)",Enable:true},{Value:0.618,Color:"rgb(8,153,129)",Enable:true},{Value:0.75,Color:"rgb(0,188,212)",Enable:true},{Value:1,Color:"rgb(120,123,134)",Enable:true}],AryXData:[{Value:0,Color:"rgb(128,128,128)",Enable:true},{Value:0.25,Color:"rgb(242,52,69)",Enable:true},{Value:0.382,Color:"rgb(255,152,0)",Enable:true},{Value:0.5,Color:"rgb(76,175,80)",Enable:true},{Value:0.618,Color:"rgb(8,153,129)",Enable:true},{Value:0.75,Color:"rgb(0,188,212)",Enable:true},{Value:1,Color:"rgb(120,123,134)",Enable:true}],Opacity:0.3};this.SetOption=function(option){if(!option)return;if(option.Font)this.Font=option.Font;if(option.LineWidth)this.LineWidth=option.LineWidth;if(IFrameSplitOperator.IsBool(option.EnableBGColor))this.EnableBGColor=option.EnableBGColor;if(option.AreaConfig)this.AreaConfig=option.AreaConfig;};//导出成存储格式
|
|
6241
|
-
this.ExportStorageData=function(){var storageData=this.ExportBaseData();storageData.Value=[];for(var i=0;i<this.Value.length&&i<this.PointCount;++i){var item=this.Value[i];storageData.Value.push({XValue:item.XValue,YValue:item.YValue});}storageData.Font=this.Font;storageData.EnableBGColor=this.EnableBGColor;storageData.AreaConfig=CloneData(this.AreaConfig);return storageData;};this.ImportStorageData=function(storageData){if(storageData.Font)this.Font=storageData.Font;if(IFrameSplitOperator.IsBool(storageData.EnableBGColor))this.EnableBGColor=storageData.EnableBGColor;if(storageData.AreaConfig)this.AreaConfig=storageData.AreaConfig;};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var bCheckXY=false;var drawPoint=this.CalculateDrawPoint({IsCheckX:bCheckXY,IsCheckY:bCheckXY});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.DrawBlock(ptEnd,ptStart);this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
6242
|
+
this.ExportStorageData=function(){var storageData=this.ExportBaseData();storageData.Value=[];for(var i=0;i<this.Value.length&&i<this.PointCount;++i){var item=this.Value[i];storageData.Value.push({XValue:item.XValue,YValue:item.YValue});}storageData.Font=this.Font;storageData.EnableBGColor=this.EnableBGColor;storageData.AreaConfig=CloneData(this.AreaConfig);return storageData;};this.ImportStorageData=function(storageData){if(storageData.Font)this.Font=storageData.Font;if(IFrameSplitOperator.IsBool(storageData.EnableBGColor))this.EnableBGColor=storageData.EnableBGColor;if(storageData.AreaConfig)this.AreaConfig=storageData.AreaConfig;};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var bCheckXY=false;var drawPoint=this.CalculateDrawPoint({IsCheckX:bCheckXY,IsCheckY:bCheckXY});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.DrawBlock(ptEnd,ptStart);this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
6242
6243
|
this.Canvas.restore();};//获取在第几象限
|
|
6243
6244
|
this.GetQuadrant=function(ptStart,ptEnd){if(ptStart.X<ptEnd.X&&ptStart.Y>ptEnd.Y)return 1;else if(ptStart.X>ptEnd.X&&ptStart.Y>ptEnd.Y)return 2;else if(ptStart.X<ptEnd.X&&ptStart.Y<ptEnd.Y)return 4;else return 3;};this.DrawBlock=function(ptStart,ptEnd){var center=ptEnd;var xDiff=ptEnd.X-ptStart.X;var yDiff=ptEnd.Y-ptStart.Y;var quadrant=this.GetQuadrant(center,ptStart);//象限
|
|
6244
6245
|
var aryYData=this.GetArrayAreaConfig(this.AreaConfig.AryYData);var ptPre=null;//上一个点
|
|
@@ -6247,11 +6248,11 @@ var text=''+item.Value;this.Canvas.fillStyle=item.Color;this.Canvas.fillText(tex
|
|
|
6247
6248
|
{this.Canvas.beginPath();this.Canvas.moveTo(center.X,center.Y);this.Canvas.lineTo(ptPre.X,ptPre.Y);if(quadrant==1){if(ptPre.X<ptRightTop.X&&pt.X>=ptRightTop.X){this.Canvas.lineTo(ptRightTop.X,ptRightTop.Y);}}else if(quadrant==2){if(ptPre.X>ptLeftTop.X&&pt.X<=ptLeftTop.X){this.Canvas.lineTo(ptLeftTop.X,ptLeftTop.Y);}}else if(quadrant==3){if(ptPre.X>ptLeftBottom.X&&pt.X<=ptLeftBottom.X){this.Canvas.lineTo(ptLeftBottom.X,ptLeftBottom.Y);}}else if(quadrant==4){if(ptPre.X<ptRightBottom.X&&pt.X>=ptRightBottom.X){this.Canvas.lineTo(ptRightBottom.X,ptRightBottom.Y);}}this.Canvas.lineTo(pt.X,pt.Y);this.Canvas.closePath();this.Canvas.fillStyle=clrArea;this.Canvas.fill();}this.Canvas.strokeStyle=item.Color;this.Canvas.beginPath();this.Canvas.moveTo(center.X,center.Y);this.Canvas.lineTo(pt.X,pt.Y);this.Canvas.stroke();this.LinePoint.push({Start:center,End:pt});if(item.Value!=1){this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(x,center.Y);this.Canvas.lineTo(x,ptStart.Y);this.Canvas.stroke();}ptPre=pt;clrArea=IChartDrawPicture.ColorToRGBA(item.Color,this.AreaConfig.Opacity);//文字
|
|
6248
6249
|
var text=''+item.Value;this.Canvas.fillStyle=item.Color;this.Canvas.fillText(text,x,center.Y+textOffset);}};this.GetArrayAreaConfig=function(aryData){var aryArea=[];for(var i=0;i<aryData.length;++i){var item=aryData[i];if(item.Enable)aryArea.push(item);}aryArea.sort(function(left,right){return right.Value-left.Value;});return aryArea;};}function ChartPriceRange(){this.newMethod=IChartDrawPicture;//派生
|
|
6249
6250
|
this.newMethod();delete this.newMethod;this.ClassName='ChartPriceRange';this.PointCount=2;this.Font=12*GetDevicePixelRatio()+"px 微软雅黑";this.TextColor=this.LineColor;this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.PointToValue_Default=this.PointToValue;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.LineWidth=1;this.EnableBGColor=true;this.BGColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.15);this.ExtendLine={Left:false,Right:false};//延长线
|
|
6250
|
-
this.Label={TextColor:"rgb(0,0,0)",BGColor:"rgb(211,211,211)",EnableBGColor:true,LeftMargin:5,RightMargin:5};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var bCheckXY=true;if(this.ExtendLine.Left||this.ExtendLine.Right)bCheckXY=false;var drawPoint=this.CalculateDrawPoint({IsCheckX:bCheckXY,IsCheckY:bCheckXY});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.DrawRange(ptStart,ptEnd);this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
6251
|
+
this.Label={TextColor:"rgb(0,0,0)",BGColor:"rgb(211,211,211)",EnableBGColor:true,LeftMargin:5,RightMargin:5};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var bCheckXY=true;if(this.ExtendLine.Left||this.ExtendLine.Right)bCheckXY=false;var drawPoint=this.CalculateDrawPoint({IsCheckX:bCheckXY,IsCheckY:bCheckXY});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.DrawRange(ptStart,ptEnd);this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
6251
6252
|
this.Canvas.restore();};this.DrawRange=function(ptStart,ptEnd){var yTop=Math.min(ptStart.Y,ptEnd.Y);var yBottom=Math.max(ptStart.Y,ptEnd.Y);var xLeft=Math.min(ptStart.X,ptEnd.X);var xRight=Math.max(ptStart.X,ptEnd.X);var height=yBottom-yTop;var xCenter=ptStart.X+(ptEnd.X-ptStart.X)/2;if(this.ExtendLine.Right)xRight=this.Frame.ChartBorder.GetRight();if(this.ExtendLine.Left)xLeft=this.Frame.ChartBorder.GetLeft();if(this.EnableBGColor){var rtBG={Left:xLeft,Top:yTop,Right:xRight,Bottom:yBottom};rtBG.Width=rtBG.Right-rtBG.Left;rtBG.Height=rtBG.Bottom-rtBG.Top;this.Canvas.fillStyle=this.BGColor;this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);}this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(xLeft,ToFixedPoint(yTop));this.Canvas.lineTo(xRight,ToFixedPoint(yTop));this.Canvas.moveTo(xLeft,ToFixedPoint(yBottom));this.Canvas.lineTo(xRight,ToFixedPoint(yBottom));this.Canvas.moveTo(ToFixedPoint(xCenter),ToFixedPoint(yTop));this.Canvas.lineTo(ToFixedPoint(xCenter),ToFixedPoint(yBottom));this.Canvas.stroke();this.LinePoint.push({Start:{X:xLeft,Y:yTop},End:{X:xRight,Y:yTop}});this.LinePoint.push({Start:{X:xLeft,Y:yBottom},End:{X:xRight,Y:yBottom}});this.LinePoint.push({Start:{X:xCenter,Y:yTop},End:{X:xCenter,Y:yBottom}});this.DrawArrow({X:ToFixedPoint(xCenter),Y:ptStart.Y},{X:ToFixedPoint(xCenter),Y:ptEnd.Y});//文字输出
|
|
6252
6253
|
var startValue=this.Frame.GetYData(ptStart.Y,false);var endValue=this.Frame.GetYData(ptEnd.Y,false);var diffValue=endValue-startValue;var rate=diffValue/startValue*100;var text=diffValue.toFixed(2)+' ('+rate.toFixed(2)+'%)';this.Canvas.font=this.Font;var textHeight=this.GetFontHeight();var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);var rtTextBG={Left:xCenter-textWidth/2,Width:textWidth,Height:textHeight+2};if(diffValue>0)rtTextBG.Top=ptEnd.Y-rtTextBG.Height-4;else rtTextBG.Top=ptEnd.Y+4;rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;if(this.Label.EnableBGColor){var path=new Path2D();path.roundRect(ToFixedPoint(rtTextBG.Left),ToFixedPoint(rtTextBG.Top),ToFixedRect(rtTextBG.Width),ToFixedRect(rtTextBG.Height),[3]);this.Canvas.fillStyle=this.Label.BGColor;this.Canvas.fill(path);}this.Canvas.fillStyle=this.Label.TextColor;this.Canvas.textAlign="left";this.Canvas.textBaseline="bottom";this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);};}function ChartDateRange(){this.newMethod=IChartDrawPicture;//派生
|
|
6253
6254
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDateRange';this.PointCount=2;this.Font=12*GetDevicePixelRatio()+"px 微软雅黑";this.TextColor=this.LineColor;this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.PointToValue_Default=this.PointToValue;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.LineWidth=1;this.EnableBGColor=true;this.BGColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.15);this.ExtendLine={Top:false,Bottom:false};//延长线
|
|
6254
|
-
this.Label={TextColor:"rgb(0,0,0)",BGColor:"rgb(211,211,211)",EnableBGColor:true,LeftMargin:5,RightMargin:5};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var bCheckXY=true;var drawPoint=this.CalculateDrawPoint({IsCheckX:bCheckXY,IsCheckY:bCheckXY});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.DrawRange(ptStart,ptEnd);this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
6255
|
+
this.Label={TextColor:"rgb(0,0,0)",BGColor:"rgb(211,211,211)",EnableBGColor:true,LeftMargin:5,RightMargin:5};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var bCheckXY=true;var drawPoint=this.CalculateDrawPoint({IsCheckX:bCheckXY,IsCheckY:bCheckXY});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.DrawRange(ptStart,ptEnd);this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
|
|
6255
6256
|
this.Canvas.restore();};this.DrawRange=function(ptStart,ptEnd){var yTop=Math.min(ptStart.Y,ptEnd.Y);var yBottom=Math.max(ptStart.Y,ptEnd.Y);var xLeft=Math.min(ptStart.X,ptEnd.X);var xRight=Math.max(ptStart.X,ptEnd.X);var height=yBottom-yTop;var width=xRight-xLeft;var yCenter=ptStart.Y+(ptEnd.Y-ptStart.Y)/2;var xCenter=ptStart.X+(ptEnd.X-ptStart.X)/2;if(this.ExtendLine.Top)yTop=this.Frame.ChartBorder.GetTopEx();if(this.ExtendLine.Bottom)yBottom=this.Frame.ChartBorder.GetBottomEx();if(this.EnableBGColor){var rtBG={Left:xLeft,Top:yTop,Right:xRight,Bottom:yBottom};rtBG.Width=rtBG.Right-rtBG.Left;rtBG.Height=rtBG.Bottom-rtBG.Top;this.Canvas.fillStyle=this.BGColor;this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);}this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ToFixedPoint(xLeft),yTop);this.Canvas.lineTo(ToFixedPoint(xLeft),yBottom);this.Canvas.moveTo(ToFixedPoint(xRight),yTop);this.Canvas.lineTo(ToFixedPoint(xRight),yBottom);this.Canvas.moveTo(ToFixedPoint(xLeft),ToFixedPoint(yCenter));this.Canvas.lineTo(ToFixedPoint(xRight),ToFixedPoint(yCenter));this.Canvas.stroke();this.LinePoint.push({Start:{X:xLeft,Y:yTop},End:{X:xLeft,Y:yBottom}});this.LinePoint.push({Start:{X:xRight,Y:yTop},End:{X:xRight,Y:yBottom}});this.LinePoint.push({Start:{X:xLeft,Y:yCenter},End:{X:xRight,Y:yCenter}});this.DrawArrow({X:ptStart.X,Y:ToFixedPoint(yCenter)},{X:ptEnd.X,Y:ToFixedPoint(yCenter)});//文字输出
|
|
6256
6257
|
var startIndex=this.Frame.GetXData(ptStart.X,false);var endIndex=this.Frame.GetXData(ptEnd.X,false);var barCount=endIndex-startIndex+1;var text=barCount+' bars';this.Canvas.font=this.Font;var textHeight=this.GetFontHeight();var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);var rtTextBG={Left:xCenter-textWidth/2,Top:ptEnd.Y+4,Width:textWidth,Height:textHeight+2};rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;if(this.Label.EnableBGColor){var path=new Path2D();path.roundRect(ToFixedPoint(rtTextBG.Left),ToFixedPoint(rtTextBG.Top),ToFixedRect(rtTextBG.Width),ToFixedRect(rtTextBG.Height),[3]);this.Canvas.fillStyle=this.Label.BGColor;this.Canvas.fill(path);}this.Canvas.fillStyle=this.Label.TextColor;this.Canvas.textAlign="left";this.Canvas.textBaseline="bottom";this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);};}function ChartDrawStorage(){this.DrawData=new _map2.default();//画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
|
|
6257
6258
|
this.StorageKey;this.GetEventCallback;//事件回调
|
|
@@ -12639,7 +12640,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
|
|
|
12639
12640
|
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);};}/********************************************************************************
|
|
12640
12641
|
* 版本信息输出
|
|
12641
12642
|
*
|
|
12642
|
-
*/var HQCHART_VERSION="1.1.
|
|
12643
|
+
*/var HQCHART_VERSION="1.1.13015";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();//把给外界调用的方法暴露出来
|
|
12643
12644
|
exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
|
|
12644
12645
|
// BaseIndex:BaseIndex,
|
|
12645
12646
|
// ChartLine:ChartLine,
|