Applies to: Nevron Chart for .NET
How to integrate 3D Surface Chart control in WPF application?
All the charting types of Nevron Chart for .NET can be used in WPF applications. You can use the Chart control in WPF applications through WinForm Control Hosting (WindowsFormsHost). The following example will help you create a Triangulated Surface Chart in WPF:
Create a new WPF application:
- Open Microsoft Visual Studio for .NET
- Select the File - New - Project command - the new project dialog will be displayed
- Select Visual C# Projects (or Visual Basic) - WPF Applications
Note: VS 2010 users must switch the target framework to ".NET Framework 4" as by default the applications target ".NET Framework 4 Client Profile". This is required, because Nevron Chart for WinForms uses design time support features that are not present in ".NET Framework 4 Client Profile". To do this right click on the project in Solution Explorer and select properties. On the Application tab go to "Target Framework" and select ".NET Framework 4".
- Click the OK button - the designer for MainWindow.xaml should automatically appear
- From the Visual Studio Toolbox, drag and drop a Windows Forms Host control (WindowsFormsHost) on the Main Window. This should add the following code:
<
Window
x:Class
=
"WpfApplication1.MainWindow"
Title
=
"MainWindow"
Height
=
"400"
Width
=
"500"
>
<
Grid
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"154*"
/>
<
RowDefinition
Height
=
"157*"
/>
</
Grid.RowDefinitions
>
<
WindowsFormsHost
Height
=
"Auto"
HorizontalAlignment
=
"Stretch"
Name
=
"windowsFormsHost1"
VerticalAlignment
=
"Stretch"
Width
=
"Auto"
Grid.RowSpan
=
"2"
/>
</
Grid
>
</
Window
>
Note that for this example, we have set the Height and Width to Auto.
- In the project Solution Explorer, add reference to the following assemblies: Nevron.Chart.dll; Nevron.Chart.WinForm.dll; Nevron.Presentation.dll; Nevron.System.dll;
- In the MainWindow.xaml.cs use the following code:
[C#]
using
System;
using
System.Windows;
using
Nevron.Chart;
using
Nevron.Chart.WinForm;
using
Nevron.GraphicsCore;
...
public
partial
class
MainWindow : Window
{
public
MainWindow()
{
InitializeComponent();
NChartControl nChartControl1 =
new
NChartControl();
nChartControl1 =
new
NChartControl();
nChartControl1.Controller.Tools.Add(
new
NSelectorTool());
nChartControl1.Controller.Tools.Add(
new
NTrackballTool());
nChartControl1.Legends[0].Mode = LegendMode.Disabled;
NCartesianChart chart = (NCartesianChart)nChartControl1.Charts[0];
chart.Enable3D =
true
;
chart.Width = 60;
chart.Depth = 60;
chart.Height = 30;
chart.Projection.Type = ProjectionType.Perspective;
chart.Projection.Elevation = 30;
chart.Projection.Rotation = -60;
chart.BoundsMode = BoundsMode.Fit;
chart.LightModel.SetPredefinedLightModel(PredefinedLightModel.NorthernLights);
// set chart wall visibility to auto
chart.Wall(ChartWallType.Back).VisibilityMode = WallVisibilityMode.Auto;
chart.Wall(ChartWallType.Left).VisibilityMode = WallVisibilityMode.Auto;
chart.Wall(ChartWallType.Front).VisibilityMode = WallVisibilityMode.Auto;
chart.Wall(ChartWallType.Right).VisibilityMode = WallVisibilityMode.Auto;
chart.Wall(ChartWallType.Floor).VisibilityMode = WallVisibilityMode.Auto;
chart.Wall(ChartWallType.Top).VisibilityMode = WallVisibilityMode.Auto;
// set axis anchoring to auto
chart.Axis(StandardAxis.PrimaryY).Anchor =
new
NBestVisibilityAxisAnchor(AxisOrientation.Vertical);
chart.Axis(StandardAxis.PrimaryX).Anchor =
new
NBestVisibilityAxisAnchor(AxisOrientation.Horizontal);
chart.Axis(StandardAxis.Depth).Anchor =
new
NBestVisibilityAxisAnchor(AxisOrientation.Depth);
NTriangulatedSurfaceSeries triangulatedSurface =
new
NTriangulatedSurfaceSeries();
chart.Series.Add(triangulatedSurface);
triangulatedSurface.UsePreciseGeometry =
true
;
triangulatedSurface.AutomaticPalette =
true
;
triangulatedSurface.SyncPaletteWithAxisScale =
false
;
triangulatedSurface.PaletteSteps = 8;
triangulatedSurface.FrameMode = SurfaceFrameMode.Mesh;
for
(
int
j = 0; j < 30; j++)
{
for
(
int
i = 0; i < 30; i++)
{
double
yPoint = Math.Sin(i * 0.1) * Math.Cos(j * 0.1) * 5;
triangulatedSurface.XValues.Add(i);
triangulatedSurface.ZValues.Add(j);
triangulatedSurface.Values.Add(yPoint);
}
}
windowsFormsHost1.Child = nChartControl1;
}
}
[VB.NET]
Imports
System
Imports
System.Windows
Imports
Nevron.Chart
Imports
Nevron.Chart.WinForm
Imports
Nevron.GraphicsCore
...
Class
MainWindow
Public
Sub
New
()
InitializeComponent()
Dim
nChartControl1
As
New
NChartControl()
nChartControl1 =
New
NChartControl()
nChartControl1.Controller.Tools.Add(
New
NSelectorTool())
nChartControl1.Controller.Tools.Add(
New
NTrackballTool())
nChartControl1.Legends(0).Mode = LegendMode.Disabled
Dim
chart
As
NCartesianChart =
DirectCast
(nChartControl1.Charts(0), NCartesianChart)
chart.Enable3D =
True
chart.Width = 60
chart.Depth = 60
chart.Height = 30
chart.Projection.Type = ProjectionType.Perspective
chart.Projection.Elevation = 30
chart.Projection.Rotation = -60
chart.BoundsMode = BoundsMode.Fit
chart.LightModel.SetPredefinedLightModel(PredefinedLightModel.NorthernLights)
' set chart wall visibility to auto
chart.Wall(ChartWallType.Back).VisibilityMode = WallVisibilityMode.
Auto
chart.Wall(ChartWallType.Left).VisibilityMode = WallVisibilityMode.
Auto
chart.Wall(ChartWallType.Front).VisibilityMode = WallVisibilityMode.
Auto
chart.Wall(ChartWallType.Right).VisibilityMode = WallVisibilityMode.
Auto
chart.Wall(ChartWallType.Floor).VisibilityMode = WallVisibilityMode.
Auto
chart.Wall(ChartWallType.Top).VisibilityMode = WallVisibilityMode.
Auto
' set axis anchoring to auto
chart.Axis(StandardAxis.PrimaryY).Anchor =
New
NBestVisibilityAxisAnchor(AxisOrientation.Vertical)
chart.Axis(StandardAxis.PrimaryX).Anchor =
New
NBestVisibilityAxisAnchor(AxisOrientation.Horizontal)
chart.Axis(StandardAxis.Depth).Anchor =
New
NBestVisibilityAxisAnchor(AxisOrientation.Depth)
Dim
triangulatedSurface
As
New
NTriangulatedSurfaceSeries()
chart.Series.Add(triangulatedSurface)
triangulatedSurface.UsePreciseGeometry =
True
triangulatedSurface.AutomaticPalette =
True
triangulatedSurface.SyncPaletteWithAxisScale =
False
triangulatedSurface.PaletteSteps = 8
triangulatedSurface.FrameMode = SurfaceFrameMode.Mesh
For
j
As
Integer
= 0
To
29
For
i
As
Integer
= 0
To
29
Dim
yPoint
As
Double
= Math.Sin(i * 0.1) * Math.Cos(j * 0.1) * 5
triangulatedSurface.XValues.Add(i)
triangulatedSurface.ZValues.Add(j)
triangulatedSurface.Values.Add(yPoint)
Next
Next
windowsFormsHost1.Child = nChartControl1
End
Sub
End
Class
Article ID: 171, Created On: 1/18/2011, Modified: 1/18/2011