如何编写一个浏览文件按钮,让用户将他们自己的 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;
            }

        }