Profile Picture

Help on coding 3d surface mesh chart

Posted By lian jia jie Last Month
Author
Message
lian jia jie
Posted Last Month
View Quick Profile
Forum Newbie

Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)

Group: Forum Members
Last Active: 3 days ago @ 11:53 AM
Posts: 6, Visits: 43
Doing a project of a 3d surface chart to show the changing temperature from several sensors. The temperature data is retrieved from MySql database.  

I need help on manually assign the sensor data on certain coordinate. Eg. [x1,y1] - sensor1 , [x2,y1] -sensor 2, [x1,y2] - sensor3, [x2,y2]-sensor 4 , etc...
Any sample coding or guidance is appreciated.

Nevron Support Team
Posted Last Month
View Quick Profile
Supreme Being

Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)

Group: Moderators
Last Active: 2 days ago @ 8:33 AM
Posts: 2,593, Visits: 2,279
Hi,
First of all thank you for your interest in Nevron Chart for .NET. It is not sure what the actual format of the data is - in general we guess that the format is x,y - for the sensor placement and then z value for the sensor value. Also are the XY values for the sensor arbitrary or are they equally spaced from each other (a grid). Please elaborate a little bit on the format of the data and actual values and we'll gladly post an example.


Best Regards,
Nevron Support Team



lian jia jie
Posted Last Month
View Quick Profile
Forum Newbie

Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)

Group: Forum Members
Last Active: 3 days ago @ 11:53 AM
Posts: 6, Visits: 43
The project is based on winform. Hope this simple chart will clear your doubt.
https://www.nevron.com/forum/uploads/images/46d2b8c3-2e1c-490b-9523-0bff.png
The XY coordinates are merely an indicator of position of the sensors. 
Eg. (1,1) - sensor 1 , ( 2,1) - sensor 2 , (3,1) sensor 3 , etc..
The Z values will be retrieved from MySQL database and they should be constantly updating themselves. So that the chart will look like a live chart. 

Nevron Support Team
Posted Last Month
View Quick Profile
Supreme Being

Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)

Group: Moderators
Last Active: 2 days ago @ 8:33 AM
Posts: 2,593, Visits: 2,279

Hi,
We think that in this case it will be more appropriate to use the grid surface (as the distance on the x/z plane are always equal and the cells form a grid). The following code shows how to configure a grid surface chart and pass some sample data:

using Nevron.Chart;
using Nevron.Chart.Windows;
using Nevron.GraphicsCore;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GridSurface
{
 public partial class Form1 : Form
 {
  public Form1()
  {
   InitializeComponent();
  }

  private void Form1_Load(object sender, EventArgs e)
  {
   nChartControl1.Settings.ShapeRenderingMode = ShapeRenderingMode.None;
   nChartControl1.Controller.Tools.Add(new NPanelSelectorTool());
   nChartControl1.Controller.Tools.Add(new NTrackballTool());

   // set a chart title
   NLabel title = nChartControl1.Labels.AddHeader("Surface Chart");
   title.TextStyle.FontStyle = new NFontStyle("Times New Roman", 18, FontStyle.Italic);
   title.TextStyle.FillStyle = new NColorFillStyle(Color.Gray);

   // setup chart
   NChart chart = nChartControl1.Charts[0];
   chart.Enable3D = true;
   chart.Width = 60.0f;
   chart.Depth = 60.0f;
   chart.Height = 25.0f;
   chart.Projection.SetPredefinedProjection(PredefinedProjection.PerspectiveTilted);
   chart.LightModel.SetPredefinedLightModel(PredefinedLightModel.ShinyTopLeft);

   // setup axes
   NOrdinalScaleConfigurator ordinalScale = (NOrdinalScaleConfigurator)chart.Axis(StandardAxis.PrimaryX).ScaleConfigurator;
   ordinalScale.MajorGridStyle.SetShowAtWall(ChartWallType.Floor, true);
   ordinalScale.MajorGridStyle.SetShowAtWall(ChartWallType.Back, true);
   ordinalScale.DisplayDataPointsBetweenTicks = false;

   ordinalScale = (NOrdinalScaleConfigurator)chart.Axis(StandardAxis.Depth).ScaleConfigurator;
   ordinalScale.MajorGridStyle.SetShowAtWall(ChartWallType.Floor, true);
   ordinalScale.MajorGridStyle.SetShowAtWall(ChartWallType.Left, true);
   ordinalScale.DisplayDataPointsBetweenTicks = false;

   // add the surface series
   NGridSurfaceSeries surface = (NGridSurfaceSeries)chart.Series.Add(SeriesType.GridSurface);
   surface.Name = "Surface";
   surface.Legend.Mode = SeriesLegendMode.SeriesLogic;
   surface.SyncPaletteWithAxisScale = false;
   surface.PaletteSteps = 8;
   surface.ValueFormatter.FormatSpecifier = "0.00";

   surface.Data.SetGridSize(3, 3);
   surface.Data.SetValue(0, 0, 0);
   surface.Data.SetValue(0, 1, 0);
   surface.Data.SetValue(0, 2, 0);

   surface.Data.SetValue(1, 0, 0);
   surface.Data.SetValue(1, 1, 10);
   surface.Data.SetValue(1, 2, 0);

   surface.Data.SetValue(2, 0, 0);
   surface.Data.SetValue(2, 1, 0);
   surface.Data.SetValue(2, 2, 0);

  }
 }
}


