WPF GeneralTransform3DTo2D TransformToAncestor

复制代码
//xaml
<Window x:Class="WpfApp113.MainWindow"
        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:WpfApp113"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid x:Name="myGrid">
        <TextBlock Panel.ZIndex="1"
                   IsHitTestVisible="False">
            <TextBlock.RenderTransform>
                <TranslateTransform x:Name="t_000"/>
            </TextBlock.RenderTransform>
            (-1,-1,-1)
        </TextBlock>
        <TextBlock Panel.ZIndex="1"
                   IsHitTestVisible="False">
            <TextBlock.RenderTransform>
                <TranslateTransform x:Name="t_001"/>
            </TextBlock.RenderTransform>
            (-1,-1,1)
        </TextBlock>
        <TextBlock Panel.ZIndex="1"
                   IsHitTestVisible="False">
            <TextBlock.RenderTransform>
                <TranslateTransform x:Name="t_010"/>
            </TextBlock.RenderTransform>
            (-1,-1,-1)
        </TextBlock>
        <TextBlock Panel.ZIndex="1"
                   IsHitTestVisible="False">
            <TextBlock.RenderTransform>
                <TranslateTransform x:Name="t_011"/>
            </TextBlock.RenderTransform>
            (-1,1,1)
        </TextBlock>
        <TextBlock Panel.ZIndex="1"
                   IsHitTestVisible="False">
            <TextBlock.RenderTransform>
                <TranslateTransform x:Name="t_100"/>
            </TextBlock.RenderTransform>
            (1,-1,-1)
        </TextBlock>
        <TextBlock Panel.ZIndex="1"
                   IsHitTestVisible="False">
            <TextBlock.RenderTransform>
                <TranslateTransform x:Name="t_101"/>
            </TextBlock.RenderTransform>
            (1,-1,1)
        </TextBlock>
        <TextBlock Panel.ZIndex="1"
                   IsHitTestVisible="False">
            <TextBlock.RenderTransform>
                <TranslateTransform x:Name="t_110"/>
            </TextBlock.RenderTransform>
            (1,1,-1)
        </TextBlock>
        <TextBlock Panel.ZIndex="1"
                   IsHitTestVisible="False">
            <TextBlock.RenderTransform>
                <TranslateTransform x:Name="t_111"/>
            </TextBlock.RenderTransform>
            (1,1,1)
        </TextBlock>
        <Viewport3D Panel.ZIndex="0">
            <Viewport3D.Camera>
                <PerspectiveCamera Position="3,3,4"
                                   LookDirection="-1,-1,-1"
                                   FieldOfView="60"/>
            </Viewport3D.Camera>
            <Viewport3D.Children>
                <ModelVisual3D>
                    <ModelVisual3D.Content>
                        <DirectionalLight Direction="-0.3,-0.4,-0.5"/>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
                <ModelUIElement3D x:Name="Cube">
                    <ModelUIElement3D.Transform>
                        <RotateTransform3D>
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D x:Name="rotationY"
                                                     Axis="0,1,0"
                                                     Angle="0"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                    </ModelUIElement3D.Transform>
                    <ModelUIElement3D.Model>
                        <GeometryModel3D x:Name="ob_cube">
                            <GeometryModel3D.Material>
                                <DiffuseMaterial>
                                    <DiffuseMaterial.Brush>
                                        <SolidColorBrush Color="Orange"
                                                         x:Name="cubeBrush"/>
                                    </DiffuseMaterial.Brush>
                                </DiffuseMaterial>
                            </GeometryModel3D.Material>
                            <GeometryModel3D.Geometry>
                                <MeshGeometry3D x:Name="me_cube2"
                                                Positions="1,1,-1 1,-1,-1 -1,-1,-1 -1,1,-1 1,1,1 -1,1,1 -1,-1,1
1,-1,1 1,1,-1 1,1,1 1,-1,1 1,-1,-1 1,-1,-1 1,-1,1
-1,-1,1 -1,-1,-1 -1,-1,-1 -1,-1,1 -1,1,1 -1,1,-1 1,1,1
1,1,-1 -1,1,-1 -1,1,1"
                                                TriangleIndices="0 1 2 0 2 3 4 5 6 4 6 7 8 9 10 8 10 11 12 13 14
12 14 15 16 17 18 16 18 19 20 21 22 20 22 23"
                                                TextureCoordinates="0,1 0,0 1,0 1,1 1,1 -0,1 0,-0 1,0 1,1 -0,1
0,-0 1,0 1,0 1,1 -0,1 0,-0 -0,0 1,-0 1,1 0,1
1,-0 1,1 0,1 -0,0"/>
                            </GeometryModel3D.Geometry>
                        </GeometryModel3D>
                    </ModelUIElement3D.Model>
                </ModelUIElement3D>
            </Viewport3D.Children>
        </Viewport3D>
    </Grid>
    <Window.Triggers>
        <EventTrigger RoutedEvent="Window.Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="rotationY"
                                     Storyboard.TargetProperty="Angle"
                                     From="0"
                                     To="360"
                                     Duration="0:0:12"
                                     RepeatBehavior="Forever"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Window.Triggers>
</Window>



//cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Media.Media3D;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApp113
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            CompositionTarget.Rendering += CompositionTarget_Rendering;
        }

        static TimeSpan lastRenderTime = new TimeSpan();
        private void CompositionTarget_Rendering(object sender, EventArgs e)
        {
            if (lastRenderTime == ((RenderingEventArgs)e).RenderingTime)
            {
                return;
            }
            lastRenderTime = ((RenderingEventArgs)e).RenderingTime;

            GeneralTransform3DTo2D transform = Cube.TransformToAncestor(myGrid);

            Point p = transform.Transform(new Point3D(-1, -1, -1));
            t_000.X = p.X;
            t_000.Y = p.Y;


            p = transform.Transform(new Point3D(-1, -1, 1));
            t_001.X = p.X;
            t_001.Y = p.Y;

            p = transform.Transform(new Point3D(-1, 1, -1));
            t_010.X = p.X;
            t_010.Y = p.Y;

            p = transform.Transform(new Point3D(-1, 1, 1));
            t_011.X = p.X;
            t_011.Y = p.Y;

            p = transform.Transform(new Point3D(1, -1, -1));
            t_100.X = p.X;
            t_100.Y = p.Y;

            p = transform.Transform(new Point3D(1, -1, 1));
            t_101.X = p.X;
            t_101.Y = p.Y;

            p = transform.Transform(new Point3D(1, 1, -1));
            t_110.X = p.X;
            t_110.Y = p.Y;

            p = transform.Transform(new Point3D(1, 1, 1));
            t_111.X = p.X;
            t_111.Y = p.Y;
        }
    }
}
复制代码

 

 

 

 

 

 

 

 

 

 

posted @   FredGrit  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
历史上的今天:
2022-12-29 cppconn cpp prepared statement insert into table
点击右上角即可分享
微信分享提示