Chart for .NET / User's Guide / Chart Types / Surface / Common Surface Functionality

In This Topic
    Common Surface Functionality
    In This Topic

    NSurfaceSeriesBase is the base type for the NGridSurfaceSeries , NMeshSurfaceSeries, NTriangulatedSurfaceSeries and NVertexSurfaceSeries types, which represent different types of surface charts. It provides common functionality for the surface series like surface palette management, control of the surface filling, frame and appearance, flat surface mode etc. When you add a surface series to a chart you should also set the Enable3D property to true, otherwise the surface will not be visualized.

     Surface Frame

    The NSurfaceSeriesBase object supports several frame modes including: Mesh, Contour, Mesh Contour, Dots and no frame. You can change the frame mode with the help of the FrameMode property, which accepts values from the SurfaceFrameMode enumeration. The following code changes the frame mode to mesh contour:

    C#
    Copy Code
    surface.FrameMode = SurfaceFrameMode.MeshContour;
    
    Visual Basic
    Copy Code
    surface.FrameMode = SurfaceFrameMode.MeshContour
    

    The frame can be rendered with uniform coloring or with palette coloring. This feature is controlled through the FrameColorMode property. If it is set to SurfaceFrameColorMode.Uniform the surface frame is displayed with the color defined by the FrameStrokeStyle property. If it is set to SurfaceFrameColorMode.Zone, the frame is displayed with the current palette colors. The following images demonstrate the different frame styles.

    Surface Frame Styles
    Contour Dots
    Mesh Contour Mesh

     Surface Filling

    The surface series support different fill modes like zone filling, zone filling with texture, uniform filling and no filling. The fill mode is controlled through the FillMode property. By default mode is zone filling (the surface is filled with the colors of the current palette, based on the elevation of the surface segments). The following code demonstrates how to disable the filling.

    C#
    Copy Code
    surface.FillMode = SurfaceFillMode.None;
    
    Visual Basic
    Copy Code
    surface.FillMode = SurfaceFillMode.None
    

    The following image displays a typical zone-filled surface chart.

    The FillStyle property holds a NFillStyle object, with the help of which you can control the surface transparency, apply gradients, images, patterns and advanced gradients to the surface, as well as modify material properties like emissive color, specular reflection color and shininess. The fill style is merged with the palette colors. If you want to show a surface with some kind of fill style, but without zoning (for example an image mapped on the surface) you have to use Uniform filling mode:

    C#
    Copy Code
    surface.FillMode = SurfaceFillMode.Uniform;
    
    Visual Basic
    Copy Code
    surface.FillMode = SurfaceFillMode.Uniform
    

    Now you can apply the desired image with the help of an image fill style object.

    C#
    Copy Code
    surface.FillStyle = new NImageFillStyle("c:\\texture.png");
    
    Visual Basic
    Copy Code
    surface.FillStyle = New NImageFillStyle("c:\texture.png")
    

    The image below shows a surface with a mapped texture image:

    Finally all surface series support color information per vertex. This is specified by setting the FillMode property to CustomColors:

    C#
    Copy Code
    surface.FillMode = SurfaceFillMode.CustomColors;
    Visual Basic
    Copy Code
    surface.FillMode = SurfaceFillMode.CustomColors
     Shading Mode

    Surface series support two shading modes: flat and smooth. With flat shading the outline of each polygon is clearly visible and the surface looks rough. This mode is appropriate when the surface forms sharp peaks. Smooth shading makes the surface look curved and smooth and in many cases can significantly improve its appearance.

    The shading mode is controlled through the ShadingMode property of the series.

     Surface Palette

    The surface palette defines the colors for the surface filling (when SurfaceFillStyle.Zone is used) as well as the colors for the surface frame when the FrameColorMode property is set to SurfaceFrameColorMode.Zone. By default the surface uses automatically generated palette. The automatic palette can either be synchronized with the axis ticks or a fixed number of palette steps can be defined. The mode is controlled by the boolean property SyncPaletteWithAxisScale. The number of steps is defined by the PaletteSteps property. The following code creates a palette with 4 steps:

    C#
    Copy Code
    surface.SyncPaletteWithAxisScale = false;
    surface.PaletteSteps = 4;
    
    Visual Basic
    Copy Code
    surface.SyncPaletteWithAxisScale = False
    surface.PaletteSteps = 4
    

    The advantage of these types of palette filling is that the component will automatically assign colors to values. Sometimes though, you might want to specify exactly the color mapped on a particular elevation. In this case, you can manually set the palette entries. The first step to take in this direction is to turn off the automatic palette.

    C#
    Copy Code
    surface.AutomaticPalette = false;
    
    Visual Basic
    Copy Code
    surface.AutomaticPalette = False
    

    The Palette property of the NSurfaceSeriesBase returns an NPalette object that helps you deal with palette entries. The NPalette object is a set of elevation values and the corresponding color entries. The following code adds three entries into a palette:

    C#
    Copy Code
    surface.Palette.Clear();
    surface.Palette.Add(10.0, Color.Red);
    surface.Palette.Add(20.5, Color.Green);
    surface.Palette.Add(40.0, Color.Blue);
    
    Visual Basic
    Copy Code
    surface.Palette.Clear()
    surface.Palette.Add(10.0, Color.Red)
    surface.Palette.Add(20.5, Color.Green)
    surface.Palette.Add(40.0, Color.Blue)
    

    The newly created palette will map red color to value 10.0, green color to value 20.5 and blue color to value 40.0. As you can see one of the advantages of the custom palette is that it can map colors to irregular value intervals. Another useful feature of the surface palette is the smooth palette mode. In this mode the zone colors gradate smoothly from one to another. The following code turns on the smooth palette.

    C#
    Copy Code
    surface.SmoothPalette = true;
    
    Visual Basic
    Copy Code
    surface.SmoothPalette = True
    

    The following images demonstrate a custom palette with disabled and enabled smooth mode.


    Smooth and Zoned Surface Palette
    Smooth Palette Zoned Palette

     Contour Chart

    The surface series can be displayed in flat surface mode (also known as contour chart). This mode is enabled with the help of the DrawFlat property of the NSurfaceSeriesBase class.

    C#
    Copy Code
    surface.DrawFlat = true;
    
    Visual Basic
    Copy Code
    surface.DrawFlat = True
    

    You can set the contour at an arbitrary vertical position. Two properties control the vertical position of the contour - PositionMode and PositionValue. The contour can be positioned in three modes: SurfacePositionMode.AxisBegin, SurfacePositionMode.AxisEnd and SurfacePositionMode.CustomValue. When you set the PositionMode property to AxisBegin or AxisEnd the component ignores the PositionValue and places the contour respectively at the min or the max value of the vertical axis. When you set the PositionMode to CustomValue, the contour is positioned at the value specified in PositionValue. The following code positions the surface at value 5.0.

    C#
    Copy Code
    surface.PositionMode = SurfacePositionMode.CustomValue;
    surface.PositionValue = 5.0;
    
    Visual Basic
    Copy Code
    surface.PositionMode = SurfacePositionMode.CustomValue
    surface.PositionValue = 5.0
    

    The following images represent contour charts with smooth and zoned palette.


    Contour with Smooth and Zone Palette
    Zoned Palette Smooth Palette

    Usually contour charts are not displayed in perspective view, but with orthogonal projection with top view position. This can be done easily with the help of a special predefined projection. The following line of code demonstrates this:

    C#
    Copy Code
    chart.Projection.SetPredefinedProjection(PredefinedProjection.OrthogonalTop);
    
    Visual Basic
    Copy Code
    chart.Projection.SetPredefinedProjection(PredefinedProjection.OrthogonalTop)
    
     Formatting

    The surface series support the following formatting commands for the legend item texts:

    <zone_value> - palette value (for smooth palette only)
    <zone_begin> - begin value of a zone (the lower value)
    <zone_end> - second value of a zone (the higher value)

    The following formatting commands are supported for the tooltip texts:

    <value> - elevation value of a data point
    <index> - index of a surface segment
    <xindex> - x index of a surface segment
    <zindex> - z index of a surface segment

    The formatting properties for all elevation values can be controlled through the ValueFormatter property.

     Palette Legend

    The surface series populates the legend with palette information when the legend mode is SeriesLegendMode.SeriesLogic. If a smooth palette is applied all the palette entries are displayed in the legend. The formatting command that should be used in such case is <zone_value>.

    C#
    Copy Code
    surface.Legend.Format = "<zone_value>";
    
    Visual Basic
    Copy Code
    surface.Legend.Format = "<zone_value>"
    

    If the smooth palette is turned off the legend displays the zones defined by two successive palette entries (the number of legend items in this case is equal to the number of palette entries minus one). Use the following formatting commands: <zone_begin> for the first value in a zone, <zone_end> for the second value in a zone.

    C#
    Copy Code
    surface.Legend.Format = "<zone_begin> - <zone_end>";
    
    Visual Basic
    Copy Code
    surface.Legend.Format = "<zone_begin> - <zone_end>"
    
     Shader (GPU only Rendering)

    All surfaces by default will use a combination of CPU / GPU rendering, where some of the calculations are performed by the CPU and others are done on the GPU. The advantage of this approach is that computations that can be executed only once are done on the CPU and all the rest is performed on the GPU. In some cases however, for example when you have large dynamically changing data in realtime it is better to perform all calculations on the GPU. To enable this feature you need to set the EnableShaderRendering property to true:

    C#
    Copy Code
    surface.EnableShaderRendering = true;
    Visual Basic
    Copy Code
    surface.EnableShaderRendering = True
     Interactivity
    The default interactivity features of the surface series are controlled through the InteractivityStyle property. You can assign individual interactivity styles to particular data points through the InteractivityStyles property. It exposes a NIndexedDataSeries collection, in which you can add interactivity styles for specific data point indexes.
    See Also