HelixToolkit 场景操作

HelixToolkit scene manipulation

我正在使用 HelixToolkit 导入模型并显示它。
现在我想取模型的一个对象并旋转它。
不幸的是,我找不到一种方法来编辑导入器给我的场景。

var imp = new HelixToolkit.SharpDX.Core.Assimp.Importer();

var scene = imp.Load(".\test.obj");

foreach (var node in scene.Root.Traverse().ToList())
{
    if (node.Name.Contains("gate"))
    {
        node.RemoveSelf(); // remove from scene to be able to add to group
        var mg = new SceneNodeGroupModel3D();
        mg.AddNode(node);
        mg.Transform = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1,0,0), 45 ));
        // could not find a way to add the group back
    }
}

this.ModelGroup.AddNode(scene.Root); // That's the SceneNodeGroupModel3D that is bound to the Viewport3DX for displaying

虽然我可以删除对象并将其添加到旋转组,但我无法将其添加回场景。

无法设置 SceneNodeGroupModel3D 的父级 属性,并且 SceneNode 也无法向其添加子级。

那么HelixToolkit是如何进行场景编辑的呢?

Helix工具包有两种类型的节点,场景节点类型和元素3d模型。 Element 3d 模型类型是场景节点的包装器,可为 xaml mvvm 绑定提供 wpf 依赖属性。但是元素3d模型类型不能添加到场景节点树中,但是场景节点类型可以通过SceneNodeGroupModel3D添加到元素模型类型树中。

Assimp 导入器仅提供场景节点类型结果,因为它不依赖于 wpf。您需要使用 Group 节点而不是 GroupModel3D 来添加您的模型。然后在场景图中找到另一个组节点添加你的组节点。或者也可以添加到根节点下,根节点是Group节点。

这里是 wiki 了解更多详情 https://github.com/helix-toolkit/helix-toolkit/wiki/Use-Element3D-or-SceneNode-under-WPF.SharpDX-or-UWP