We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Dear all,
I am working on a sound/mouse(by now) reacting typography using the Geomerative library. I managed to use the library to draw a multiple lines text using bezier lines, but now I don't manage to deform it with an attraction function. I managed before to make a class in order to edit the text/Geomerative part,not now. I'd be glad if someone can help me with this issue please ?! Thanks a lot in advance. Best,L
import geomerative.*;
RGroup myGroup;
RFont font;
RShape shape;
Write words;
RPoint[] myPoints;
float force_radious = 80;
float maxForce = 5;
ArrayList<Attractor>attractors = new ArrayList<Attractor>();
String [] myText = {"Leben ohne musik ist", "einfach ein fehler,"};
final color textColor = color(0, 200);
//----------------SETUP---------------------------------
void setup() {
size(1920, 1080, JAVA2D);
smooth();
RG.init(this);
font = new RFont("FreeSans.ttf", 180, CENTER);
for (int i=0; i< myText.length; i++) {
words = new Write(myText[i]);
RGroup myGroup = font.toGroup(myText[i]);
myGroup = myGroup.toPolygonGroup();
myPoints = myGroup.getPoints();
}
for (int j=0; j< myPoints.length; j++) {
RPoint rp = myPoints[j];
Attractor a= new Attractor(rp.x, rp.y);
attractors.add(a);
}
}
//----------------DRAW---------------------------------
void draw() {
background(255);
translate(width/2, height/1.2);
for (int j=0; j< myText.length; j++) {
words = new Write(myText[j]);
}
for (Attractor a : attractors) {
a.attract();
}
}
//////////////////////////////////////////////
class Attractor {
PVector pos;
Attractor(float x, float y) {
pos = new PVector(x, y);
}
void attract() {
PVector mouse = new PVector (mouseX-width/2, mouseY-height/1.2);
float d= PVector.dist(pos, mouse);
if (d < force_radious) {
PVector desired = PVector.sub(pos, mouse);
desired.normalize();
desired.mult(map(d, 0, force_radious, maxForce, 0));
pos.add(desired);
}
}
}
//////////////////////////////////////////////
import ddf.minim.*;
class Write {
String words;
Write(String _words) {
words= _words;
for (int i=0; i<myText.length; i++) {
RGroup myGroup = font.toGroup(myText[i]);
RPoint[] myPoints = myGroup.getPoints();
for (int j=0; j<myPoints.length; j++) {
float x = myPoints[j].x;
float y = myPoints [j].y;
pushMatrix();
translate(myPoints[j].x, myPoints[j].y-350+i*200);
beginShape();
noFill();
stroke(textColor);
strokeWeight(0.05);
float angle = TWO_PI;
angle= angle*10;
rotate(j/angle);
//bezier(-10*(noise(20)), 30, -10*(noise(10)), 20, -20*noise(20), -20, 10, -10);
bezier(-10*(noise(20))+mouseX/15, 30+mouseY/10, -10*(noise(10))+mouseX/15, 20+mouseY/15, -20*noise(20)+mouseX/15, -20+mouseY/5, 10+mouseX/15, -10+mouseY/15);
endShape();
popMatrix();
}
}
}
}
Answers
@koogs please close. Duplicated post. COntinue here: https://forum.processing.org/two/discussion/27732/issue-with-sound-reacting-typography-using-geomerative#latest
Kf