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

Helix 3D Toolkit - object reference is required for the non-static field

我尝试使用打开的文件对话框加载 3d 模型 所以通过单击按钮,我可以 select 一个 .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;
    }

解决这个问题:

An object reference is required for the non-static field, method, or property 'ModelImporter.Load(string,Dispatcher,bool)'

我添加了这个:

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

任何人的想法,这里可能有什么问题?

问题是您尝试调用 ModelImporterLoad 方法。 ModelImporter 是一个 class,如果您尝试调用 class 的方法,那么您正在尝试 运行 一个 static 方法,即class级别的方法。但是,Load 是实例级别。

举个例子:

如果你有一个 Bird class,代表所有 Bird 对象,你调用 Bird.migrate() 这是所有 Bird 对象执行的方法.但是,如果你实例化Bird,你可能会调用fly。在我们的示例中,migrateBird 对象一起执行的方法,而 fly 是单独的操作。一个Bird对象可以fly,但是由于fly是一个实例级别的动作,它不能被所有的鸟执行。

要解决此问题,因为 Load 是实例级方法,您必须实例化 class:

ModelImporter import = new ModelImporter();  
device = import.Load(model);

在这里您创建了一个单独的 ModelImporter 实例,因此可以通过它访问 Load。如果一个方法是static,那么它是class级的,否则就是实例级的。