git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@7497 6c8d7289-2bf4-0310-a012-ef5d649a1542pull/1/head
parent
a80ee9a03d
commit
93b9c4fbc9
@ -0,0 +1,178 @@
|
||||
/**
|
||||
* HexGridPlotter
|
||||
* Copyright 2011 by Michael Peter Christen; mc@yacy.net, Frankfurt a. M., Germany
|
||||
* First released 18.02.2010 at http://yacy.net
|
||||
*
|
||||
* $LastChangedDate: 2010-06-16 17:11:21 +0200 (Mi, 16 Jun 2010) $
|
||||
* $LastChangedRevision: 6922 $
|
||||
* $LastChangedBy: orbiter $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program in the file lgpl21.txt
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package net.yacy.visualization;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
/*
|
||||
* hexagonal grid plotter
|
||||
*/
|
||||
public class HexGridPlotter extends RasterPlotter {
|
||||
|
||||
private final int cellwidth1, cellwidth2, cellwidth12;
|
||||
private final int gwidth, gheight;
|
||||
|
||||
public HexGridPlotter(int width, int height, DrawMode drawMode, String backgroundColor, final int cellwidth) {
|
||||
super(width, height, drawMode, backgroundColor);
|
||||
this.cellwidth1 = cellwidth;
|
||||
this.cellwidth2 = cellwidth >> 1;
|
||||
this.cellwidth12 = this.cellwidth1 + this.cellwidth2;
|
||||
this.gwidth = (super.width - this.cellwidth2) / this.cellwidth12;
|
||||
this.gheight = (super.height - this.cellwidth2) / this.cellwidth2;
|
||||
}
|
||||
|
||||
private int projectionX(final int x, final int y) {
|
||||
return (x + 1) * this.cellwidth12 - this.cellwidth2 + ((x & 1) == 0 ? ((y & 1) == 0 ? 0 : this.cellwidth2) : ((y & 1) == 0 ? this.cellwidth2 : 0));
|
||||
}
|
||||
|
||||
private int projectionY(final int y) {
|
||||
return (y + 1) * this.cellwidth2;
|
||||
}
|
||||
|
||||
public int gridWidth() {
|
||||
return this.gwidth;
|
||||
}
|
||||
|
||||
public int gridHeight() {
|
||||
return this.gheight;
|
||||
}
|
||||
|
||||
public void drawGrid(final String colorNaming) {
|
||||
setColor(colorNaming);
|
||||
int x0, y0, x1, y1;
|
||||
for (int i = 0; i < this.gwidth; i++) {
|
||||
x0 = projectionX(i, -1);
|
||||
y0 = projectionY(-1);
|
||||
//super.plot(x0, y0, 30);
|
||||
for (int j = -1; j <= this.gheight + 1; j++) {
|
||||
x1 = projectionX(i, j);
|
||||
y1 = projectionY(j);
|
||||
//super.plot(x1, y1, 30);
|
||||
super.line(x0, y0, x1, y1, 40);
|
||||
x0 = x1;
|
||||
y0 = y1;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = -1; i <= this.gwidth; i = i + 2) {
|
||||
for (int j = 0; j <= this.gheight; j = j + 2) {
|
||||
x0 = projectionX(i, j);
|
||||
y0 = projectionY(j);
|
||||
x1 = projectionX(i + 1, j);
|
||||
y1 = projectionY(j);
|
||||
super.line(x0 + 1, y0, x1 - 1, y1, 30);
|
||||
|
||||
x0 = projectionX(i + 1, j + 1);
|
||||
y0 = projectionY(j + 1);
|
||||
x1 = projectionX(i + 2, j + 1);
|
||||
y1 = projectionY(j + 1);
|
||||
super.line(x0 + 1, y0, x1 - 1, y1, 30);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void gridDot(final int x, final int y, final int radius, final boolean filled) {
|
||||
dot(projectionX(x, y), projectionY(y), radius, filled);
|
||||
}
|
||||
|
||||
public void gridPrint(final int x, final int y, final int radius, final String messageHigh, final String messageLow, final int align) {
|
||||
if (messageHigh != null && messageHigh.length() > 0) PrintTool.print(this, projectionX(x, y) - align * radius, projectionY(y) - (cellwidth2 >> 2) - ((align == 0) ? radius : 0), 0, messageHigh, align);
|
||||
if (messageLow != null && messageLow.length() > 0) PrintTool.print(this, projectionX(x, y) - align * radius, projectionY(y) + (cellwidth2 >> 2) + 4 + ((align == 0) ? radius : 0), 0, messageLow, align);
|
||||
}
|
||||
|
||||
public void gridPrint315(final int x, final int y, final int radius, final String message315) {
|
||||
if (message315 != null && message315.length() > 0) PrintTool.print(this, projectionX(x, y) + (radius >> 1), projectionY(y) + (cellwidth2 >> 2) + 4, 315, message315, -1);
|
||||
}
|
||||
|
||||
public void gridLine(int Ax, int Ay, final int Bx, final int By) {
|
||||
// we do not use Bresenham's line drawing algorithm here because we want only 0, 45 and 90 degree lines
|
||||
int x0 = projectionX(Ax, Ay);
|
||||
int y0 = projectionY(Ay);
|
||||
int x1 = projectionX(Bx, By);
|
||||
int y1 = projectionY(By);
|
||||
int horizontal;
|
||||
while (x1 != x0 || y1 != y0) {
|
||||
horizontal = 0;
|
||||
if (x1 > x0) {x1--; horizontal++;} else if (x1 < x0) {x1++; horizontal++;}
|
||||
if (y1 > y0) {y1--; horizontal++;} else if (y1 < y0) {y1++; horizontal++;}
|
||||
plot(x1, y1, (horizontal == 2) ? 100 : 80);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(final String[] args) {
|
||||
// go into headless awt mode
|
||||
System.setProperty("java.awt.headless", "true");
|
||||
|
||||
final HexGridPlotter picture = new HexGridPlotter(640, 480, DrawMode.MODE_SUB, "FFFFFF", 18);
|
||||
picture.drawGrid("555555");
|
||||
picture.setColor("33ff33");
|
||||
picture.gridDot(0, 0, 5, true); picture.gridPrint(0, 0, 5, "", "0,0", -1);
|
||||
for (int i = 1; i < picture.gridHeight() -1; i++) {
|
||||
picture.setColor("33ff33");picture.gridDot(0, i, 3, true);
|
||||
picture.setColor("334433");picture.gridPrint(0, i, 3, "", "0," + i, -1);
|
||||
}
|
||||
for (int i = 1; i < picture.gridWidth() -1; i++) {
|
||||
picture.setColor("33ff33");picture.gridDot(i, 0, 3, true);
|
||||
picture.setColor("334433");picture.gridPrint315(i, 0, 3, i + ",0");
|
||||
}
|
||||
picture.setColor("33ff33");
|
||||
picture.gridDot(0, picture.gheight - 1, 5, true); picture.gridPrint(0, picture.gheight - 1, 5, "0, grid.gheight - 1", "", -1);
|
||||
picture.gridDot(picture.gwidth - 1, 0, 5, true); picture.gridPrint(picture.gwidth - 1, 0, 5, "", "grid.gwidth - 1, 0", -1);
|
||||
picture.gridDot(picture.gwidth - 1, picture.gheight - 1, 5, true); picture.gridPrint(picture.gwidth - 1, picture.gheight - 1, 5, "grid.gwidth - 1, grid.gheight - 1", "", 1);
|
||||
|
||||
|
||||
picture.gridDot(3, 3, 20, false);
|
||||
|
||||
picture.gridDot(7, 5, 5, false);
|
||||
picture.gridPrint(7, 5, 8, "COMMUNICATION TEST", "TRANSFER 64KBIT", -1);
|
||||
picture.gridDot(14, 8, 5, true);
|
||||
picture.gridLine(7, 5, 14, 8);
|
||||
picture.gridPrint315(14, 8, 8, "NULL");
|
||||
|
||||
picture.gridDot(4, 28, 5, false);
|
||||
picture.gridPrint(4, 28, 8, "REVERSE", "ESREVER", -1);
|
||||
picture.gridLine(4, 28, 14, 8);
|
||||
|
||||
picture.gridDot(picture.gwidth - 1, picture.gheight - 4, 5, false);
|
||||
picture.gridPrint(picture.gwidth - 1, picture.gheight - 4, 5, "INTERNET", "END", 1);
|
||||
picture.gridDot(picture.gwidth / 2, picture.gheight / 2, 5, false);
|
||||
picture.gridPrint(picture.gwidth / 2, picture.gheight / 2, 5, "HOME PEER", "ANON_23", 0);
|
||||
//grid.gridLine(grid.gwidth - 2, grid.gheight - 2, grid.gwidth / 2, grid.gheight / 2);
|
||||
picture.gridLine(picture.gwidth / 2, picture.gheight / 2, picture.gwidth - 1, picture.gheight - 4);
|
||||
|
||||
final File file = new File("/Users/admin/Desktop/testimage.png");
|
||||
try {
|
||||
final FileOutputStream fos = new FileOutputStream(file);
|
||||
ImageIO.write(picture.getImage(), "png", fos);
|
||||
fos.close();
|
||||
} catch (final IOException e) {}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue