我目前正在嘗試在我的 WPF 應用程式中集成一個 STL 檔案查看器。我一直在使用 HelixToolKit 來執行此操作,目前可以在顯示幕中顯示 STL/OBJ/3D 檔案,但是,STL 代碼的位置在 CS 檔案中是硬編碼的。這是我的代碼
private const string MODEL_PATH = @"C:\FILE LOCATION ON DISK";
public MainWindow()
{
InitializeComponent();
ModelVisual3D device3D = new ModelVisual3D();
device3D.Content = Display3d(MODEL_PATH);
viewPort3d.Children.Add(device3D);
}
private Model3D Display3d(string model)
{
Model3D device = null;
try
{
//Adding a gesture here
viewPort3d.RotateGesture = new MouseGesture(MouseAction.LeftClick);
//Import 3D model file
ModelImporter import = new ModelImporter();
//Load the 3D model file
device = import.Load(model);
}
catch (Exception e)
{
// Handle exception in case can not file 3D model
MessageBox.Show("Exception Error : " e.StackTrace);
}
return device;
}
我希望用戶能夠將自己的 STL 檔案匯入查看器并查看它們。我嘗試實作一個瀏覽按鈕并將其編碼為
public void btnBrowse_Click(object sender, RoutedEventArgs e)
{
// Create OpenFileDialog
OpenFileDialog dlg = new OpenFileDialog();
// Set filter for file extension and default file extension
dlg.DefaultExt = ".stl";
dlg.Filter = "3D Objects (.stl)|*.stl";
// Display OpenFileDialog by calling ShowDialog method
Nullable<bool> result = dlg.ShowDialog();
if (result == true)
{
string filename = dlg.FileName;
}
}
但我不知道如何使用此按鈕處理 MODEL_PATH。任何幫助將不勝感激。
問候 KillerSwitch
uj5u.com熱心網友回復:
所以我想出了怎么做。以下是它如何在未來幫助其他任何人。
private Model3D Display3d(string model)
{
Model3D device = null;
try
{
//Adding a gesture here
viewPort3d.RotateGesture = new MouseGesture(MouseAction.LeftClick);
//Import 3D model file
ModelImporter import = new ModelImporter();
//Load the 3D model file
device = import.Load(model);
}
catch (Exception e)
{
// Handle exception in case can not file 3D model
MessageBox.Show("Exception Error : " e.StackTrace);
}
return device;
}
public void btnBrowse_Click(object sender, RoutedEventArgs e)
{
string fileName;
var myDialog = new OpenFileDialog();
try
{
myDialog.Filter = "SE Model File|*.par;*.psm;*.asm;*.stl;*.obj";
if ((bool)myDialog.ShowDialog())
{
Mouse.OverrideCursor = Cursors.Wait;
fileName = myDialog.FileName;
Model3D newModel3D;
var newMOdelImporter = new ModelImporter();
var fileInf = new FileInfo(fileName);
string extn = fileInf.Extension;
if (extn == ".stl" | extn == ".STL")
{
newModel3D = newMOdelImporter.Load(fileName);
}
else
{
}
// Now launch the model in Viewport.
var device3D = new ModelVisual3D();
var lights = new DefaultLights();
device3D.Content = Display3d(fileName);
this.viewPort3d.RotateGesture = new MouseGesture(MouseAction.LeftClick);
this.viewPort3d.Children.Clear();
this.viewPort3d.Children.Add(device3D);
this.viewPort3d.Children.Add(lights);
this.viewPort3d.ShowCoordinateSystem = true;
this.viewPort3d.ZoomAroundMouseDownPoint = true;
this.viewPort3d.ZoomExtentsWhenLoaded = true;
this.viewPort3d.ResetCamera();
this.viewPort3d.Title = "SE File : " fileName;
// viewPort3d.ShowTriangleCountInfo = True
Mouse.OverrideCursor = Cursors.Arrow;
}
}
catch (Exception ex)
{
Mouse.OverrideCursor = Cursors.Arrow;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/472172.html
