1

カスタム オブジェクトでカラーバーを使用したいと考えています。オブジェクトは、特定のカラーマップに従って色付けされます。実行時にこのカラーマップをカラーバーに表示したいと思います。

私はすでにそれをシーンに追加しようとしました:

        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();
    }

そして、これは私の数字です: ここに画像の説明を入力

4

1 に答える 1

0

カラーバーには、使用されるカラーマップとカラーバー軸の上限/下限というデータが必要です。通常、実行時にシーン内の対応するプロット オブジェクト (等高線図、表面図) からこれらの情報を取得します。'実行時' は、対話性によるこれらのプロット オブジェクトへの変更に対応できる必要があるためです。

カスタム オブジェクトにカラーバーを使用する場合は、それらのデータを自分で提供する必要があります。ILColorbar は ColormapProvider プロパティを提供します。実行時に情報を提供するオブジェクトを割り当てます。ILNumerics.Drawing.Plotting.ILStaticColormapProvider「IILColormapProvider」インターフェイスの定義済みのものを使用するか、独自の実装を提供できます。

これは、nuget の Community Editionでは機能しません。

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
            }
        }); 
}

ここに画像の説明を入力

于 2014-07-03T09:48:07.643 に答える