Я хочу получить ширину и высоту 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 (поскольку я уверен, что эта информация хранится внутри любого из этих объектов).