Изменение трехмерных координат по осям, нарисованным в WPF, когда перспектива камеры меняется, как в режиме просмотра Matlab - PullRequest
0 голосов
/ 30 октября 2018

Я использую Helix3D.WPF Библиотека для рисования трехмерных геометрических сеток внутри окна просмотра Helix3D, и я использую перспективную камеру для изменения перспективы вида.

Я не могу нарисовать динамические оси, которые могли бы адаптироваться к перспективе вида при изменении перспективы камеры (поворот, панорамирование или масштабирование), как те, которые нарисованы на трехмерном графике в Matlab.

Здесь , здесь и здесь - изображения, демонстрирующие, как Matlab делает это.

Вот код XAML моего окна WPF

<Window x:Class="CancerDoseCalculation.Views.Plot3DWindow"
    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:local="clr-namespace:CancerDoseCalculation.Views"
    xmlns:helix="clr-namespace:HelixToolkit.Wpf;assembly=HelixToolkit.Wpf"
    mc:Ignorable="d"
    Title="Plot3DWindow" Height="700" Width="Auto">

    <helix:HelixViewport3D 
        x:Name="viewport" 
        Grid.Row="1" 
        ZoomExtentsWhenLoaded="True" 
        PanGesture="LeftClick" 
        ShowViewCube="True"
        ShowCameraInfo="True"
        ShowCameraTarget="True"
        ShowCoordinateSystem="True"
        ZoomSensitivity="2"
        Width="600"
        Height="600"
        Grid.Column="1" Background="#FF0F0B0B">



        <helix:HelixViewport3D.Camera>
            <PerspectiveCamera x:Name="perspectiveCamera" LookDirection="1,1,-1" UpDirection="0,0,1" FieldOfView="40"/>
        </helix:HelixViewport3D.Camera>

        <ModelVisual3D x:Name="ModelVisual3D">
            <ModelVisual3D.Content>
                <Model3DGroup x:Name="Model3DGroup">
                    <DirectionalLight Color="White" Direction="-1,1,-1" />
                    <GeometryModel3D>
                        <GeometryModel3D.Geometry>
                            <MeshGeometry3D Positions="0,0,0 10,0,0 10,10,0 0,10,0 0,0,10 
                    10,0,10 10,10,10 0,10,10"
                                            TriangleIndices="0 1 3 1 2 3  0 4 3 4 7 3  4 6 7 4 5 6 
                                     0 4 1 1 4 5  1 2 6 6 5 1  2 3 7 7 6 2"/>
                        </GeometryModel3D.Geometry>
                        <GeometryModel3D.Material>
                            <DiffuseMaterial Brush="Red"/>
                        </GeometryModel3D.Material>
                    </GeometryModel3D>
            </Model3DGroup>
            </ModelVisual3D.Content>
        </ModelVisual3D>
        <helix:DefaultLights />


    </helix:HelixViewport3D>

1 Ответ

0 голосов
/ 01 ноября 2018

Вы должны создать свой собственный 3D-визуал для достижения этого типа рисования.

...