Как добавить цветовую полосу для пользовательских объектов в ILNumerics?

Я хочу использовать цветовую полосу с пользовательскими объектами. Объекты окрашиваются в соответствии с определенной цветовой картой. Я хочу показать эту палитру на цветовой шкале во время выполнения.

Я уже пытался добавить его в сцену:

        ILColorbar cb = new ILColorbar();
        scene.Add(cb);

или в куб:

        plotCube.Add(cb);

или даже plotCube.Children.Add(cb);

но это все еще не работает. Как правильно отобразить цветовую полосу для пользовательских объектов?

Вот мой код:

private void OKInputBodyListButton_Click(object sender, EventArgs e)
    {
        try
        {
            var sceneBody = new ILScene();
            var plotCubeBody = sceneBody.Add(new ILPlotCube(twoDMode: false));

            foreach (BlockBody item in ObjectList)
            {
                createBlockBody(item, sceneBody, plotCubeBody);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

private void createBlockBody(BlockBody BlockBody, ILScene scene, ILPlotCube plotCube)
    {
        var box = new ILTriangles("tri")
        {
            ...
            ...
        }

        plotCube.Add(box);
        var colormap = new ILColormap(Colormaps.Jet);
        Vector4 key1 = colormap.Map((float)BlockBody.Rho, new Tuple<float, float>(-1, 1));
        var test = key1.ToColor();
        box.Color = test;

        SliceilPanel.Scene = scene;
        SliceilPanel.Refresh();
    }

А это мои цифры: введите здесь описание изображения


person ehmind    schedule 03.07.2014    source источник


Ответы (1)


Для цветовой полосы нужны некоторые данные: используемая цветовая карта и верхний/нижний пределы для оси цветовой полосы. Обычно эта информация берется из соответствующего объекта графика (контурный график, график поверхности) в сцене во время выполнения. «Во время выполнения», потому что он должен иметь возможность реагировать на изменения этих объектов графика из-за интерактивности.

Если вы хотите использовать цветовые полосы для ваших пользовательских объектов, вы должны сами предоставить эти данные. ILColorbar предоставляет свойство ColormapProvider. Назначьте ему объект, который предоставляет информацию во время выполнения. Вы можете взять предопределенный ILNumerics.Drawing.Plotting.ILStaticColormapProvider или предоставить собственную реализацию интерфейса IILColormapProvider.

Это не работает с Community Edition от nuget!

private void ilPanel1_Load(object sender, EventArgs e) {

    // We need to provide colormap data to the colorbar at runtime. 
    // We simply take a static colormap provider here:
    var cmProv = new ILStaticColormapProvider(Colormaps.ILNumerics, 0f, 1f);
    // Position data for plotting
    ILArray<float> A = ILMath.tosingle(ILMath.rand(3, 1000));
    // create the points
    ilPanel1.Scene.Add(
        new ILPlotCube(twoDMode: false) {
            new ILPoints("myPoints") {
                Positions = A,
                // since we want to show a colorbar, we need to put the points colors under colormap control
                Colors = cmProv.Colormap.Map(A["1;:"]).T,
                // deactivate single color rendering
                Color = null
            },
            // add the colorbar (somewhere) and give it the colormap provider
            new ILColorbar() {
                ColormapProvider = cmProv
            }
        }); 
}

введите здесь описание изображения

person Haymo Kutschbach    schedule 03.07.2014
comment
Поскольку я использую Community Edition, я не могу попробовать это решение. Это единственное решение? Я просто хочу показать цветовую полосу с диапазоном от -1 до 1 (вместо 0 до 1 в вашем примере). Мои коробки уже окрашены значениями Rho. - person ehmind; 09.07.2014