當前位置: 妍妍網 > 碼農

WPF實作3D模型的匯入、平移、模型命名和點選事件

2024-05-09碼農

做一個簡單的WPF匯入3D模型並平移、更改模型顏色和設定模型名稱、點選事件的例子。

新建一個WPF計畫,此處.NET環境我用的.NET 8,使用其他環境也可以。

我在blender上面建立一個模型

改個造型

匯出STL,命名為model1

再建立一個基礎模型

繼續匯出STL檔,命名為model2

匯出的模型,復制到WPF計畫的程式碼目錄下,修改內容

參照包HelixToolkit.Core.Wpf

xaml內引入helixtoolkit的名稱空間

引入HelixViewport3D,並設定一些基礎配置,例如視角、相機高度、光源等等。

啟動程式,可以看到當前的頁面發生改變,有了3D表示,右鍵按住可以旋轉(可以自訂左鍵或右鍵)

表單載入事件添加匯入模型和對其中一個模型進行平移,以及變更顏色

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);

啟動程式,可以看到模型被載入出來了,並且變更了咱指定的顏色,model1紅色,model2藍色

對模型設定名字,分別為model1和model2,再對HelixViewPort3D控制項提供一個滑鼠點選事件,事件實作點選模型,彈出當前點選的模型名稱

點選藍色小球,提示當前模型名稱model2

還可以繼續做更多拓展,例如動畫、畫布平移、單個模型的旋轉、滑鼠拖動模型跟隨、模型復制、模型大小變換等等。這部份都可以在模型物件的Transform內容大家庭裏面做出實作,此處就不繼續列舉了。感興趣的大佬們可以自行深入研究。

如果需要以上演示的源碼和模型,可以在我的公眾號 【Dotnet Dancer】 後台 回復 wpf3d 即可獲得下載地址。

祝君好運!