Helix 3D Toolkit - 非静态字段需要对象引用

时间:2018-05-21 20:08:23

标签: c# wpf non-static helix-3d-toolkit

我尝试使用打开的文件对话框加载3d模型 所以点击按钮我可以选择.obj文件并显示它:

Model3DGroup groupLoad  = HelixToolkit.Wpf.ModelImporter.Load("C:....");

    public static Model3DGroup Load(string path)
    {
        if (path == null)
        {
            return null;
        }

        Model3DGroup model = null;
        string ext = System.IO.Path.GetExtension(path).ToLower();
        switch (ext)
        {
            case ".3ds":
                {
                    var r = new HelixToolkit.Wpf.StudioReader();
                    model = r.Read(path);
                    break;
                }

            case ".lwo":
                {
                    var r = new HelixToolkit.Wpf.LwoReader();
                    model = r.Read(path);

                    break;
                }

            case ".obj":
                {
                    var r = new HelixToolkit.Wpf.ObjReader();
                    model = r.Read(path);
                    break;
                }

            case ".objz":
                {
                    var r = new HelixToolkit.Wpf.ObjReader();
                    model = r.ReadZ(path);
                    break;
                }

            case ".stl":
                {
                    var r = new HelixToolkit.Wpf.StLReader();
                    model = r.Read(path);
                    break;
                }

            case ".off":
                {
                    var r = new HelixToolkit.Wpf.OffReader();
                    model = r.Read(path);
                    break;
                }

            default:
                throw new InvalidOperationException("File format not supported.");
        }

        return model;
    }

要解决此问题:

  

非静态字段,方法或者需要对象引用   property' ModelImporter.Load(string,Dispatcher,bool)'

我添加了这个:

var importer = new HelixToolkit.Wpf.ModelImporter();
var groupLoad = importer.Load("C:....");

任何想法,这里可能出现什么问题?

1 个答案:

答案 0 :(得分:0)

问题是您尝试调用Load的{​​{1}}方法。 ModelImporterModelImporter,如果您尝试调用class的方法,那么您正在尝试运行class方法,即类的方法-水平。但是,static是实例级别。

让我举个例子:

如果您有Load Bird,则表示所有class个对象,并且您调用的Bird是所有Bird.migrate()个对象执行的方法。但是,如果您实例化Bird,则可以致电Bird。在我们的示例中,flymigrate个对象一起执行的方法,而Bird是一个单独的操作。 fly对象可以Bird,但由于fly是实例级操作,因此所有鸟都无法执行。{/ p>

要解决此问题,由于fly是实例级方法,因此您必须实例化Load

class

在这里,您可以创建一个单独的ModelImporter import = new ModelImporter(); device = import.Load(model); 实例,因此可以通过它访问ModelImporter。如果方法是Load,那么它是static - 级别,否则它是实例级别。