我想画一组三维立方体,每个立方体应该显示的名称,并选择了多维数据集时应该有自己的事件处理程序。
是否有可能使用后面的代码或XAML绑定来实现呢?
我想画一组三维立方体,每个立方体应该显示的名称,并选择了多维数据集时应该有自己的事件处理程序。
是否有可能使用后面的代码或XAML绑定来实现呢?
从代码中绘制一个3D立方体后面我会用Helix3D工具包CubeVisual3D。 但是,如果你要坚持用WPF股票3D元素它是实现相当简单。
从这里开始,了解3D文字enviroments http://www.codeproject.com/Articles/33893/WPF-Creation-of-Text-Labels-for-3D-Scene将引导您通过两个不同的方法来添加文本3D图像,我觉得非常有帮助。
对于一个立方体就使用这样的RectangleVisual3D对象的东西。
RectangleVisual3D myCube = new RectangleVisual3D();
myCube.Origin = new Point3D(0, 0, 0); //Set this value to whatever you want your Cube Origen to be.
myCube.Width = 5; //whatever width you would like.
myCube.Length = 5; //Set Length = Width
myCube.Normal = new Vector3D(0, 1, 0); // if you want a cube that is not at some angle then use a vector in the direction of an axis such as this one or <1,0,0> and <0,0,1>
myCube.LengthDirection = new Vector3D(0, 1, 0); //This will depend on the orientation of the cube however since it is equilateral just set it to the same thing as normal.
myCube.Material = new DiffuseMaterial(Brushes.Red); // Set this with whatever you want or just set the myCube.Fill Property with a brush type.
太添加事件处理,我相信你一定的处理程序添加到的Viewport3D。 这种性质的东西应该工作。
public Window1()
{
InitializeComponent();
this.mainViewport.MouseDown += new MouseButtonEventHandler(mainViewport_MouseDown);
this.mainViewport.MouseUp += new MouseButtonEventHandler(mainViewport_MouseUp);
}
然后添加此功能
ModelVisual3D GetHitResult(Point location)
{
HitTestResult result = VisualTreeHelper.HitTest(mainViewport, location);
if(result != null && result.VisualHit is ModelVisual3D)
{
ModelVisual3D visual = (ModelVisual3D)result.VisualHit;
return visual;
}
return null;
}
然后添加在事件处理程序
void mainViewport_MouseUp(object sender, MouseButtonEventArgs e)
{
Point location = e.GetPosition(mainViewport);
ModelVisual3D result = GetHitResult(location);
if(result == null)
{
return;
}
//Do Stuff Here
}
void mainViewport_MouseDown(object sender, MouseButtonEventArgs e)
{
Point location = e.GetPosition(mainViewport);
ModelVisual3D result = GetHitResult(location);
if(result == null)
{
return;
}
//Do Stuff Here
}