创建一个绑定了数据的3D图表有多难,看完这篇迎刃而解(Part 3) DevExpressC#wpf3D
在本教程中,您将完成可视化数据源所需的步骤。
应该执行以下步骤,本文我们将为大家介绍3个步骤及最后结果,更多完整内容欢迎持续关注!
- Step 1. 编写一个应用程序
- Step 2. 为图表和系列绑定添加数据
- Step 3. 配置系列视图
- 结果
Step 3. 配置系列视图
本节中系列的外观将被配置,将分配一个不同的系列视图。此外,通过点的ColorIndex值对点进行着色的着色器将用于提供颜色。
- 打开Series Collection Editor然后选择Series3D,找到Series3DBase.View属性并将其设置为Point3DSeriesView.。
展开视图属性,找到Marker3DSeriesView.MarkerModel属性并将其分配给SphereMarker3DModel对象。
然后,展开model属性,并将其 Marker3DSpherePointModel.SphereDetalizationLevel 属性设置为Low,这将提高应用程序性能。
- 找到Series3DViewBase.Colorizer 属性并将其设置为RangeColorizer3D。
扩展着色器的属性并将其RangeColorizer3D.RangeStops设置为-0.4 0.4 1.8 2。
将YellowPalette对象指定为PaletteColorizer3DBase.Palette属性值。
将 RangeColorizer3D.ApproximateColors 设置为true。
最后,将RangeColorizer3D.ValueProvider设置为新的ColorObjectValueProvider3D对象,然后单击OK关闭编辑器并保存更改。
当前,该系列的XAML标记应如下所示。
<dxc:Series3D DisplayName="Series 1"> <dxc:Series3D.View> <dxc:Point3DSeriesView> <dxc:Point3DSeriesView.MarkerModel> <dxc:Marker3DSpherePointModel SphereDetalizationLevel="Low"/> </dxc:Point3DSeriesView.MarkerModel> <dxc:Point3DSeriesView.Colorizer> <dxc:RangeColorizer3D RangeStops="-0.4 0.4 1.8 2" ApproximateColors="True"> <dxc:RangeColorizer3D.ValueProvider> <dxc:ColorObjectValueProvider3D/> </dxc:RangeColorizer3D.ValueProvider> <dxc:RangeColorizer3D.Palette> <dxc:YellowPalette/> </dxc:RangeColorizer3D.Palette> </dxc:RangeColorizer3D> </dxc:Point3DSeriesView.Colorizer> </dxc:Point3DSeriesView> </dxc:Series3D.View> <!--Point Source Configuration --> </dxc:Series3D>
结果
下图演示了已启动的应用程序。
以下代码是本入门课程的结果。
Star.cs
namespace GettingStarted2 { public class Star { public int HipID { get; private set; } public string Spectr { get; private set; } public double Luminocity { get; private set; } public double ColorIndex { get; private set; } public double X { get; private set; } public double Y { get; private set; } public double Z { get; private set; } public Star( int id, double x, double y, double z, string spectr, double luminocity, double colorIndex ) { HipID = id; X = x; Y = y; Z = z; Spectr = spectr; Luminocity = luminocity; ColorIndex = colorIndex; } } }
StarDataViewModel.cs
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
using System.IO;
using System.Windows;
using System.Windows.Resources;
namespace GettingStarted2 {
public class StarStatisticsViewModel {
public IEnumerable<Star> Stars { get; private set; }
public StarStatisticsViewModel() {
Stars = StarStatisticsLoader.Load("/Data/starsdata.csv");
}
}
static class StarStatisticsLoader {
public static IEnumerable<Star> Load(string filepath) {
StreamResourceInfo streamInfo = Application.GetResourceStream(
new Uri(filepath, UriKind.RelativeOrAbsolute)
);
StreamReader reader = new StreamReader(streamInfo.Stream);
Collection<Star> stars = new Collection<Star>();
while (!reader.EndOfStream) {
String dataLine = reader.ReadLine();
String[] serializedValues = dataLine.Split(';');
stars.Add(
new Star(
id: Convert.ToInt32(serializedValues[0], CultureInfo.InvariantCulture),
x: Convert.ToDouble(serializedValues[3], CultureInfo.InvariantCulture),
y: Convert.ToDouble(serializedValues[4], CultureInfo.InvariantCulture),
z: Convert.ToDouble(serializedValues[5], CultureInfo.InvariantCulture),
spectr: serializedValues[1],
luminocity: Convert.ToDouble(serializedValues[6], CultureInfo.InvariantCulture),
colorIndex: Convert.ToDouble(serializedValues[2], CultureInfo.InvariantCulture)
)
);
}
return stars;
}
}
}
StarDataViewModel.vb
Imports System.Collections.ObjectModel Imports System.Globalization Imports System.IO Imports System.Windows.Resources Public Class StarDataViewModel Dim mStars As IEnumerable(Of Star) Public ReadOnly Property Stars As IEnumerable(Of Star) Get Return mStars End Get End Property Public Sub New() mStars = StarStatisticsLoader.Load("/Data/starsdata.csv") End Sub End Class Public Module StarStatisticsLoader Public Function Load(ByVal filepath As String) As IEnumerable(Of Star) Dim streamInfo As StreamResourceInfo = Application.GetResourceStream( New Uri(filepath, UriKind.RelativeOrAbsolute) ) Dim reader As StreamReader = New StreamReader(streamInfo.Stream) Dim stars As Collection(Of Star) = New Collection(Of Star)() While (Not reader.EndOfStream) Dim dataLine As String = reader.ReadLine() Dim serializedValues As String() = dataLine.Split(";") stars.Add( New Star( id:=Convert.ToInt32(serializedValues(0), CultureInfo.InvariantCulture), x:=Convert.ToDouble(serializedValues(3), CultureInfo.InvariantCulture), y:=Convert.ToDouble(serializedValues(4), CultureInfo.InvariantCulture), z:=Convert.ToDouble(serializedValues(5), CultureInfo.InvariantCulture), spectr:=serializedValues(1), luminocity:=Convert.ToDouble(serializedValues(6), CultureInfo.InvariantCulture), colorIndex:=Convert.ToDouble(serializedValues(2), CultureInfo.InvariantCulture) ) ) End While Return stars End Function End Module
Star.vb
Public Class Star Dim mHipID As Int32 Dim mSpectr As String Dim mX, mY, mZ, mLuminocity, mColorIndex As Double Public ReadOnly Property HipID() As Int32 Get Return mHipID End Get End Property Public ReadOnly Property Spectr() As String Get Return mSpectr End Get End Property Public ReadOnly Property X() As Double Get Return mX End Get End Property Public ReadOnly Property Y() As Double Get Return mY End Get End Property Public ReadOnly Property Z() As Double Get Return mZ End Get End Property Public ReadOnly Property Luminocity() As Double Get Return mLuminocity End Get End Property Public ReadOnly Property ColorIndex() As Double Get Return mColorIndex End Get End Property Public Sub New( ByVal id As Int32, ByVal x As Double, ByVal y As Double, ByVal z As Double, ByVal spectr As String, ByVal luminocity As Double, ByVal colorIndex As Double) mHipID = id mX = x mY = y mZ = z mSpectr = spectr mLuminocity = luminocity mColorIndex = colorIndex End Sub End Class
MainWindow.xaml(C#)
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:GettingStarted2" xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts" x:Class="GettingStarted2.MainWindow" mc:Ignorable="d" Title="MainWindow" Height="720" Width="1280"> <Window.DataContext> <local:StarStatisticsViewModel/> </Window.DataContext> <Grid> <dxc:Chart3DControl> <dxc:Chart3DControl.Legends> <dxc:Legend/> </dxc:Chart3DControl.Legends> <dxc:Series3DStorage> <dxc:Series3D DisplayName="Series 1"> <dxc:Series3D.View> <dxc:Point3DSeriesView> <dxc:Point3DSeriesView.MarkerModel> <dxc:Marker3DSpherePointModel SphereDetalizationLevel="Low"/> </dxc:Point3DSeriesView.MarkerModel> <dxc:Point3DSeriesView.Colorizer> <dxc:RangeColorizer3D RangeStops="-0.4 0.4 1.8 2" ApproximateColors="True"> <dxc:RangeColorizer3D.ValueProvider> <dxc:ColorObjectValueProvider3D/> </dxc:RangeColorizer3D.ValueProvider> <dxc:RangeColorizer3D.Palette> <dxc:YellowPalette/> </dxc:RangeColorizer3D.Palette> </dxc:RangeColorizer3D> </dxc:Point3DSeriesView.Colorizer> </dxc:Point3DSeriesView> </dxc:Series3D.View> <dxc:SeriesPoint3DDataSourceAdapter DataSource="{Binding Stars}" XArgumentDataMember="X" YArgumentDataMember="Y" ValueDataMember="Z" ColorDataMember="ColorIndex"/> </dxc:Series3D> </dxc:Series3DStorage> </dxc:Chart3DControl> </Grid> </Window>
MainWindow.xaml(VB.NET)
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:GettingStarted2" xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts" x:Class="GettingStarted2.MainWindow" mc:Ignorable="d" Title="MainWindow" Height="720" Width="1280"> <Window.DataContext> <local:StarDataViewModel/> </Window.DataContext> <Grid> <dxc:Chart3DControl> <dxc:Chart3DControl.Legends> <dxc:Legend/> </dxc:Chart3DControl.Legends> <dxc:Series3DStorage> <dxc:Series3D DisplayName="Series 1"> <dxc:Series3D.View> <dxc:Point3DSeriesView> <dxc:Point3DSeriesView.MarkerModel> <dxc:Marker3DSpherePointModel SphereDetalizationLevel="Low"/> </dxc:Point3DSeriesView.MarkerModel> <dxc:Point3DSeriesView.Colorizer> <dxc:RangeColorizer3D RangeStops="-0.4 0.4 1.8 2" ApproximateColors="True"> <dxc:RangeColorizer3D.ValueProvider> <dxc:ColorObjectValueProvider3D/> </dxc:RangeColorizer3D.ValueProvider> <dxc:RangeColorizer3D.Palette> <dxc:YellowPalette/> </dxc:RangeColorizer3D.Palette> </dxc:RangeColorizer3D> </dxc:Point3DSeriesView.Colorizer> </dxc:Point3DSeriesView> </dxc:Series3D.View> <dxc:SeriesPoint3DDataSourceAdapter DataSource="{Binding Stars}" XArgumentDataMember="X" YArgumentDataMember="Y" ValueDataMember="Z" ColorDataMember="ColorIndex"/> </dxc:Series3D> </dxc:Series3DStorage> </dxc:Chart3DControl> </Grid> </Window>
上一篇: Spring MVC拦截器详解
下一篇: Python自省(反射)指南