#c# #wpf #helix-3d-toolkit
Вопрос:
Я использую 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
Родительское свойство s не может быть установлено, и у a SceneNode
также нет возможности добавлять к нему дочерних элементов.
Итак, как редактирование сцен работает с HelixToolkit»?
Комментарии:
1. Есть ли
node
у него какая-тоParent
собственность? Потому что очевидный способ-сохранить родителя, передRemoveSelf
которым, вероятно, удалите родителя, а затем используйтеparent.AddNode(mg)
… Раскрытие информации: Я никогда не использовалHelixToolkit
, но это распространено в узловых структурах2. У Helixtoolkit есть отличный набор примеров . Многие проблемы можно решить, найдя пример, который делает то, что вы хотите, и проверив, как он работает.
3. @Selvin да, но это только для чтения.
4. @JonasH Я уже просмотрел кучу из них, но не нашел того, что ищу. Я продолжу с этим ^^
Ответ №1:
Инструментарий Helix toolkit имеет два типа узлов: тип узла сцены и 3d-модель элемента. Типы 3d-моделей элементов являются оболочками узла сцены для предоставления свойств зависимостей wpf для привязок mvvm xaml. Однако типы 3d-моделей элементов нельзя добавить в дерево узлов сцены, но тип узла сцены можно добавить в дерево типов моделей элементов с помощью SceneNodeGroupModel3D.
Импортер Assimp предоставляет только результаты типа узла сцены, поскольку он не зависит от wpf. Вам нужно использовать узел группы вместо GroupModel3D, чтобы добавить свою модель. Затем найдите другой узел группы на графике сцены, чтобы добавить свой узел группы. Или вы можете добавить его в корневой узел, который является узлом группы.
Вот вики для получения более подробной информации https://github.com/helix-toolkit/helix-toolkit/wiki/Use-Element3D-or-SceneNode-under-WPF.SharpDX-или-UWP
Комментарии:
1. поскольку GroupNode не имеет свойства преобразования, которое я в конечном итоге использовал
modelgrout.ModelMatrix = transform.ToMatrix()
. Это правильный способ сделать это?2. Да, преобразование-это особый класс WPF. В конечном итоге он преобразуется в матрицу модели и используется узлом сцены.