I advise you to go see this post though:
The solution given by @TfGuy44 is good but the current implementation of the rect()
function does not provide expected results.
In the post above, I propose this solution instead:
float f = 0.552284749831;
void setup() {
size(500, 500);
background(20);
noFill();
stroke(200);
strokeWeight(1);
myRect(100, 100, 200, 100, 50, 50, 50, 50);
}
void myRect(float x1, float y1, float lx, float ly, float tl, float tr, float br, float bl) {
float x2 = x1 + lx;
float y2 = y1 + ly;
beginShape();
if (tr != 0) {
vertex(x2 - tr, y1);
bezierVertex(x2 - tr + f * tr, y1, x2, y1 + tr - f * tr, x2, y1 + tr);
} else {
vertex(x2, y1);
}
if (br != 0) {
vertex(x2, y2-br);
bezierVertex(x2, y2 - br + f * br, x2 - br + f * br, y2, x2 - br, y2);
} else {
vertex(x2, y2);
}
if (bl != 0) {
vertex(x1+bl, y2);
bezierVertex(x1 + bl - f * bl, y2, x1, y2 - bl + f * bl, x1, y2 - bl);
} else {
vertex(x1, y2);
}
if (tl != 0) {
vertex(x1, y1+tl);
bezierVertex(x1, y1 + tl - f * tl, x1 + tl - f * tl, y1, x1 + tl, y1);
} else {
vertex(x1, y1);
}
endShape(CLOSE);
}