Yeah, something like this.
Edit: I now saw you wrote ‘curveVertex’, that would be the third one.
I modified the code, but nr 3 isn’t of course what you want.
import geomerative.*;
RFont f;
RShape grp;
RShape grp2;
RPoint[] pts;
RPoint[][] pointPaths;
void setup() {
size(900, 900);
RG.init(this);
grp2 = RG.getText("Belli", "FreeSans.ttf", 200, CENTER);
grp = RG.getText("Belli", "FreeSans.ttf", 200, CENTER);
}
void draw() {
background(255);
strokeWeight(2);
RG.setPolygonizer(RG.UNIFORMLENGTH);
pts = grp.getPoints();
pointPaths = grp.getPointsInPaths();
translate(300, 160);
fill(0, 0, 0);
noStroke();
for (int i = 0; i< pts.length; i++) {
fill(0);
ellipse(pts[i].x, pts[i].y, 2, 2);
}
translate(0, 200);
beginShape(POINTS);
stroke(0);
for (int i = 0; i< pts.length; i++) {
vertex(pts[i].x + sin(frameCount*0.05 + pts[i].y*0.1)*5, pts[i].y);
}
endShape();
translate(0, 200);
noStroke();
fill(255, 0, 0);
grp.draw();
noFill();
stroke(0);
for (int i = pointPaths.length-1; i >= 0; i--) {
if (pointPaths[i] != null) {
beginShape();
for (int j = pointPaths[i].length-1; j >= 0; j --) {
curveVertex(pointPaths[i][j].x + sin(frameCount*0.05 + pointPaths[i][j].y*0.1)*5, pointPaths[i][j].y);
}
endShape(CLOSE);
}
}
translate(0, 200);
noStroke();
fill(255, 0, 0);
grp.draw();
stroke(0);
for (int i =0; i< pts.length; i++) {
line(pts[i].x, pts[i].y, pts[i].x + random(-15, 15), pts[i].y + random(-15, 15));
}
}