Page 1 of 1
TeeChart Line style will not show close samples
Posted: Thu Apr 23, 2009 8:16 pm
by 9787981
Hello.
If you create a simple windows forms application using a TeeChart (runtime version v2.0.50727). and add the following to be called when the Form loads (but after the Teechart has been initialized):
private void Initialize()
{
tChart1.Aspect.View3D = false;
Steema.TeeChart.Styles.Line line1 = new Steema.TeeChart.Styles.Line(tChart1.Chart);
tChart1.Series.Add(line1);
tChart1.Axes.Bottom.SetMinMax(-50, 80);
//tChart1.Axes.Bottom.Automatic = true;
tChart1.Axes.Left.SetMinMax(-50, 100);
//tChart1.Axes.Left.Automatic = true;
line1.Add(0, .098785, System.Drawing.Color.Red);
line1.Add(0, .098786, System.Drawing.Color.Red);
//line1.Add(0, .098786);
//line1.Add(0, .098787);
//line1.CheckDataSource();
}
Then there is no indication that 2 (or any) data samples exist.
What can be done about this? Are there axis properties that need to be set in order to have samples that are this close to each other, drawn?
If autoscale is enabled for the Left axis the samples are drawn, but the customer does not want to use autoscale, but wants to set the max and min values explicitly...
thanks,
Ben.
Posted: Fri Apr 24, 2009 9:02 am
by 10050769
Hello BenW,
I could reproduce your issues with version 2 of TeeChartFor .NET, but when I use version 3 of TeeChartFor .NET and using next line of code:
Point there are visible and works fine. I recomend that use last version of TeeChartFor .NET version 3.
Thanks,
Posted: Fri Apr 24, 2009 4:07 pm
by 9787981
Hi Sandra.
Please understand, we have this version installed and deployed in many customer installations. Hopefully you understand when a product is in production, your proposed solution of simply upgrading to version 3.0 is not accomplished readily. There is a huge effort associated with 3rd Party upgrades ranging from extensive Q/A (regression testing, deployment reconfiguration) to product roll-out. This is a very real issue for our customers against this version, today, and so I'm wondering if there is any other kind of a workaround that can be applied here against this version of the TeeChart. Can you please consult with your colleagues (perhaps Narcis), to determine if there is an alternative V2.0 Steema Teechart way of solving this problem.
Your help and cooperation in this regard is greatly appreciated!
Ben.
Posted: Mon Apr 27, 2009 8:22 am
by 10050769
Hello BenW,
One solution there are draw the pointers in the canvas, as example next code, that use After Draw event:
Initialize:
Code: Select all
private void Initialize()
{
tChart1.Aspect.View3D = false;
Steema.TeeChart.Styles.Line line1 = new Steema.TeeChart.Styles.Line(tChart1.Chart);
tChart1.Series.Add(line1);
tChart1.Axes.Bottom.SetMinMax(-50, 80);
tChart1.Axes.Left.SetMinMax(-50, 100);
line1.Add(0, .098785, System.Drawing.Color.Red);
line1.Add(0, .098786, System.Drawing.Color.Red);
tChart1.AfterDraw += new Steema.TeeChart.PaintChartEventHandler(tChart1_AfterDraw);
}
After Draw Event:
Code: Select all
void tChart1_AfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g)
{
Steema.TeeChart.Styles.Line s = (Steema.TeeChart.Styles.Line)tChart1[0];
for (int i = 0; i < s.Count; i++)
{
s.DrawPointer(s.CalcXPos(i), s.CalcXPos(i), s.Color, i);
}
}
I hope will help.
Thanks,
Posted: Mon Apr 27, 2009 8:57 pm
by 9787981
Hi Sandra.
Thanks for the workaround!
I think I've adapted the core solution so that it works for us even when panning and zooming, but I only want to employ the 'AfterDraw' override when we hit the TeeChart limitation. The code I've currently constructed and which employs some checks based on what I've discovered, and understand about the problem is as follows:
foreach (Steema.TeeChart.Styles.Line s in this.tChart1.Series)
{
Steema.TeeChart.Axis xAxis = s.GetHorizAxis;
Steema.TeeChart.Axis yAxis = s.GetVertAxis;
if (xAxis != null &&
s.Count > 1 &&
(((xAxis.MaxXValue - xAxis.MinXValue) < 1.0) && (xAxis.Automatic == false) && (yAxis.MaxYValue == yAxis.MinYValue )) ||
(((yAxis.MaxYValue - yAxis.MinYValue) < 1.0) && (yAxis.Automatic == false) && (xAxis.MaxXValue == xAxis.MinXValue)))
{
for (int i = 0; i < s.Count; i++)
{
int xPos = s.CalcXPos(i);
int yPos = s.CalcYPos(i);
if ((yPos > yAxis.IStartPos) &&
(yPos < yAxis.IEndPos) &&
(xPos < xAxis.IEndPos) &&
(xPos > xAxis.IStartPos))
{
// Draw the pointer only if it is going to appear within the chart bounds.
s.DrawPointer(s.CalcXPos(i), s.CalcYPos(i), s.Color, i);
}
}
}
}
Can you let me know if the checks I've put in are sufficient in order to identify when the poblem will occur, or are there some other checks I need to add. Note currently I only call DrawPointer if the following conditions are set:
1. There is greater than 1 sample in the series
2. The xAxis (or yAxis) maximum value is less than the xAxis (or yAxis) minimum value by 1.0.
3. Autoscale is not set for the limiting x (or y) axis.
4. The maxValue is not equal to the minValue for the opposing axis.
Thanks,
Ben.
Posted: Tue Apr 28, 2009 8:39 am
by 10050769
Hello Ben,
We have checked your code and we seems correct it's a good idea.
1. There is greater than 1 sample in the series
2. The xAxis (or yAxis) maximum value is less than the xAxis (or yAxis) minimum value by 1.0.
3. Autoscale is not set for the limiting x (or y) axis.
4. The maxValue is not equal to the minValue for the opposing axis.
We can't think of any other condition to evaluate for now.
Thanks,