在处理中,matplotlib中是否存在类似于zorder的属性?

时间:2012-02-29 19:23:25

标签: processing

我的处理程序中随机放置了许多圆圈。每个人都是这样开始的:

ellipse(x, y, radius, radius);

我想知道我是否能以某种方式为每个圆指定一个z-index值。较高z指数的圆圈显示较低z圆圈的圆圈。

2 个答案:

答案 0 :(得分:1)

我现在无法测试,但我相信您应该查看fill()方法。此函数中的第四个参数指定不透明度(AKA alpha透明度)。它在Processing.org/learning/color

中描述

编辑:此订单上的thread似乎与您的问题相同。建议使用图像透明度,但似乎更好的答案是使用Processing Layar Library。以下是some examples - 第一个似乎与您的问题一致。

引用图层示例的Advanced部分:

  

动态添加,删除或重新排序图层

     

可以在a期间动态添加,删除或重新排序图层   草图的执行,但这样做时应该非常小心。该   可以操纵由AppletLayers对象管理的图层列表   通过获取ListIterator对象。列表如何的语义   应该通过阅读来仔细研究通过迭代器操纵   Javadoc for java.util.ListIterator。难以理解的原因   在草图执行期间操纵列表是因为列表   正在迭代图层以呈现它们。最好的   操纵图层列表的位置在主草图的绘图中()   方法而不是图层的draw()方法或鼠标或键盘   事件处理。

答案 1 :(得分:1)

另一种选择是使用数组或列表跟踪您的省略号,因此您有两个步骤:

  1. 创建一个基本类来跟踪您的专用椭圆属性(x,y,w,h,还有zIndex和对象将保存的任何额外数据)
  2. 创建一个数组/ arraylist,可以根据zIndex进行排序。
  3. 以下是使用键入的ArrayList

    的示例
    ArrayList<Ellipse> ellipses = new ArrayList<Ellipse>();
    
    void setup(){
      size(400,400,P2D);
      smooth();
      fill(192,0,0,192);
      reset();
    }
    void reset(){
      ellipses.clear();
      for(int i = 0 ; i < 40; i++){
        float radius = random(5,25);
        Ellipse e = new Ellipse(i*10,random(20,380),radius,radius,i);
        ellipses.add(i,e);
      }
    }
    void draw(){
      background(255);
      for(Ellipse e : ellipses) e.draw();
    }
    void keyPressed(){
      reset();
    }
    class Ellipse{
      float x,y,w,h;
      int zIndex;
      Ellipse(float ax,float ay,float aw,float ah,int az){
        x = ax;
        y = ay;
        w = aw;
        h = ah;
        zIndex = az;
      }
      void draw(){
        ellipse(x,y,w,h);
      }
    }
    

    请注意,ArrayLists非常灵活,您可以轻松地在您需要的索引处添加元素。

    如果要使用数组,则需要确保可以根据所选属性对数组进行排序,因此需要实现Comparable interface

    int numEllipses = 40;
    Ellipse[] ellipses = new Ellipse[numEllipses];//this will store original/unsorted data
    Ellipse[] ellipsesSorted = new Ellipse[numEllipses];//this will store the sorted data
    
    void setup(){
      size(400,400,P2D);
      smooth();
      fill(192,0,0,192);
      reset();
    }
    void reset(){
      for(int i = 0 ; i < numEllipses; i++){
        float radius = random(5,25);
        int index = (int)random(0,numEllipses);
        Ellipse e = new Ellipse(i*10,random(20,380),radius,radius,index);
        ellipses[i] = e;
      }
      //copy original data into an array to be sorted
      arrayCopy(ellipses, ellipsesSorted);
      //sort the array - uses the compareTo method behind the scenes
      Arrays.sort(ellipsesSorted);
    }
    void draw(){
      background(255);
      for(Ellipse e : ellipsesSorted) e.draw();
    }
    void keyPressed(){
      reset();
    }
    class Ellipse implements Comparable<Ellipse>{
      float x,y,w,h;
      int zIndex;
      Ellipse(float ax,float ay,float aw,float ah,int az){
        x = ax;
        y = ay;
        w = aw;
        h = ah;
        zIndex = az;
      }
      void draw(){
        ellipse(x,y,w,h);
      }
      int compareTo(Ellipse e)
      {
        if(e.zIndex > this.zIndex) return 1;
        else if(e.zIndex < this.zIndex) return -1;
        else return 0;
      }
      String toString(){
        return "z index: "+zIndex;
      }
    }