前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WPF实现3D模型的导入、平移、模型命名和点击事件

WPF实现3D模型的导入、平移、模型命名和点击事件

作者头像
用户9094469
发布2024-08-13 19:00:29
640
发布2024-08-13 19:00:29
举报
文章被收录于专栏:Dotnet Dancer

做一个简单的WPF导入3D模型并平移、更改模型颜色和设置模型名称、点击事件的例子。

新建一个WPF项目,此处.NET环境我用的.NET 8,使用其他环境也可以。

我在blender上面创建一个模型

改个造型

导出STL,命名为model1

再创建一个基础模型

继续导出STL文件,命名为model2

导出的模型,复制到WPF项目的代码目录下,修改属性

引用包HelixToolkit.Core.Wpf

xaml内引入helixtoolkit的命名空间

引入HelixViewport3D,并设置一些基础配置,例如视角、相机高度、光源等等。

启动程序,可以看到当前的页面发生改变,有了3D表示,右键按住可以旋转(可以自定义左键或右键)

窗体加载事件添加导入模型和对其中一个模型进行平移,以及变更颜色

代码语言:javascript
复制
var path = AppDomain.CurrentDomain.BaseDirectory;
string file1 = $"{path}\\model1.stl";
string file2 = $"{path}\\model2.stl";
 ModelImporter importer = new ModelImporter();
 Model3DGroup group1 = new Model3DGroup();
 Model3DGroup group2 = new Model3DGroup();
var model1 = new ModelVisual3D();
var model2 = new ModelVisual3D();
var mg1 = importer.Load(file1);
var mg2 = importer.Load(file2);


var material = new DiffuseMaterial(new SolidColorBrush(Colors.Red));
foreach (var child in mg1.Children)
 {
if (child is GeometryModel3D geometryModel)
     {
         geometryModel.Material = material;
         geometryModel.BackMaterial = material;
     }
 }

var material2 = new DiffuseMaterial(new SolidColorBrush(Colors.Blue));
foreach (var child in mg2.Children)
 {
if (child is GeometryModel3D geometryModel)
     {
         geometryModel.Material = material2;
         geometryModel.BackMaterial = material2;
     }
 }
var rotateTransform = new RotateTransform3D();
var transformGroup = new Transform3DGroup();
var translateTransform = new TranslateTransform3D(2, 2, 2);

 transformGroup.Children.Add(rotateTransform);  
 transformGroup.Children.Add(translateTransform); 
 model1.Transform = transformGroup;

 group1.Children.Add(mg1.Children[0]);
 group2.Children.Add(mg2.Children[0]);


 model1.Content = group1;
 model2.Content = group2;

 myView.Children.Add(model1);
 myView.Children.Add(model2);
代码语言:javascript
复制

启动程序,可以看到模型被加载出来了,并且变更了咱指定的颜色,model1红色,model2蓝色

对模型设置名字,分别为model1和model2,再对HelixViewPort3D控件提供一个鼠标点击事件,事件实现点击模型,弹出当前点击的模型名称

点击蓝色小球,提示当前模型名称model2

还可以继续做更多拓展,例如动画、画布平移、单个模型的旋转、鼠标拖动模型跟随、模型复制、模型大小变换等等。这部分都可以在模型对象的Transform属性大家庭里面做出实现,此处就不继续列举了。感兴趣的大佬们可以自行深入研究。

如果需要以上演示的源码和模型,可以在我的公众号 【Dotnet Dancer】 后台 回复 wpf3d 即可获得下载地址。

祝君好运!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Dotnet Dancer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档