You can also take a look at the examples shipped with the control. Take a look at the following examples -
All Examples \ Chart Gallery \ Grid Surface
All Examples \ Chart Gallery \ Mesh Surface
All Examples \ Chart Gallery \ Triangulated Surface

Hope this helps - let us know if you meet any problems or have any questions.



Best Regards,
Nevron Support Team



lian jia jie
Posted Last Month
View Quick Profile
Forum Newbie

Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)

Group: Forum Members
Last Active: 3 days ago @ 11:53 AM
Posts: 6, Visits: 43
What code to be added so that the chart will clear the series and refresh the data?

Nevron Support Team
Posted Last Month
View Quick Profile
Supreme Being

Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)

Group: Moderators
Last Active: 2 days ago @ 8:33 AM
Posts: 2,593, Visits: 2,279
Hi,
You need to call the Clear method of the surface data, update the values and then refresh the control - for example:

 // sets all values to 0
   surface.Data.Clear();

   // update data
   surface.Data.SetGridSize(3, 3);
   surface.Data.SetValue(1, 1, 11);
  
// refresh image
   nChartControl1.Refresh();

Let us know if you meet any problems.

Best Regards,
Nevron Support Team



lian jia jie
Posted 5 days ago @ 10:04 PM
View Quick Profile
Forum Newbie

Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)

Group: Forum Members
Last Active: 3 days ago @ 11:53 AM
Posts: 6, Visits: 43
I did put the surface.data.clear() as below to clear the surface series. Somehow , the chart is still replicating. 


For refreshing the chart, I have a timer for counting the refresh interval.


So far from my understanding, the chart is created once more every time it refreshes. The surface.data.clear command doesn't seem to be working.

File attached is the codes i have for my project. Hope you can give some guidances on fixing this issue. Thank you.







Attachments
code.txt (4 views, 59.00 KB)
Nevron Support Team
Posted 5 days ago @ 7:31 AM
View Quick Profile
Supreme Being

Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)Supreme Being (3,273 reputation)

Group: Moderators
Last Active: 2 days ago @ 8:33 AM
Posts: 2,593, Visits: 2,279
Hi,
Currently the code will add a new surface series to each timer tick - what you need to ensure is that the chart contains only one surface series and then clear / update the data - for example:

   NGridSurfaceSeries surface = null;

   if (chart.Series.Count > 0)
   {
    surface = chart.Series[0] as NGridSurfaceSeries;
   }
   
   if (surface == null)
   {
     surface = (NGridSurfaceSeries)chart.Series.Add(SeriesType.GridSurface);
   }

then after you're done updating the data you need to call:
nChartControl.Refresh();

There is no need to call refresh on a separate timer. Hope this helps let us know if you meet any problems or have any questions.


Best Regards,
Nevron Support Team



lian jia jie
Posted 3 days ago @ 10:10 PM
View Quick Profile
Forum Newbie

Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)Forum Newbie (0 reputation)

Group: Forum Members
Last Active: 3 days ago @ 11:53 AM
Posts: 6, Visits: 43
Is there any way to create a label to show the z value of each sensor like the picture below as I want to see the changing value over time. Thank you.
https://www.nevron.com/forum/uploads/images/2864d6b4-7395-4656-9e43-ce7c.png





Similar Topics


Reading This Topic