如何编写一个浏览文件按钮,让用户将他们自己的 STL 文件上传到 STL 查看器中?
How do I code a browse file button that lets the user upload their own STL file into a STL viewer?
我目前正在尝试将 STL 文件查看器集成到我的 WPF 应用程序中。我一直在使用 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。任何帮助将不胜感激。
问候
杀手开关
所以我想出了怎么做。以下是它如何帮助将来的其他人。
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;
}
}
我目前正在尝试将 STL 文件查看器集成到我的 WPF 应用程序中。我一直在使用 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。任何帮助将不胜感激。
问候 杀手开关
所以我想出了怎么做。以下是它如何帮助将来的其他人。
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;
}
}