Same color bar for multiple surfaces in ILNumerics PlotCube

…衆ロ難τιáo~ 提交于 2019-12-11 05:08:37

问题


I plot multiple surfaces in one plot cube. But I cannot make them to have the same color bar. I have defined an ILColorbar and added them to the surfaces but it plots two color bars with different numbers. Is it possible for the both surfaces to have the same color bar? Moreover, how can I add text to the color bar (title, labels)? Thank you very much. Here is an example:

    private void ilPanel1_Load(object sender, EventArgs e)
    {
        var scene = new ILScene();
        // add a new plot cube 
        var pc = scene.Add(new ILPlotCube());
        pc.TwoDMode = false;
        // Create Data
        ILArray<float> A = ILSpecialData.torus(0.75f, .25f);
        ILArray<float> B = ILSpecialData.torus(3.0f, .65f);
        // Add the surface
        var sf1 = new ILSurface(A);
        var sf2 = new ILSurface(B);

        pc.Add(sf1);
        pc.Add(sf2);
        sf1.Colormap = Colormaps.Jet;
        sf2.Colormap = Colormaps.Jet;

        var cb = new ILColorbar();
        sf1.Add(cb);
        sf2.Add(cb);
        ilPanel1.Scene = scene;
    }


回答1:


Make them use the same DataRange. I use UpdateColormapped() on the surfaces to provide the same Tuple<float,float>. This tells them which colors from the colormap to use. For some reasons I could not use the corresponding ILSurface constructor. This might be a bug? (Someone should file an issue in that case ?)

The colorbar is modified just like any other object: you can add new shapes / labels to it the regular way. Use the Padding property, in order to make more room for your labels:

private void ilPanel1_Load(object sender, EventArgs e) {
    var scene = new ILScene();
    // add a new plot cube 
    var pc = scene.Add(new ILPlotCube(twoDMode:false));

    // Create Data
    ILArray<float> A = ILSpecialData.torus(0.75f, .25f);
    ILArray<float> B = ILSpecialData.torus(3.0f, .65f);
    // Add the surfaces
    var cdr = Tuple.Create<float,float>(-0.6f, 0.6f);  
    var sf1 = new ILSurface(0);
    var sf2 = new ILSurface(0);
    // provide the same datarange to both surfaces
    sf1.UpdateColormapped(A, dataRange: cdr);
    sf2.UpdateColormapped(B, dataRange: cdr);

    pc.Add(sf1);
    pc.Add(sf2);
    sf1.Colormap = Colormaps.Jet;
    sf2.Colormap = Colormaps.Jet;

    var cb = new ILColorbar() {
        Padding = new SizeF(10,30),
        Children = {
            new ILLabel("Title") {
                Position = new Vector3(.5f,.1f,0),
                Anchor = new PointF(.5f,.7f),
                Font = new Font(DefaultFont, FontStyle.Bold)
            },
            new ILLabel("Label") {
                Position = new Vector3(.12f,.5f,0),
                Rotation = -Math.PI / 2,
            }
        }
    };
    sf1.Add(cb);
    ilPanel1.Scene = scene;
}

You probably are aware of the fact, that you do not have to use a plot cube at all? If we add the torus right below scene.Camera we get a torus without distortion:



来源:https://stackoverflow.com/questions/21107818/same-color-bar-for-multiple-surfaces-in-ilnumerics-plotcube

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!