ILNumerics PlotCube中多个表面的相同颜色条

时间:2014-01-14 07:11:46

标签: c# winforms ilnumerics

我在一个绘图立方体中绘制多个曲面。但我不能让他们拥有相同的颜色条。我已经定义了一个ILColorbar并将它们添加到曲面,但它绘制了两个不同数字的颜色条。两个表面是否可以具有相同的颜色条?此外,如何在彩条(标题,标签)中添加文字?非常感谢你。这是一个例子:

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

enter image description here

1 个答案:

答案 0 :(得分:2)

让他们使用相同的DataRange。我在曲面上使用UpdateColormapped()来提供相同的Tuple<float,float>。这告诉他们使用colormap中的哪些颜色。由于某些原因,我无法使用相应的ILSurface构造函数。这可能是个错误? (在这种情况下,有人应该提出问题吗?)

颜色栏的修改方式与任何其他对象一样:您可以按常规方式添加新的形状/标签。使用Padding属性,为标签腾出更多空间:

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

torus with plot cube and custom data range

您可能已经意识到,您根本不必使用情节立方体?如果我们在scene.Camera下方添加圆环,我们会得到一个没有扭曲的圆环:

Torus with no distortion