C# Code - multiple Chart Series types
@using Steema.TeeChart;
@using Steema.TeeChart.Styles;
@using System.IO;
@using System.Drawing;
@using ColorCode;
@using TeeChartOnBlazor.Data; //the project data
@code {
public string chartName;
public string title;
public Task<string> GetJSChart(int chartType, int width, int height)
{
Steema.TeeChart.TChart mChart = new TChart();
bool animate = false;
switch (chartType) {
case 0: Line line = new Line(mChart.Chart);
animate=true;
break;
case 1: Points points = new Points(mChart.Chart);
animate=true;
break;
case 2: Area area1 = new Area(mChart.Chart);
Area area2 = new Area(mChart.Chart);
//countSeries = 2;
animate = true;
break;
case 3: break;
case 5: Bubble bubble = new Bubble(mChart.Chart); animate = true; break;
case 6: Candle candle = new Candle(mChart.Chart); break;
case 7: Gantt gantt = new Gantt(mChart.Chart);
break;
case 31: Pie pie = new Pie(mChart.Chart); break;
case 32: Donut donut = new Donut(mChart.Chart); break;
case 33:
case 34: CircularGauge cGauge = new CircularGauge(mChart.Chart); break;
}
var series = mChart.Series[0];
mChart.Header.Text = ""; // series.Description + " series";
mChart.Axes.Left.Title.Text = "value";
foreach (Series s in mChart.Series)
{
if (series.GetType() == typeof(Bubble))
{
((Bubble)(s)).Pointer.Gradient.Visible = true;
((Bubble)(s)).Pointer.Pen.Visible = false;
s.FillSampleValues(50);
}
else if ((series.GetType() == typeof(Gantt)))
s.FillSampleValues(9);
else
s.FillSampleValues();
}
if (mChart.Series.Count > 1)
{
if (mChart[0].MaxYValue() > mChart[1].MaxYValue())
mChart.Axes.Left.SetMinMax(0, mChart[0].MaxYValue()+20);
else
mChart.Axes.Left.SetMinMax(0, mChart[1].MaxYValue()+20);
}
series.XValues.DateTime = true;
//mChart.Axes.Bottom.Labels.Angle = 90;
//mChart.Axes.Bottom.Increment = Steema.TeeChart.Utils.GetDateTimeStep(DateTimeSteps.OneDay);
//mChart.Axes.Left.Title.Text = "µVal";
if ((mChart.Series.Count == 1) && (series.GetType() != typeof(Gantt)))
mChart.Axes.Left.SetMinMax(series.YValues.Minimum - 10, series.YValues.Maximum + 10);
chartName = "dynoTeeChart";
mChart.Export.Image.JScript.ChartName = chartName;
MemoryStream ms = new MemoryStream();
mChart.Export.Image.JScript.Width = width;
mChart.Export.Image.JScript.Height = height;
mChart.Export.Image.JScript.DoFullPage = false; //inline, no page <html> header tags
if ((series.GetType() == typeof(Pie)) ||
(series.GetType() == typeof(Donut)))
{
series.Marks.Visible = true;
series.Marks.Arrow.Visible = false;
series.Marks.Arrow.Color = Color.White;
series.Marks.Transparent = true;
series.Marks.Pen.Transparency = 100;
series.Marks.Pen.Color = Color.White;
series.Marks.Font.Color = Color.White;
mChart.Export.Image.JScript.CustomCode = getCustomCodeOp2(mChart);
}
else
mChart.Export.Image.JScript.CustomCode = getCustomCode1(animate, mChart);
if ((series.GetType() == typeof(Gantt)))
{
((Gantt)series).Brush.Gradient.Visible = false;
((Gantt)series).NextTasks[0] = 6;
mChart.Axes.Left.Title.Text = "task";
}
if ((series.GetType() == typeof(CircularGauge)))
{
mChart.Axes.Left.Title.Text = "µHz";
var customCode = new List<string>();
if (chartType == 34)
{
customCode.Add("modGauge(" + chartName + ", " + chartName + ".series.items[0]" + ");");
customCode.Add("setTimeout(modVal, 500);");
}
else
{
((CircularGauge)(mChart[0])).Value = 0;
customCode.Add(chartName + ".series.items[0]" + ".format.shadow.visible=false;");
customCode.Add(chartName + ".series.items[0]" + ".back.visible=false;");
customCode.Add("growVal(" + chartName + ");");
customCode.Add("setTimeout(growVal, 500);");
}
mChart.Export.Image.JScript.CustomCode = customCode.ToArray();
}
title = mChart.Series[0].Description;
mChart.Export.Image.JScript.Save(ms);
ms.Position = 0;
StreamReader reader = new StreamReader(ms);
//setup our chart name, here 'dynoChartName'.
string result = "<script> var " + chartName + "; " + reader.ReadToEnd() + "</script>";
return Task.FromResult(result);
}
//general type characteristics
string[] getCustomCode1(bool animate, TChart aChart)
{
var customCode = new List<string>();
if (animate)
{
if (aChart[0].GetType() == typeof(Area))
{
customCode.Add(" //animation");
customCode.Add(" animation = new Tee.SeriesAnimation();");
customCode.Add(" animation.duration = 1700;");
customCode.Add(" animation.kind = \"all\";");
customCode.Add(" animation.mode = \"linear\";");
}
else
{
customCode.Add(" //animation");
customCode.Add(" animation = new Tee.SeriesAnimation();");
customCode.Add(" animation.duration = 900;");
customCode.Add(" animation.kind = \"each\";");
customCode.Add(" fadeAnimation = new Tee.FadeAnimation();");
customCode.Add(" fadeAnimation.duration = 500;");
customCode.Add(" fadeAnimation.fade.series = true;");
customCode.Add(" fadeAnimation.fade.marks = true;");
customCode.Add(" animation.mode = \"linear\"; ");
customCode.Add(" fadeAnimation.mode = \"linear\";");
customCode.Add(" animation.items.push(fadeAnimation);");
customCode.Add(" ");
}
customCode.Add(" animation.animate(" + aChart.Export.Image.JScript.ChartName + ");");
}
if (aChart[0].GetType() == typeof(Candle))
{
customCode.Add(aChart.Export.Image.JScript.ChartName + ".axes.bottom.datetime = true;");
customCode.Add(aChart.Export.Image.JScript.ChartName + ".axes.bottom.labels.dateFormat = \"shortDate\";");
customCode.Add(aChart.Export.Image.JScript.ChartName + ".series.items[0].dateFormat = \"shortDate\";");
//cursortool
customCode.Add("var t = new Tee.CursorTool(" + aChart.Export.Image.JScript.ChartName + ");");
customCode.Add("t.direction = \"both\";");
customCode.Add(aChart.Export.Image.JScript.ChartName + ".tools.add(t);");
}
customCode.Add(aChart.Export.Image.JScript.ChartName + ".axes.bottom.labels.format.font.fill = \"rgba(0,0,0,0.6)\";");
customCode.Add(aChart.Export.Image.JScript.ChartName + ".axes.bottom.labels.format.font.setSize(\"10px\");");
customCode.Add(aChart.Export.Image.JScript.ChartName + ".series.items[0].marks.transparent = true;");
//customCode.Add("hostChart = " + aChart.Export.Image.JScript.ChartName + ";");
customCode.Add("chartFeatures(" + chartName + ");"); //call general setup enhancements
customCode.Add("resizeC(" + chartName + ");");
return customCode.ToArray();
}
//circulars, Pie Donut
string[] getCustomCodeOp2(TChart aChart)
{
var customCode = new List<string>();
//customCode.Add(chartName + ".series.items[0].marks.visible = false; ");
customCode.Add(chartName + ".series.items[0].format.stroke.fill = \"white\"; ");
customCode.Add(chartName + ".series.items[0].angleWidth = 0;");
customCode.Add("animatedPie(" + chartName + ");");
//customCode.Add("resizeC(" + chartName + ");");
return customCode.ToArray();
}
public string getFormattedCode()
{
var chartCode = "<h3>C# Code - multiple Chart Series types</h3>";
string strContents = TeeChartOnBlazor.Utils.getResource("genericStr.txt")
var formatter = new HtmlFormatter();
chartCode += formatter.GetHtmlString(strContents, Languages.CSharp);
return chartCode;
}
}