WEAVE beta – Processing: Farbpaletten

Für Karsten Schmidt ist Code das Designtool seiner Wahl. Unter http://toxiclibs.googlecode.com veröffentlich er regelmäßig Code-Bausteine. Hier der Code für das Processing-Demo ColorTheme:

  1.  
  2. import toxi.color.*;
  3. import toxi.geom.*;
  4. import toxi.math.*;
  5. import toxi.util.datatypes.*;
  6.  
  7. import processing.pdf.*;
  8.  
  9. // parameter fuer die Darstellung der Ellipsen & Kurve
  10. float   XRAD = 300;
  11. float   YRAD = 500;
  12. int     RES = 6;
  13. int     NUM_POINTS=6;
  14.  
  15. void setup() {
  16. size(1024, 768);
  17. smooth();
  18. noLoop();
  19. }
  20.  
  21. void draw() {
  22. // Ersteinmal ein neues Farbthema definieren…
  23. ColorTheme t = new ColorTheme("test");
  24. // und verschiedene Farben (mit Bias/Gewicht) hinzufuegen
  25. // die Liste der bekannten Farben ist hier:
  26. // http://dev.postspectacular.com/docs/colorutils/toxi/color/NamedColor.html
  27. t.addRange("fresh ivory", 0.5);
  28. t.addRange("intense goldenrod", 0.25);
  29. t.addRange("intense red", 0.15);
  30. t.addRange("fresh teal", 0.05);
  31. t.addRange("bright yellow", 0.05);
  32.  
  33. // und jetzt moechten wir noch eine andere zufaellige Farbe, die jedoch garantiert
  34. // ziemlich gesaettigt und hell ist (diese beiden Komponenten sind in dem preset
  35. // ColorRange.BRIGHT definiert, was jedoch immer noch voellige Freiheit fuer die
  36. // eigentliche Grundfarbe zulaesst)
  37. // das "Gewicht" dieser Farbe in der Palette soll zwischen 2-5% liegen…
  38. t.addRange(ColorRange.BRIGHT, TColor.newRandom(), random(0.02, 0.05));
  39.  
  40. // nun nutzen wir TColortheme um eine Liste mit 160 Farben zu erzeugen
  41. ColorList list = t.getColors(160);
  42.  
  43. // hier nutzen wir die Systemzeit, um eine unique file ID fuer die PDF Datei zu erstellen
  44. long timeStamp=System.currentTimeMillis()/1000;
  45. // PDF Export starten
  46. beginRecord(PDF, "colors-"+timeStamp+".pdf");
  47. // wir nehmen die hellste Farbe in der Palette als Hintergrund
  48. background(list.getLightest().toARGB());
  49. // wir wollen keine Outlines
  50. noStroke();
  51. // Kurve berechnen & zeichnen
  52. drawSpline(list);
  53. // PDF abschliessen & speichern
  54. endRecord();
  55. }
  56.  
  57. // wir wollen nur eine neue Kurve auf Tastendruck erzeugen
  58. void keyPressed() {
  59. redraw();
  60. }
  61.  
  62. void drawSpline(ColorList list) {
  63. int numCols = list.size();
  64. // fuer die Kurve benoetigen wir erst einmal verschiedene Kontrollpunkte
  65. Vec2D[] points=new Vec2D[NUM_POINTS];
  66. // dann definieren wir einen zufaelligen Anfangspunkt auf der linken Seite
  67. points[0]=new Vec2D(-XRAD,random(0.2,0.9)*height);
  68. // und plazieren andere zufaellige Punkte in der Mitte
  69. for(int i=1; i<points.length-1; i++) {
  70. points[i]=new Vec2D(random(-1,1)*50+(float)i/points.length*width,random(0.25,0.75)*height);
  71. }
  72. // sowie einen weiteren Endpunkt ganz rechts
  73. points[points.length-1]=new Vec2D(width+XRAD,random(height));
  74. // jetzt packen wir diese Punkte in einen Spline container
  75. // und berechnen die resultierende Kurve
  76. ArrayList vertices=new Spline2D(points).computeVertices(width/RES);
  77. // fast fertig, fuer jeden Punkt entlang der Kurve zeichnen wir eine Ellipse mit
  78. // einer Farbe aus der gegebenen Farbpalette
  79. for(Iterator i=vertices.iterator(); i.hasNext(); ) {
  80. Vec2D v=(Vec2D)i.next();
  81. fill(list.get(MathUtils.random(numCols)).toARGB());
  82. ellipse(v.x,v.y,noise(v.y*0.01)*XRAD,noise(v.x*0.01)*YRAD);
  83. }
  84. }