helix3dtoolkit (sharpdx WPF): материал LineGeometryModel3D изменен, необходимо применить перемещение камеры - PullRequest
1 голос
/ 16 октября 2019

Я программирую средство просмотра 3d с Helixtoolkit sharpdx (WPF). По сути, я добавляю на сцену форму stl. На этой фигуре я добавляю некоторые контуры, сделанные из LineGeomtryModel3D. Во время выполнения, когда я выбираю модель из списка, я применяю новый цвет к контуру:

    private void UpdateColorModels()
    {
        //MAJ des couleurs en fonction du status
        try
        {
        //Surcharge du MainColor si selectionné
            if (IsSelected)
            {
                MainColor = System.Windows.Media.Colors.Yellow;
                Thickness = 2;
                DepthBias = -10000000;
            }

            //Application de la couleur aux éléments visuels
            SharpDX.Color newMainColor = new Color(MainColor.R, MainColor.G, MainColor.B, MainColor.A);

            if (m_Outlines != null)//m_Outlines is List<LineGeometry3DModel>
                foreach (var item in m_Outlines)
                {
                    item.Color = newMainColor;
                    item.DepthBias = DepthBias;
                    item.Thickness = Thickness;
                }
        }
        catch (SharpDXException sdxex)
        {
            Console.WriteLine("SharpDXException:" + sdxex.Message);
        }
    }

Выше вы можете увидеть упрощенный метод. Иногда это работает, а иногда не работает. Я имею в виду, что цвет иногда хорошо обновляется на зрителе, но иногда мне приходится перемещать камеру, чтобы обновить цвет ... Есть ли способ принудительного обновления без перемещения камеры?

Ответы [ 3 ]

0 голосов
/ 17 октября 2019

У меня обычно один LineModel на контур.
Я отображаю около 100 контуров одновременно, но это может быть и больше.
Когда я использую InvalidateRenderer (), он работает, когда я вызываю метод, например, для события mouseEnter(поэтому немного задерживается по сравнению с изменением цвета модели).
Когда я вызываю метод сразу после изменения цвета модели, он не имеет никакого эффекта, и проблемы с обновлением все еще существуют.
Есть идеи?

0 голосов
/ 28 октября 2019

Было бы много работы по созданию образца, потому что прошло уже много времени, как я создавал компонент.

Я тестирую новый подход. Я создал таймер в коде позади моего представления. Этот таймер запускается для событий ViewModel. Некоторое время он вызывает в цикле метод InvalidateRenderer (), затем останавливается. Например, он будет вызывать InvalidateRenderer 10 раз каждые 100 мс.

Как вы думаете, это правильный подход?

0 голосов
/ 16 октября 2019

Вы можете попробовать использовать метод invalidaterenderer. Сколько у вас линейных моделей?

...