簡體   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