问题描述
我正在使用 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),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
的 Parent 属性不可设置,SceneNode
也无法向其添加子项。
那么如何使用 HelixToolkit 进行场景编辑?
解决方法
Helix 工具包有两种类型的节点,场景节点类型和元素 3d 模型。元素 3d 模型类型是场景节点的包装器,为 xaml mvvm 绑定提供 wpf 依赖属性。但是,不能将元素3d模型类型添加到场景节点树中,但可以使用SceneNodeGroupModel3D将场景节点类型添加到元素模型类型树中。
Assimp 导入器仅提供场景节点类型结果,因为它不依赖于 wpf。您需要使用 Group 节点而不是 GroupModel3D 来添加模型。然后在场景图中找到另一个组节点以添加您的组节点。或者也可以在根节点下添加,也就是Group节点。
这里是维基了解更多详情 https://github.com/helix-toolkit/helix-toolkit/wiki/Use-Element3D-or-SceneNode-under-WPF.SharpDX-or-UWP