WPF Viewport3D ModelVisual3D ModelUIElement3D GeometryModel3D

复制代码
//xaml
<Window x:Class="WpfApp109.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:WpfApp109"
        WindowState="Maximized"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Viewport3D>
            <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  
                                  MouseLeftButtonDown="ModelUIElement3D_MouseLeftButtonDown"
                                  MouseRightButtonDown="ModelUIElement3D_MouseRightButtonDown" >
                    <ModelUIElement3D.Model>
                        <GeometryModel3D>
                            <GeometryModel3D.Material>
                                <DiffuseMaterial>
                                    <DiffuseMaterial.Brush>
                                        <SolidColorBrush Color="Purple" x:Name="cubeBrush"/>
                                    </DiffuseMaterial.Brush>
                                </DiffuseMaterial>
                            </GeometryModel3D.Material>
                            <GeometryModel3D.Geometry>
                                <MeshGeometry3D
                                    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>



//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.Navigation;
using System.Windows.Shapes;

namespace WpfApp109
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        static Random rnd;
        List<Color> colorsList { get; set; }
        int colorsCount { get; set; }
        int colorIdx = 0;
        public MainWindow()
        {
            InitializeComponent();
            rnd = new Random();

            colorsList = new List<Color>();
            var pis = typeof(Colors).GetProperties();
            if (pis != null && pis.Any())
            {
                int pisCount = pis.Count();
                for (int i = 0; i < pisCount; i++)
                {
                    Color cr = (Color)pis[i].GetValue(typeof(Colors));
                    colorsList.Add(cr);
                }
                colorsCount = colorsList.Count;
            }
            this.Title = colorIdx.ToString();
        }

        private void ModelUIElement3D_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (colorIdx >= colorsCount)
            {
                colorIdx = 0;
            }
            this.Title = colorIdx.ToString();
            cubeBrush.Color = colorsList[colorIdx++];
            //cubeBrush.Color=Color.FromRgb((byte)rnd.Next(),(byte)rnd.Next(), (byte)rnd.Next());
        }

        private void ModelUIElement3D_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (--colorIdx < 0)
            {
                colorIdx = colorsCount - 1;
            }            
            cubeBrush.Color = colorsList[colorIdx];
            this.Title = colorIdx.ToString();
        }

        private void ModelUIElement3D_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (colorIdx >= colorsCount)
            {
                colorIdx = 0;
            }
            this.Title = colorIdx.ToString();
            cubeBrush.Color = colorsList[colorIdx++];
        }
    }
}
复制代码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   FredGrit  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2022-12-29 cppconn cpp prepared statement insert into table
点击右上角即可分享
微信分享提示