Инструментарий Helix вращать манипулятор с вложенными моделями
У меня есть окно просмотра спирали с 3 сферами сгруппированы. Предполагается, что это симуляция руки робота. Вложенность обязательна.
- Сфера А - это плечо (с поворотным манипулятором).
- Сфера B - это локоть (с поворотным манипулятором).
- Сфера С - это запястье.
Первый поворотный манипулятор работает как положено. Вы тащите манипулятор, и он вращает сферу A и ее дочерние элементы (другие сферы).
Второй поворотный манипулятор не работает должным образом. Вы тащите манипулятор, и он качает детей. Если вы перетащите его вокруг первой сферы, он будет работать как положено. Так что ожидается его перетаскивание вокруг источника вместо его текущей позиции.
Я пробовал это с установкой точки разворота, но это только ухудшает ситуацию.
Youtube видео тестового приложения
Как сделать так, чтобы манипулятор был вложенным.
<Window x:Class="Wpf3D.Views.Robot3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:helix="clr-namespace:HelixToolkit.Wpf;assembly=HelixToolkit.Wpf"
xmlns:local="clr-namespace:Wpf3D.Views"
xmlns:models="clr-namespace:Wpf3D.Models"
mc:Ignorable="d"
Title="Robot3" Height="600" Width="800">
<Grid>
<helix:HelixViewport3D
x:Name="View3D"
Background="LightGray"
ShowCoordinateSystem="True"
ShowViewCube="True"
ModelUpDirection="0,1,0"
ZoomExtentsWhenLoaded="True">
<helix:HelixViewport3D.DefaultCamera>
<PerspectiveCamera Position="0,1000,4000" LookDirection="0,0,-1" UpDirection="0,1,0" FieldOfView="45" />
</helix:HelixViewport3D.DefaultCamera>
<helix:DefaultLights ShowLights="{Binding IsChecked, ElementName=ViewDefaultLights}" />
<ContainerUIElement3D x:Name="A" Transform="{helix:Translate 0,0,0}">
<helix:SphereVisual3D Fill="Red" />
<helix:RotateManipulator Color="Blue" Axis="0,0,1" TargetTransform="{Binding Transform, ElementName=A}" Diameter="4" InnerDiameter="6" />
<ContainerUIElement3D x:Name="B" Transform="{helix:Translate 20,0,0}">
<helix:SphereVisual3D Fill="Orange" />
<helix:RotateManipulator Color="Green" Axis="0,0,1" TargetTransform="{Binding Transform, ElementName=B}" Diameter="4" InnerDiameter="6" />
<ContainerUIElement3D x:Name="C" Transform="{helix:Translate 20,0,0}">
<helix:SphereVisual3D Fill="Yellow" />
</ContainerUIElement3D>
</ContainerUIElement3D>
</ContainerUIElement3D>
</helix:HelixViewport3D>
</Grid>
</Window>