Einblick in die generative Gestaltung mit «Processing»

Sechs Kursabende à vier Stunden an der EB Zürich

Kurskonzeption und Leitung Hanna Züllig


< back

						//____Visualisierung von Text____




PFont font;

// intiale Text-Liste
String [] unfilteredTextList;

// ungefilterte Word-Liste mit Einträgen vom Typ String
String [] unfilteredWordList;

// gefilterte Word-Liste, ohne Definition des Datentyps und der Grösse
ArrayList filteredWordList = new ArrayList();

PVector dotList[];
int dotAmount = 200;
float maxDistance = 500;
float minDistance = 30;




//____Setup____

void setup() {
  size(800, 800);
  smooth();
  font = createFont("Franklin Gothic Demi Cond", 24);  

  // Arbeitsschritte
  loadText();
  prepareText();
  analyzeText();

  noLoop();

}




//____Text einlesen____

void loadText()
{
  // Dateiname
  String url =  "sketches/kurstag07/Nadja/data/sampleText.txt";

  // Befehl zum Laden der Text-Datei und Befüllen der initialen Liste
  unfilteredTextList = loadStrings( url );
}




//____Text aufbereiten____

void prepareText()
{
  // den Text zu einem String zusammenfassen
  String joinedText = join(unfilteredTextList, " ");

  // Definition der Trennzeichen
  String delimiters = ", .?!;:/{}";

  // Teilen des gesamten joinedText in einzelne Wörter
  unfilteredWordList = splitTokens(joinedText, delimiters);
}




//____Text analysieren____

void analyzeText() {

  int count = 0;
  int maxCount = unfilteredWordList.length;

  // Ein Wort aus der Liste mit den anderen Wörtern vergleichen
  while(count < maxCount)
  {
    
    // aktuelles Wort aus der Liste
    String currentWord = unfilteredWordList[count];
  
    int count2 = 0;
    int wordCount = 0;

    // Vergleichen der Wörter
    while(count2 < maxCount)
    {
      
      // aktuelles Vergleichswort
      String wordInList = unfilteredWordList[count2];

      // println( "currentWord: " + currentWord + " wordInList: " + wordInList );
      
      // Vergleich
      if(currentWord.equals(wordInList))
      {
        wordCount++;
      }

      count2++;  
    }

    // Wort in der Liste ablegen, soweit es noch moeglich ist
    addWordToFilteredList(currentWord, wordCount);

    count++;
  }
}




//____Gefundenes Wort und dessen Häufigkeit im Datencontainer WordElement festhalten____

void addWordToFilteredList(String word, int wordCount) {
  
  // neue Instanz von WordElement erstellen
  WordElement newElement = new WordElement();
  
  // Zuweisung der Daten
  newElement.wordCount = wordCount;
  newElement.title = word.toLowerCase();

  int count = 0;
  int amount = filteredWordList.size();

  boolean foundInList = false;
  
  // Überpruefung, ob es ein neues Element ist
  while(count < amount)
  {
    // Element aus Liste auslesen, Typ muss angegeben werden
    WordElement newElementInList = (WordElement) filteredWordList.get(count); 

    // Überpruefung, ob das Element bereits in der Liste ist
    if(newElementInList.title.equals(newElement.title))
    {
      foundInList = true; 
    }

    count++; 
  }

  // wenn es ein neues Element ist, in Liste einfuegen
  if(foundInList == false)
  {
    filteredWordList.add(newElement); 
  }
}




//____Eigentliches Zeichnen____

void draw() {
  background(255);
  smooth();
  visualizeText();
}


//____Text visualisieren____

void visualizeText()
{

  int count = 0;
  int amount = filteredWordList.size();

  while(count < amount) {
    
    // Element aus Liste lesen, Typ muss angegeben werden
    WordElement newElementInList = (WordElement) filteredWordList.get(count); 

    // Titel des Elements
    String title = newElementInList.title;

    // Anzahl des Elements
    String wordCount = str(newElementInList.wordCount);
    
    // Schriftgröße auf Basis der Häufigkeit des newElements
    textFont( font, newElementInList.wordCount * 5 );
    
    int circleSize = newElementInList.wordCount * 8;
    int nextAlpha = 255/10; 
    
    fill(255, 200, 0, nextAlpha*6);
    strokeWeight(1.5);
    stroke(255, 200, 0, nextAlpha*9);
    ellipse(random(width), random(height), circleSize, circleSize);
    
    // Text anzeigen
    fill(255, 200, 0, nextAlpha*8);
    text(title, random(width)+20, random(height)+10);
    
    count++;

  }
  
  
}


//____Datencontainer WordElement____

//Name der Classe
class WordElement
{
  int wordCount;
  String title;
  
  // Konstruktor
  WordElement()
  {
    
  }
  
}