(Обработка) GROUP PShape getWidth () или ширина 0,0 - PullRequest
2 голосов
/ 20 июня 2020

Я хочу получить ширину и высоту GROUP PShape, но получаю только 0,0.

Например:

// Example code from "https://processing.org/reference/PShape_addChild_.html"

PShape house;

void setup() {
  size(200, 200);

  // Make a group PShape
  house = createShape(GROUP);
  
  // Make three shapes
  PShape path = createShape();
  path.beginShape();
  path.vertex(-20, -20);
  path.vertex(0, -40);
  path.vertex(20, -20);
  path.endShape();
  PShape rectangle = createShape(RECT, -20, -20, 40, 40);
  PShape circle = createShape(ELLIPSE, 0, 0, 20, 20);
  
  // Add all three as children
  house.addChild(path);
  house.addChild(rectangle);
  house.addChild(circle);
  
  println(house.width, house.getWidth());
  println(house.height, house.getHeight());
}

void draw() {
  background(52);
  translate(mouseX, mouseY);
  shape(house);
}

В этом коде println(house.width, house.getWidth()); и println(house.height, house.getHeight()); show 0.0 0.0

Итак, как я могу получить ширину и высоту любого PShape?

Edit

Следуя совету @ Rabbid76, я создал функцию getBoundingBoxLimits ():

float[][] getBoundingBoxLimits(PShape s){
  float[][] coords = {{1000000.0, -1000000.0}, {1000000.0, -1000000.0}}; 
  // coords represents {{min_x, max_x}, {min_y, max_y}}
  float ii, jj;
  
  for(int i=0; i<1000; i++){
    for(int j=0; i<1000; j++){
      ii = i*1.0;
      jj = j*1.0;
      if(s.contains(ii,jj)){ // contains() expects floats, not ints
        if(ii < coords[0][0]) { coords[0][0] = ii; }
        if(ii > coords[0][1]) { coords[0][1] = ii; }
        if(jj < coords[1][0]) { coords[1][0] = jj; }
        if(jj > coords[1][1]) { coords[1][1] = jj; }         
       }
    }
  }

  return coords;
}

Но она возвращает IllegalArgumentException: The contains() method is only implemented for paths..

Итак, на первый взгляд кажется, что я не могу определить, находится ли точка (x, y) в какой-либо PShape, кроме PATH PShape.

В любом случае, я ожидаю более простого способа получения ширины и высоты любого PShape (поскольку я уверен, что эта информация хранится внутри любого из этих объектов).

...