Chart for .NET / User's Guide / Chart Types / Surface / Vertex Surface

Vertex Surface

Vertex Surface series can display arbitrary shapes and lines in 3D. With this surface type, you can specify the positions of each vertex as well as how the vertices are connected to form the surface mesh.




 Creating a Vertex Surface

You have to create an instance of the NVertexSurfaceSeries type and add it to the series collection of the chart. Vertex surface series can be displayed only in 3D mode, so you have to enable 3D for the chart hosting the series:

C#
Copy Code
// obtain a reference to the Cartesian chart that is created by default
NChart chart = nChartControl1.Charts[0];

// switch in 3D
chart.Enable3D = true;

// set aspect 1:1:1
chart.Width = 50;
chart.Height = 50;
chart.Depth = 50;
// set projection
chart.Projection.SetPredefinedProjection(PredefinedProjection.PerspectiveTilted);

// create a surface series
NVertexSurfaceSeries surface = new NVertexSurfaceSeries();
// add the series to the chart series collection
chart.Series.Add(surface);
Visual Basic
Copy Code
' obtain a reference to the Cartesian chart that is created by default
Dim chart As NChart = NChartControl1.Charts(0)
' switch in 3D
chart.Enable3D = True
' set aspect 1:1:1
chart.Width = 50
chart.Height = 50
chart.Depth = 50
' set projection
chart.Projection.SetPredefinedProjection(PredefinedProjection.PerspectiveTilted)

' create a surface series
Dim surface As New NVertexSurfaceSeries
' add the series to the chart series collection
chart.Series.Add(surface)
 Passing Data

Once the Vertex Surface series is created you need to specify the vertex surface primitive and add some data to it. To specify the vertex surface primitive you use the VertexPrimitive property of the surface, which accepts values from the VertexPrimitive enum:

C#
Copy Code
surface.VertexPrimitive = VertexPrimitive.Triangles;
Visual Basic
Copy Code
surface.VertexPrimitive = VertexPrimitive.Triangles

The following table describes the values of this enum:

Vertex Primitive Description Image
Points Each vertex in the Data series is rendered as a point.
Lines Each pair of vertices in the Data series is rendered as a separate line segment.
LineLoop The vertices in the Data series are rendered as a closed line.
LineStrip The vertices in the Data series are rendered as a line. 
Triangles Each group of three consecutive vertices in the Data series is rendered as a triangle. For example vertices n, n + 1 and n+ 2 form a triangle, n + 3, n + 4, and n + 5 form a triangle and so on.
TriangleStrip Each tree adjacent points in the Data series form a triangle. For example n, n + 1 and n+ 2 form a triangle, n + 1, n + 2 and n + 3 form a triangle, and so on.
TriangleFan The first vertex participates in all triangles. Then every pair of adjacent vertices forms a triangle with the first vertex. For example 0, n, and n + 1 form a triangle, 0,  n + 2, and n + 3 form a triangle and so on.
Quads Each group of four consecutive vertices in the Data series is rendered as a quad. For example n, n + 1, n + 2, and n + 3 form a quad, n + 4, n + 5, n + 6, and n + 7 form a quad and so on.
QuadStrip Each pair of vertices forms a quad with the next pair. For example n, n + 1, n + 2, and n + 3 form a quad, n + 2, n + 3, n + 4, and n + 5 form a quad and so on.
       

Vertex Surface series accept vertex data from the Data series attached to the surface. The following code adds three points to a vertex surface series.

C#
Copy Code
// point 1
surface.Data.AddValue(3.0, 5.0, 1.4);
// point 2
surface.Data.AddValue(2.0, 1.9, 5.1);
// point 3
surface.Data.AddValue(1, 3.5, 4.7);
Visual Basic
Copy Code
' point 1
surface.Data.AddValue(3.0, 5.0, 1.4)
' point 2
surface.Data.AddValue(2.0, 1.9, 5.1)
' point 3
surface.Data.AddValue(1, 3.5, 4.7)

Provided that you set the vertex primitive of the surface to triangle this code will render a triangle in 3D.

 Surface with Custom Colors

You can assign a custom color for each data point. To do so you must first add the data to the series, set the UseColor property to true, and specify the colors for each data point - for example:

C#
Copy Code
VertexSurface.Data.UseColors = true;
VertexSurface.Data.SetColor(0, Color.Red);
VertexSurface.Data.SetColor(1, Color.Green);
VertexSurface.Data.SetColor(2, Color.Blue);
Visual Basic
Copy Code
VertexSurface.Data.UseColors = True
VertexSurface.Data.SetColor(0, Color.Red)
VertexSurface.Data.SetColor(1, Color.Green)
VertexSurface.Data.SetColor(2, Color.Blue)

Custom colors can be used both for the surface filling and for the surface frame lines. To enable custom colors for the surface filling, you have to set the FillMode property to SurfaceFillMode.CustomColors. To enable custom colors for the surface frame lines, you have to set the FrameColorMode property to SurfaceFrameColorMode.CustomColors.

 Isolines

The Vertex surface series can display lines with specified elevation and stroke style (isolines). The following code shows how to display an isoline at some value:

C#
Copy Code

NSurfaceIsoline isoline = new NSurfaceIsoline();

isoline.Value = 10;
isoline.StrokeStyle = new NStrokeStyle(1, Color.Red);

VertexSurface.Isolines.Add(isoline);

Visual Basic
Copy Code

Dim isoline As New NSurfaceIsoline

isoline.Value = 10
isoline.StrokeStyle = New NStrokeStyle(1, Color.Red)

VertexSurface.Isolines.Add(isoline)

 Related Examples

Windows forms: Chart Gallery\Vertex Surface\...

Wpf: Chart Gallery\Vertex Surface\...

WebForms: Chart Gallery\Vertex Surface\...

See Also