Helix 3D Toolkit - ссылка на объект обязательна для нестатического поля - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь загрузить 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:....");

Есть идеи, что тут может быть не так?

1 Ответ

0 голосов
/ 21 мая 2018

Проблема в том, что вы пытаетесь вызвать Load метод ModelImporter.ModelImporter - это class, и если вы пытаетесь вызвать метод class, то вы пытаетесь запустить метод static, то есть метод уровня класса.Однако Load - это уровень экземпляра.

Позвольте мне привести пример:

Если у вас есть Bird class, который представляет все Bird объекты и вы вызываете Bird.migrate() это метод, выполняемый всеми Bird объектами.Однако, если вы создаете экземпляр Bird, вы можете позвонить fly.В нашем примере migrate - это метод, который объекты Bird делают вместе, а fly - это отдельное действие.Bird объект может fly, но, поскольку fly является действием уровня экземпляра, оно не может быть выполнено всеми птицами.

Чтобы устранить эту проблему, поскольку Load является экземпляром-Метод уровня, вам нужно будет создать экземпляр class:

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

Здесь вы создадите отдельный экземпляр ModelImporter и, таким образом, Load будет доступен через него.Если метод static, то это class -уровень, в противном случае это уровень экземпляра.

...