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;
        }