繁体   English   中英

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

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

我尝试使用打开的文件对话框加载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;
    }

要解决此问题:

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

我添加了这个:

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

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

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

让我给你举个例子:

如果您有一个Bird class ,它表示所有Bird对象,则调用Bird.migrate() ,这是所有Bird对象执行的方法。 但是,如果实例化Bird ,则可以调用fly 在我们的示例中, migrateBird对象一起执行的一种方法,而fly是单独的动作。 Bird对象可以fly ,但是由于fly是实例级操作,因此无法由所有Bird执行。

为了解决这个问题,由于Load是一个实例级方法,因此您必须实例化class

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM