kopia lustrzana https://github.com/neopoly/tagcloud
Allow different colors
rodzic
b63eec304e
commit
d19d604110
|
@ -4,4 +4,6 @@ outputFile=out.png
|
||||||
width=500
|
width=500
|
||||||
height=636
|
height=636
|
||||||
minSize=4
|
minSize=4
|
||||||
maxSize=38
|
maxSize=38
|
||||||
|
colors=#000000,#3a3a3a,#787878,#b2b2b2
|
||||||
|
background=#ffffff
|
|
@ -0,0 +1,10 @@
|
||||||
|
import java.awt.*;
|
||||||
|
public class ColorHelper {
|
||||||
|
public static int transform(Color c){
|
||||||
|
return (c.getAlpha() << 24) | (c.getRed() << 16) | (c.getGreen() << 8) | c.getBlue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int decode(String c){
|
||||||
|
return transform(Color.decode(c));
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,9 +16,10 @@ public class Configuration {
|
||||||
public int getHeight(){ return Integer.parseInt(prop.getProperty("height")); }
|
public int getHeight(){ return Integer.parseInt(prop.getProperty("height")); }
|
||||||
public int getMinSize(){ return Integer.parseInt(prop.getProperty("minSize")); }
|
public int getMinSize(){ return Integer.parseInt(prop.getProperty("minSize")); }
|
||||||
public int getMaxSize(){ return Integer.parseInt(prop.getProperty("maxSize")); }
|
public int getMaxSize(){ return Integer.parseInt(prop.getProperty("maxSize")); }
|
||||||
|
public String getColors(){ return prop.getProperty("colors"); }
|
||||||
|
public String getBackgroundColor(){return prop.getProperty("background"); }
|
||||||
public boolean isDebug(){
|
public boolean isDebug(){
|
||||||
return prop.getProperty("debug") == "true";
|
return prop.getProperty("debug") != null && prop.getProperty("debug").equals("true");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void load(){
|
public void load(){
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
import wordcram.Word;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class InputWords {
|
||||||
|
private String file;
|
||||||
|
|
||||||
|
public InputWords(String file){
|
||||||
|
this.file = file;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Word[] getWords(){
|
||||||
|
ArrayList<Word> words = new ArrayList<Word>();
|
||||||
|
|
||||||
|
BufferedReader reader = null;
|
||||||
|
try {
|
||||||
|
reader = new BufferedReader(new FileReader(file));
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return new Word[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
String line = null;
|
||||||
|
try {
|
||||||
|
while((line = reader.readLine()) != null){
|
||||||
|
String[] values = line.split(",");
|
||||||
|
if(values.length == 2){
|
||||||
|
words.add( new Word(values[0].trim(), Float.parseFloat(values[1].trim())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return new Word[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return words.toArray(new Word[words.size()]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,6 @@
|
||||||
|
/*
|
||||||
|
* Copied from: http://wordcram.org/2013/02/13/shapes-for-wordcram/
|
||||||
|
*/
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
|
@ -18,13 +21,12 @@ import processing.core.PVector;
|
||||||
import wordcram.Word;
|
import wordcram.Word;
|
||||||
import wordcram.WordNudger;
|
import wordcram.WordNudger;
|
||||||
import wordcram.WordPlacer;
|
import wordcram.WordPlacer;
|
||||||
|
|
||||||
class ShapeBasedPlacer implements WordPlacer, WordNudger {
|
class ShapeBasedPlacer implements WordPlacer, WordNudger {
|
||||||
|
|
||||||
public static int TOLERANCE = 5;
|
public static int TOLERANCE = 5;
|
||||||
public static boolean PRECISE = false;
|
public static boolean PRECISE = false;
|
||||||
public static int GLYPH_SIZE = 500;
|
public static int GLYPH_SIZE = 500;
|
||||||
public static int FONT_STYLE = Font.PLAIN;
|
public static int FONT_STYLE = Font.PLAIN;
|
||||||
|
|
||||||
Area area;
|
Area area;
|
||||||
float minX;
|
float minX;
|
||||||
|
|
|
@ -2,6 +2,7 @@ import processing.core.*;
|
||||||
import wordcram.WordCram;
|
import wordcram.WordCram;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.awt.image.PackedColorModel;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
@ -16,65 +17,55 @@ public class Tree extends PApplet {
|
||||||
public void setup(){
|
public void setup(){
|
||||||
Configuration config = Configuration.getInstance();
|
Configuration config = Configuration.getInstance();
|
||||||
size(config.getWidth(),config.getHeight());
|
size(config.getWidth(),config.getHeight());
|
||||||
background(255);
|
background(ColorHelper.decode(config.getBackgroundColor()));
|
||||||
|
|
||||||
ShapeBasedPlacer placer = ShapeBasedPlacer.fromFile(config.getShapeFile(), Color.black);
|
ShapeBasedPlacer placer = ShapeBasedPlacer.fromFile(config.getShapeFile(), Color.black);
|
||||||
|
InputWords input = new InputWords(config.getInputFile());
|
||||||
BufferedReader reader = null;
|
TreeColorer colorer = new TreeColorer(config.getColors());
|
||||||
try {
|
|
||||||
reader = new BufferedReader(new FileReader(config.getInputFile()));
|
|
||||||
} catch (FileNotFoundException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
ArrayList<Word> words = new ArrayList<Word>();
|
|
||||||
|
|
||||||
String line = null;
|
|
||||||
try {
|
|
||||||
while((line = reader.readLine()) != null){
|
|
||||||
String[] values = line.split(",");
|
|
||||||
if(values.length == 2){
|
|
||||||
words.add( new Word(values[0].trim(), Float.parseFloat(values[1].trim())));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
cram = new WordCram(this)
|
cram = new WordCram(this)
|
||||||
.fromWords(words.toArray(new Word[words.size()]))
|
.fromWords(input.getWords())
|
||||||
|
.withColorer(colorer)
|
||||||
.withPlacer(placer)
|
.withPlacer(placer)
|
||||||
.withNudger(placer)
|
.withNudger(placer)
|
||||||
.sizedByWeight(config.getMinSize(),config.getMaxSize());
|
.sizedByWeight(config.getMinSize(),config.getMaxSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void draw() {
|
public void draw() {
|
||||||
if(this.draw){
|
if(this.draw){
|
||||||
System.out.println("Start drawing tag cloud...");
|
System.out.println("Start drawing tag cloud...");
|
||||||
cram.drawAll();
|
cram.drawAll();
|
||||||
this.draw = false;
|
this.draw = false;
|
||||||
System.out.println("Finished drawing");
|
System.out.println("Finished drawing");
|
||||||
//tell me what didn’t get drawn
|
|
||||||
if(Configuration.getInstance().isDebug()){
|
if(Configuration.getInstance().isDebug()){
|
||||||
int noSpace = 0;
|
printDebug();
|
||||||
int tooSmall = 0;
|
|
||||||
Word[] skippedWords = cram.getSkippedWords();
|
|
||||||
Word[] placedWords = cram.getWords();
|
|
||||||
for (Word skipped: skippedWords) {
|
|
||||||
if (skipped.wasSkippedBecause() == WordCram.NO_SPACE) {
|
|
||||||
noSpace++;
|
|
||||||
} else if (skipped.wasSkippedBecause() == WordCram.SHAPE_WAS_TOO_SMALL) {
|
|
||||||
tooSmall++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
System.out.println("Total placed Words: " + placedWords.length);
|
|
||||||
System.out.println("Total Skipped Words: " + skippedWords.length);
|
|
||||||
System.out.println("Skipped because no Space: " + noSpace);
|
|
||||||
System.out.println("Skipped because too small: " + tooSmall);
|
|
||||||
System.out.println("Finished");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
save(Configuration.getInstance().getOutputFile());
|
save(Configuration.getInstance().getOutputFile());
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void printDebug(){
|
||||||
|
//tell me what didn’t get drawn
|
||||||
|
int noSpace = 0;
|
||||||
|
int tooSmall = 0;
|
||||||
|
Word[] skippedWords = cram.getSkippedWords();
|
||||||
|
Word[] placedWords = cram.getWords();
|
||||||
|
for (Word skipped: skippedWords) {
|
||||||
|
if (skipped.wasSkippedBecause() == WordCram.NO_SPACE) {
|
||||||
|
noSpace++;
|
||||||
|
} else if (skipped.wasSkippedBecause() == WordCram.SHAPE_WAS_TOO_SMALL) {
|
||||||
|
tooSmall++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println("Total placed Words: " + placedWords.length);
|
||||||
|
System.out.println("Total Skipped Words: " + skippedWords.length);
|
||||||
|
System.out.println("Skipped because no Space: " + noSpace);
|
||||||
|
System.out.println("Skipped because too small: " + tooSmall);
|
||||||
|
System.out.println("Finished");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
import wordcram.Word;
|
||||||
|
import wordcram.WordColorer;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class TreeColorer implements WordColorer {
|
||||||
|
|
||||||
|
private ArrayList<Integer> colors = new ArrayList<Integer>();
|
||||||
|
private Random randomGenerator = new Random();
|
||||||
|
|
||||||
|
public TreeColorer(String colorString){
|
||||||
|
for(String c : colorString.split(",")){
|
||||||
|
colors.add(ColorHelper.decode(c));
|
||||||
|
}
|
||||||
|
if(colors.isEmpty()){
|
||||||
|
colors.add(ColorHelper.decode("#000000"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int colorFor(Word word) {
|
||||||
|
return colors.get(randomGenerator.nextInt(colors.size()));
|
||||||
|
}
|
||||||
|
}
|
Ładowanie…
Reference in New Issue