WPF和3D如何更改3D空间中的单个位置点?

我在WPF中定义了一个非常简单的3D空间,它定义了一个3D矩形,我希望能够操作MeshGeometry3D上的每个Point3D对象(在“Positions”中)属性,但我遇到了麻烦。 ..

这是我的XAML:

                                                

其中test1只是一个包裹在可视刷中的图像。

这是我的c#:

 private void canvas_ContactDown(object sender, ContactEventArgs e) { //Point contactPosition = e.GetPosition(this); //var rayMeshResult = (RayMeshGeometry3DHitTestResult)VisualTreeHelper.HitTest(ViewPort, e.GetPosition(ViewPort)); translatedX -= 0.25; translatedY -= 0.25; model1.Transform = new TranslateTransform3D(translatedX, translatedY, 0.0); //model1.Transform.Transform(new Point3D(translatedX, translatedY, 0.0)); Console.WriteLine("Changed"); //Apply Z index changes here... var geometry3D = model1.Geometry as MeshGeometry3D; Point3DCollection positions = geometry3D.Positions; foreach (var position in positions) { position.Offset(0,0,-15); } } 

但在视觉屏幕上没有任何反应……

我想特别提到的一件事是,我不想将变换应用于整个对象,一次只需要一个点。

但如果这是唯一的方式,那么我猜我应该调查它

谢谢你提供的所有帮助。

标记

好吧,我明白了,这是因为geometry3D.Positions返回Point3D对象的集合,这些对象是结构,因此当你引用它们时,你不会改变你认为正在改变的那个……

所以一个更像这样的循环就可以了:

  for (var i = 0; i < positions.Count; i++) { Point3D position = positions[i]; position.Z += 5; positions[i] = position; } 

这将以更好的方式解决问题。

 TranslateTransform3D mytranslate = new TranslateTransform3D(); mytranslate.OffsetX = 0; mytranslate.OffsetY = 0; mytranslate.OffsetZ = 5; model1.Transform = mytranslate;