Page 1 of 1
com.steema.teechart.tools.ColorLine drawn outside the chart.
Posted: Fri Jan 08, 2010 6:13 pm
by 7668082
When I set the position of the color line on a chart in the range outside the axis it is drawn in the white area of the axis. The color line is not automatically clipped.
I saw a two similar threads with the VLC/CLX and .NET forums:
http://www.teechart.net/support/viewtop ... f=3&t=5558
http://www.teechart.net/support/viewtop ... f=4&t=5866
I followed your suggestions in thread but still have one issue with the offset. When I try to get the maximum and minimum of an axis to restrict the colorline inside the chart area the offset is not considered.
Example range of the data on X axis is 1 to 10 and I add an min and max offset of 10 pixels the axis shows the offset but when I query for maximum and minimum it returns the range 1 to 10.
Users want to see the color lines drawn in the chart area (current axis range) even on the offset.
Please suggest a way to restrict the color line inside the chart area or get the actual range of the axis (including offset set in pixels).
Regards,
Ram
Re: com.steema.teechart.tools.ColorLine drawn outside the chart.
Posted: Mon Jan 11, 2010 11:49 am
by yeray
Hi Ram,
Yes, you should consider also the offsets when checking if the tool is in the axis range or not. Something as follows:
Code: Select all
int LineAbsolutePos = colorline1.getAxis().calcPosValue(colorline1.getValue());
int AbsoluteMax = colorline1.getAxis().calcPosValue(colorline1.getAxis().getMaximum()) + colorline1.getAxis().getMaximumOffset();
int AbsoluteMin = colorline1.getAxis().calcPosValue(colorline1.getAxis().getMinimum()) - colorline1.getAxis().getMinimumOffset();
if ((LineAbsolutePos > AbsoluteMax) || (LineAbsolutePos < AbsoluteMin))
{
colorline1.setActive(false);
}
Re: com.steema.teechart.tools.ColorLine drawn outside the chart.
Posted: Tue Jan 12, 2010 5:58 pm
by 7668082
Thanks for the response. I tried our the code fragment in your reply.
- This code works only when added in a paint listener. When I query for the max and min in the class which creates the chart the results are both "0".
- X axis and Y axis give different Max and Min by using the calcPosValue. Example the Maximum value for Y axis is less than minimum value.
- Adding the offset doesn't cover the complete area on the chart.
- Margins are different when a different series is used. For ex: box vs point vs line series.
Is there a direct way to find out the if the ColorLine drawn will be inside or outside the chart area or a boolean to restrict the lines inside the chart area?
Do you consider adding this in a future version just to avoid the manual calculations in the listener?
Regards,
Ram
Re: com.steema.teechart.tools.ColorLine drawn outside the chart.
Posted: Thu Jan 14, 2010 4:58 pm
by yeray
Hi Ram,
I'll add to the wish list the possibility to add a function that would return a boolean that would be true when the ColorLineTool is in the ChartRect and false otherwise. A "bool InChartRect()" function, for example.
Also note that there is also a NoLimitDrag property. You probably already know about it but it may help other users with a related problem.
And here is the example I'm using to test this. Feel free to modify what you want to obtain a simple example demo that reproduces the remaining problems if this isn't what you are looking for.
Code: Select all
Steema.TeeChart.Tools.ColorLine colorline1;
private void InitializeChart()
{
tChart1.Aspect.View3D = false;
Steema.TeeChart.Styles.Line line1 = new Steema.TeeChart.Styles.Line(tChart1.Chart);
tChart1[0].FillSampleValues(10);
colorline1 = new Steema.TeeChart.Tools.ColorLine(tChart1.Chart);
colorline1.Axis = tChart1.Axes.Bottom;
colorline1.Value = 5;
colorline1.NoLimitDrag = true;
colorline1.Pen.Color = Color.Green;
tChart1.Axes.Bottom.SetMinMax(-2, 11);
tChart1.Axes.Bottom.MaximumOffset = 70;
tChart1.Axes.Bottom.MinimumOffset = 70;
hScrollBar1.Minimum = -4;
hScrollBar1.Maximum = 23;
hScrollBar1.Value = 5;
}
public bool InChartRect(Steema.TeeChart.Tools.ColorLine AColorLine)
{
int LineAbsolutePos = AColorLine.Axis.CalcPosValue(AColorLine.Value);
int AbsoluteMax = AColorLine.Axis.CalcPosValue(AColorLine.Axis.Maximum) + AColorLine.Axis.MaximumOffset;
int AbsoluteMin = AColorLine.Axis.CalcPosValue(AColorLine.Axis.Minimum) - AColorLine.Axis.MinimumOffset;
return !((LineAbsolutePos > AbsoluteMax) || (LineAbsolutePos < AbsoluteMin));
}
private void hScrollBar1_ValueChanged(object sender, EventArgs e)
{
colorline1.Value = hScrollBar1.Value;
if (cbUneFunction.Checked) colorline1.Active = InChartRect(colorline1);
else colorline1.Active = true;
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (cbUneFunction.Checked) colorline1.Active = InChartRect(colorline1);
else colorline1.Active = true;
}