Hi,
I have 10 fast line series. In each of the series, if there is a null value then i am drawing one custom circle to show the start and end of the null values.
Now, from legend control, when i am unchecking the series - means making the series as invisible, the series goes off but the circles remains there.
How to solve this problem?
I am drawing those circles on beforedrawSeries event using the Graphics3D object.
Please help.
See the image below -
[img]
[/img]
How to redraw circles drawn using custom drawing?
-
- Site Admin
- Posts: 14730
- Joined: Mon Jun 09, 2003 4:00 am
- Location: Banyoles, Catalonia
- Contact:
Re: How to redraw circles drawn using custom drawing?
Hi Nitin,
Before doing the drawing in the BeforeDrawSeries event I'd check if that specific series is visible (FastLine.Visible or FastLine.Active) and only do the drawing if series is visible otherwise don't do that.
Before doing the drawing in the BeforeDrawSeries event I'd check if that specific series is visible (FastLine.Visible or FastLine.Active) and only do the drawing if series is visible otherwise don't do that.
Best Regards,
Narcís Calvet / Development & Support Steema Software Avinguda Montilivi 33, 17003 Girona, Catalonia Tel: 34 972 218 797 http://www.steema.com |
Instructions - How to post in this forum |
Re: How to redraw circles drawn using custom drawing?
Sorry, i could not understand.
I am drawing all the series by default. Then from legend control (not teechart legend) it raise an event when the check box is changed. Based on that i am making the series visible or invisible. But the circles are custom drawn. With the series goes invisble, the circles are not going off.
Please have a look into the code below -
Hope i am clear.
I am drawing all the series by default. Then from legend control (not teechart legend) it raise an event when the check box is changed. Based on that i am making the series visible or invisible. But the circles are custom drawn. With the series goes invisble, the circles are not going off.
Please have a look into the code below -
Code: Select all
//Event to make the series visible or invisible
void _TagInfo_OnVisibleStateChanged(object sender, bool visible)
{
TagInfo _TagInfo = sender as TagInfo;
TeeChart.Series.WithTitle(_TagInfo.TagName).Visible = visible;
TeeChart.Refresh(); //this call is also very costly. But to call the
//BeforeDrawSeries event i need to call this function. Is it right?
}
private void TeeChart_BeforeDrawSeries(object sender, Graphics3D g)
{
//Draw circles between the Null Value ranges in each of the series
if (this.TeeChart.Series.Count > 0)
{
foreach (Series _Series in TeeChart.Series)
{
if (_Series.Visible)
DrawCircle(g);
}
}
}
private void DrawCircle(Graphics3D GraphObj)
{
//Get the TagInfo of the series
foreach (Series _Series in TeeChart.Series)
{
TagInfo _TagInfo = _TrendService.TrendManager.TagInfos[_Series.Title];
//Iterate through the Null indexes instead of the whole data to get the points
//for drawing the circle
for (int i = 0; i < _TagInfo.NullIndexes.Count; i++)
{
int _PtXPos = -1;
int _PtYPos = -1;
Color PtColor; //Point Color
double xPtVal = -1;
double yPtVal = -1;
int _CurrentmiSeriesIndex = _TagInfo.NullIndexes[i];
if (_CurrentmiSeriesIndex > 0)
{
if (!_Series.IsNull(_TagInfo.NullIndexes[i] - 1))
{
xPtVal = _Series[_CurrentmiSeriesIndex - 1].X;
yPtVal = _Series[_CurrentmiSeriesIndex - 1].Y;
_PtXPos = _Series.CalcXPosValue(xPtVal);
_PtYPos = _Series.CalcYPosValue(yPtVal);
}
PtColor = _Series.Color;
//Paint the circle
PaintCircle(GraphObj, _PtXPos, _PtYPos, PtColor);
}
else if (_CurrentmiSeriesIndex < 0) continue;
if (_CurrentmiSeriesIndex + 1 == _Series.Count)
continue;
if (!_Series.IsNull(_CurrentmiSeriesIndex + 1))
{
xPtVal = _Series[_CurrentmiSeriesIndex + 1].X;
yPtVal = _Series[_CurrentmiSeriesIndex + 1].Y;
_PtXPos = _Series.CalcXPosValue(xPtVal);
_PtYPos = _Series.CalcYPosValue(yPtVal);
PtColor = _Series.Color;
GraphObj.Pen.Style = System.Drawing.Drawing2D.DashStyle.Solid;
GraphObj.Pen.Transparency = 0;
PaintCircle(GraphObj, _PtXPos, _PtYPos, PtColor);
}
}
}
}
private void PaintCircle(Graphics3D GraphObj, int xPos, int yPos, Color PtColor)
{
GraphObj.Brush.Color = PtColor;
GraphObj.Brush.Transparency = 100;
TeeChart.Canvas.Pen.Color = PtColor;
TeeChart.Canvas.Pen.Width = 1;
//Subtrating by radius of the circle
GraphObj.Ellipse(new Rectangle(xPos - 3, yPos - 3, 6, 6));
}
-
- Site Admin
- Posts: 14730
- Joined: Mon Jun 09, 2003 4:00 am
- Location: Banyoles, Catalonia
- Contact:
Re: How to redraw circles drawn using custom drawing?
Hi Nitin,
Code below works fine for me here without the need of refreshing the chart. Using the AfterDraw event instead of BeforeDrawSeries also works fine. Does this code works fine for you? If the problem persists please attach a simple example project we can run "as-is" to reproduce the problem here.
Thanks in advance.
Code below works fine for me here without the need of refreshing the chart. Using the AfterDraw event instead of BeforeDrawSeries also works fine. Does this code works fine for you? If the problem persists please attach a simple example project we can run "as-is" to reproduce the problem here.
Code: Select all
public Form1()
{
InitializeComponent();
InitializeChart();
}
private void InitializeChart()
{
tChart1.Aspect.View3D = false;
tChart1.Legend.CheckBoxes = true;
for (int i = 0; i < 5; i++)
{
Steema.TeeChart.Styles.Line line1 = new Steema.TeeChart.Styles.Line(tChart1.Chart);
line1.FillSampleValues();
}
tChart1.BeforeDrawSeries += new Steema.TeeChart.PaintChartEventHandler(tChart1_BeforeDrawSeries);
}
void tChart1_BeforeDrawSeries(object sender, Steema.TeeChart.Drawing.Graphics3D g)
{
DrawCircles();
}
private void DrawCircles()
{
foreach (Steema.TeeChart.Styles.Series s in tChart1.Series)
{
if (s.Visible)
{
for (int i = 0; i < s.Count; i++)
{
int x = s.CalcXPos(i);
int y = s.CalcYPos(i);
tChart1.Graphics3D.Ellipse(x-3, y-3, x+3, y+3);
}
}
}
}
Best Regards,
Narcís Calvet / Development & Support Steema Software Avinguda Montilivi 33, 17003 Girona, Catalonia Tel: 34 972 218 797 http://www.steema.com |
Instructions - How to post in this forum |
Re: How to redraw circles drawn using custom drawing?
This worked for me as well.
Thanks.
Thanks.