more animations in graphics. See network and access picture.

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@7498 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 14 years ago
parent 93b9c4fbc9
commit 29dc416ac6

@ -50,7 +50,7 @@
#%env/templates/header.template%#
#%env/templates/submenuAccessTracker.template%#
<h2>Server Access Grid</h2>
<p>This images shows incoming connections to your YaCy peer and outgoing connections from your peer to other peers and web servers</p>
<div class="left">
<p>
<a href="AccessPicture_p.png?width=1024&amp;height=576&amp;bgcolor=FFFFFF"><img id="AccessPicture" src="AccessPicture_p.png?width=1024&amp;height=576&amp;bgcolor=FFFFFF&amp;coronaangle=0" alt="The YaCy Network" width="1024" height="576" /></a>

@ -53,6 +53,8 @@ public class AccessPicture_p {
int width = 1024;
int height = 576;
int cellsize = 18;
boolean corona = false;
int coronaangle = 0;
if (post != null) {
width = post.getInt("width", 1024);
@ -63,7 +65,10 @@ public class AccessPicture_p {
color_grid = post.get("colorgrid", color_grid);
color_dot = post.get("colordot", color_dot);
color_line = post.get("colorline", color_line);
corona = post.get("corona", "true").equals("true");
coronaangle = (corona) ? post.getInt("coronaangle", 0) : -1;
}
if (coronaangle < 0) corona = false;
// too small values lead to an error, too big to huge CPU/memory consumption, resulting in possible DOS.
if (width < 32 ) width = 32;
@ -83,8 +88,14 @@ public class AccessPicture_p {
int centerx = (picture.gridWidth() >> 1) - 1;
int centery = picture.gridHeight() >> 1;
picture.setColor(color_dot);
picture.gridDot(centerx, centery, 5, true);
//picture.gridDot(centerx, centery, 50, false);
picture.gridDot(centerx, centery, 5);
if (corona) {
for (int i = 0; i < 6; i++) {
picture.gridDot(centerx, centery, 50, i * 60 + coronaangle / 6, i * 60 + 30 + coronaangle / 6);
}
} else {
picture.gridDot(centerx, centery, 50, 0, 360);
}
//picture.gridDot(centerx, centery, 31, false);
picture.setColor(color_text);
picture.gridPrint(centerx, centery, 5, "THIS YACY PEER", "\"" + sb.peers.myName().toUpperCase() + "\"", 0);
@ -118,15 +129,22 @@ public class AccessPicture_p {
for (int i = 0; i < hosts.length; i++) {
if (hosts[i] != null) {
picture.setColor(color_dot);
picture.gridDot(gridLeft, i * 2 + 1, 7, false);
picture.gridDot(gridLeft, i * 2 + 1, 8, false);
picture.gridDot(gridLeft, i * 2 + 1, 7, 0, 360);
picture.gridDot(gridLeft, i * 2 + 1, 8, 0, 360);
picture.setColor(color_text);
picture.gridPrint(gridLeft, i * 2 + 1, 8, hosts[i].toUpperCase(), "COUNT = " + count[i] + ", TIME > " + ((time[i] >= 60000) ? ((time[i] / 60000) + " MINUTES") : ((time[i] / 1000) + " SECONDS")), -1);
if (corona) {
picture.gridLine((centerx - gridLeft) / 2, i * 2 + 1, gridLeft, i * 2 + 1,
color_line, 100, "111111", 100, 12, 11 - coronaangle / 30, 1, true);
picture.gridLine(centerx, centery, (centerx - gridLeft) / 2, i * 2 + 1,
color_line, 100, "111111", 100, 12, 11 - coronaangle / 30, 1, true);
} else {
picture.setColor(color_line);
picture.gridLine(gridLeft, i * 2 + 1, (centerx - gridLeft) / 2, i * 2 + 1);
picture.gridLine(centerx, centery, (centerx - gridLeft) / 2, i * 2 + 1);
}
}
}
// right column: collect data for access to outside
for (int i = 0; i < verticalSlots; i++) {hosts[i] = null; time[i] = 0; count[i] = 0;}
@ -146,15 +164,22 @@ public class AccessPicture_p {
for (int i = 0; i < hosts.length; i++) {
if (hosts[i] != null) {
picture.setColor(color_dot);
picture.gridDot(gridRight, i * 2 + 1, 7, false);
picture.gridDot(gridRight, i * 2 + 1, 8, false);
picture.gridDot(gridRight, i * 2 + 1, 7, 0, 360);
picture.gridDot(gridRight, i * 2 + 1, 8, 0, 360);
picture.setColor(color_text);
picture.gridPrint(gridRight, i * 2 + 1, 8, hosts[i].toUpperCase(), count[i] + " BYTES, " + time[i] + " MS DUE", 1);
if (corona) {
picture.gridLine(gridRight, i * 2 + 1, centerx + (gridRight - centerx) / 2, i * 2 + 1,
color_line, 100, "111111", 100, 12, coronaangle / 30, 1, true);
picture.gridLine(centerx, centery, centerx + (gridRight - centerx) / 2, i * 2 + 1,
color_line, 100, "111111", 100, 12, coronaangle / 30, 1, true);
} else {
picture.setColor(color_line);
picture.gridLine(gridRight, i * 2 + 1, centerx + (gridRight - centerx) / 2, i * 2 + 1);
picture.gridLine(centerx, centery, centerx + (gridRight - centerx) / 2, i * 2 + 1);
}
}
}
// print headline
picture.setColor(color_text);
@ -163,20 +188,20 @@ public class AccessPicture_p {
// print legend
picture.setColor(color_grid);
picture.gridLine(gridLeft, 0, centerx - 2, 0);
picture.gridLine(gridLeft, 0, centerx - 3, 0);
picture.gridLine(gridLeft, 0, gridLeft, picture.gridHeight() - 1);
picture.gridLine(centerx - 2, 0, centerx - 2, picture.gridHeight() - 1);
picture.gridLine(centerx - 3, 0, centerx - 3, picture.gridHeight() - 1);
picture.setColor(color_dot);
picture.gridLine(gridLeft, picture.gridHeight() - 1, centerx - 2, picture.gridHeight() - 1);
picture.gridLine(gridLeft, picture.gridHeight() - 1, centerx - 3, picture.gridHeight() - 1);
picture.gridPrint(gridLeft, picture.gridHeight() - 1, 8, "", "INCOMING CONNECTIONS", -1);
picture.setColor(color_grid);
picture.gridLine(centerx + 3, 0, gridRight + 1, 0);
picture.gridLine(centerx + 3, 0, gridRight, 0);
picture.gridLine(centerx + 3, 0, centerx + 3, picture.gridHeight() - 1);
picture.gridLine(gridRight + 1, 0, gridRight + 1, picture.gridHeight() - 1);
picture.gridLine(gridRight, 0, gridRight, picture.gridHeight() - 1);
picture.setColor(color_dot);
picture.gridLine(centerx + 3, picture.gridHeight() - 1, gridRight + 1, picture.gridHeight() - 1);
picture.gridPrint(gridRight + 1, picture.gridHeight() - 1, 8, "", "OUTGOING CONNECTIONS", 1);
picture.gridLine(centerx + 3, picture.gridHeight() - 1, gridRight, picture.gridHeight() - 1);
picture.gridPrint(gridRight, picture.gridHeight() - 1, 8, "", "OUTGOING CONNECTIONS", 1);
return picture;

@ -69,11 +69,11 @@ public class imagetest {
for (int y = 0; y < 600; y = y + 50) PrintTool.print(img, 0, 6 + y, 0, Integer.toString(y), -1);
for (int x = 0; x < 800; x = x + 50) PrintTool.print(img, x, 6 , 0, Integer.toString(x), -1);
img.setColor(RasterPlotter.RED);
img.dot(550, 110, 90, true);
img.dot(550, 110, 90, true, 100);
img.setColor(RasterPlotter.GREEN);
img.dot(480, 200, 90, true);
img.dot(480, 200, 90, true, 100);
img.setColor(RasterPlotter.BLUE);
img.dot(620, 200, 90, true);
img.dot(620, 200, 90, true, 100);
img.setColor(RasterPlotter.RED);
img.arc(300, 270, 30, 70, 0, 360);
img.setColor("330000");
@ -85,10 +85,10 @@ public class imagetest {
PrintTool.print(img, 50, 120, 0, "BROADCAST MESSAGE #772: NODE %882 GREEN abcefghijklmnopqrstuvwxyz", -1);
for (long i = 0; i < 256; i++) {
img.setColor(i);
img.dot(10 + 14 * (int) (i / 16), 200 + 14 * (int) (i % 16), 6, true);
img.dot(10 + 14 * (int) (i / 16), 200 + 14 * (int) (i % 16), 6, true, 100);
}
img.setColor("008000");
img.dot(10 + 14 * 8, 200 + 14 * 8, 90, true);
img.dot(10 + 14 * 8, 200 + 14 * 8, 90, true, 100);
/*
for (long r = 0; r < 256; r = r + 16) {
for (long g = 0; g < 256; g = g + 16) {
@ -108,7 +108,7 @@ public class imagetest {
int angle;
for (byte c = (byte) 'A'; c <= 'Z'; c++) {
angle = (c - (byte) 'A') * 360 / ((byte) 'Z' - (byte) 'A');
img.arcLine(550, 400, 81, 100, angle);
img.arcLine(550, 400, 81, 100, angle, null, null, -1, -1, -1, false);
PrintTool.arcPrint(img, 550, 400, 100, angle, "ANGLE" + angle + ":" + (char) c);
}
return img;

@ -137,7 +137,7 @@ public class NetworkGraph {
if (primarySearches[j] == null) continue;
eventPicture.setColor((primarySearches[j].isAlive()) ? RasterPlotter.RED : RasterPlotter.GREEN);
angle = (int) (360.0 * (((double) FlatWordPartitionScheme.std.dhtPosition(primarySearches[j].target().hash.getBytes(), null)) / ((double) Long.MAX_VALUE)));
eventPicture.arcLine(cx, cy, cr - 20, cr, angle);
eventPicture.arcLine(cx, cy, cr - 20, cr, angle, null, null, -1, -1, -1, false);
}
// draw in the secondary search peers
@ -146,8 +146,8 @@ public class NetworkGraph {
if (secondarySearches[j] == null) continue;
eventPicture.setColor((secondarySearches[j].isAlive()) ? RasterPlotter.RED : RasterPlotter.GREEN);
angle = (int) (360.0 * (((double) FlatWordPartitionScheme.std.dhtPosition(secondarySearches[j].target().hash.getBytes(), null)) / ((double) Long.MAX_VALUE)));
eventPicture.arcLine(cx, cy, cr - 10, cr, angle - 1);
eventPicture.arcLine(cx, cy, cr - 10, cr, angle + 1);
eventPicture.arcLine(cx, cy, cr - 10, cr, angle - 1, null, null, -1, -1, -1, false);
eventPicture.arcLine(cx, cy, cr - 10, cr, angle + 1, null, null, -1, -1, -1, false);
}
}
@ -159,7 +159,7 @@ public class NetworkGraph {
long[] positions = seedDB.scheme.dhtPositions(i.next());
for (int j = 0; j < positions.length; j++) {
angle = (int) (360.0 * (((double) positions[j]) / ((double) Long.MAX_VALUE)));
eventPicture.arcLine(cx, cy, cr - 20, cr, angle);
eventPicture.arcLine(cx, cy, cr - 20, cr, angle, null, null, -1, -1, -1, false);
}
}
@ -170,7 +170,12 @@ public class NetworkGraph {
return drawNetworkPicture(seedDB, width, height, passiveLimit, potentialLimit, maxCount, coronaangle, communicationTimeout, networkName, networkTitle, bgcolor);
}
private static RasterPlotter drawNetworkPicture(final yacySeedDB seedDB, final int width, final int height, final int passiveLimit, final int potentialLimit, final int maxCount, final int coronaangle, final long communicationTimeout, final String networkName, final String networkTitle, final String bgcolor) {
private static RasterPlotter drawNetworkPicture(
final yacySeedDB seedDB, final int width, final int height,
final int passiveLimit, final int potentialLimit,
final int maxCount, final int coronaangle,
final long communicationTimeout,
final String networkName, final String networkTitle, final String bgcolor) {
RasterPlotter networkPicture = new RasterPlotter(width, height, (bgcolor.equals("000000")) ? RasterPlotter.DrawMode.MODE_ADD : RasterPlotter.DrawMode.MODE_SUB, bgcolor);
if (seedDB == null) return networkPicture; // no other peers known
@ -253,14 +258,14 @@ public class NetworkGraph {
if (event == null || event.getPubDate() == null) continue;
if (event.getPubDate().after(horizon)) {
//System.out.println("*** NETWORK-DHTRECEIVE: " + event.getLink());
drawNetworkPictureConnection(networkPicture, width / 2, height / 2, innerradius, seedDB.mySeed(), seedDB.get(event.getLink()), COL_DHTIN);
drawNetworkPictureDHT(networkPicture, width / 2, height / 2, innerradius, seedDB.mySeed(), seedDB.get(event.getLink()), COL_DHTIN);
}
}
for (Hit event: yacyChannel.channels(yacyChannel.DHTSEND)) {
if (event == null || event.getPubDate() == null) continue;
if (event.getPubDate().after(horizon)) {
//System.out.println("*** NETWORK-DHTSEND: " + event.getLink());
drawNetworkPictureConnection(networkPicture, width / 2, height / 2, innerradius, seedDB.mySeed(), seedDB.get(event.getLink()), COL_DHTOUT);
drawNetworkPictureDHT(networkPicture, width / 2, height / 2, innerradius, seedDB.mySeed(), seedDB.get(event.getLink()), COL_DHTOUT);
}
}
}
@ -275,17 +280,22 @@ public class NetworkGraph {
return networkPicture;
}
private static void drawNetworkPictureConnection(final RasterPlotter img, final int centerX, final int centerY, final int innerradius, final yacySeed mySeed, final yacySeed otherSeed, final String colorLine) {
private static void drawNetworkPictureDHT(final RasterPlotter img, final int centerX, final int centerY, final int innerradius, final yacySeed mySeed, final yacySeed otherSeed, final String colorLine) {
final int angleMy = (int) (360.0 * (((double) FlatWordPartitionScheme.std.dhtPosition(mySeed.hash.getBytes(), null)) / ((double) Long.MAX_VALUE)));
final int angleOther = (int) (360.0 * (((double) FlatWordPartitionScheme.std.dhtPosition(otherSeed.hash.getBytes(), null)) / ((double) Long.MAX_VALUE)));
// draw line
img.setColor(colorLine);
img.arcLine(centerX, centerY, innerradius, innerradius - 20, angleMy);
img.arcLine(centerX, centerY, innerradius, innerradius - 20, angleOther);
img.arcLine(centerX, centerY, innerradius, innerradius - 20, angleMy, null, null, -1, -1, -1, false);
img.arcLine(centerX, centerY, innerradius, innerradius - 20, angleOther, null, null, -1, -1, -1, false);
img.arcConnect(centerX, centerY, innerradius - 20, angleMy, angleOther);
}
private static void drawNetworkPicturePeer(final RasterPlotter img, final int centerX, final int centerY, final int innerradius, final int outerradius, final yacySeed seed, final String colorDot, final String colorLine, final String colorText, final int coronaangle) {
private static void drawNetworkPicturePeer(
final RasterPlotter img, final int centerX, final int centerY,
final int innerradius, final int outerradius,
final yacySeed seed,
final String colorDot, final String colorLine, final String colorText,
final int coronaangle) {
final String name = seed.getName().toUpperCase() /*+ ":" + seed.hash + ":" + (((double) ((int) (100 * (((double) yacySeed.dhtPosition(seed.hash)) / ((double) yacySeed.maxDHTDistance))))) / 100.0)*/;
if (name.length() < shortestName) shortestName = name.length();
if (name.length() > longestName) longestName = name.length();
@ -299,8 +309,7 @@ public class NetworkGraph {
img.setColor(colorDot);
img.arcDot(centerX, centerY, innerradius, angle, dotsize);
// draw line to text
img.setColor(colorLine);
img.arcLine(centerX, centerY, innerradius + 18, innerradius + linelength, angle);
img.arcLine(centerX, centerY, innerradius + 18, innerradius + linelength, angle, colorLine, "111111", 12, coronaangle / 30, 1, true);
// draw text
img.setColor(colorText);
PrintTool.arcPrint(img, centerX, centerY, innerradius + linelength, angle, name);

@ -88,7 +88,7 @@ public class ChartPlotter extends RasterPlotter {
final int x = (coord_x - offsets[dimension_x]) * pixels[dimension_x] / scales[dimension_x];
final int y = (coord_y - offsets[dimension_y]) * pixels[dimension_y] / scales[dimension_y];
if (dotsize == 1) plot(leftborder + x, height - bottomborder - y, 100);
else dot(leftborder + x, height - bottomborder - y, dotsize, true);
else dot(leftborder + x, height - bottomborder - y, dotsize, true, 100);
if (anot != null) PrintTool.print(this, leftborder + x + dotsize + 2 + ((anotAngle == 315) ? -9 : 0), height - bottomborder - y + ((anotAngle == 315) ? -3 : 0), anotAngle, anot, (anotAngle == 0) ? -1 : ((anotAngle == 315) ? 1 : 0));
}

@ -99,7 +99,7 @@ public class CircleTool {
return circles[radius - 1];
}
public static void circle(final RasterPlotter matrix, final int xc, final int yc, final int radius) {
public static void circle(final RasterPlotter matrix, final int xc, final int yc, final int radius, int intensity) {
if (radius == 0) {
matrix.plot(xc, yc, 100);
} else {
@ -108,10 +108,10 @@ public class CircleTool {
for (int i = (c.length / 2) - 1; i >= 0; i--) {
x = c[2 * i ];
y = c[2 * i + 1];
matrix.plot(xc + x , yc - y - 1, 100); // quadrant 1
matrix.plot(xc - x + 1, yc - y - 1, 100); // quadrant 2
matrix.plot(xc + x , yc + y , 100); // quadrant 4
matrix.plot(xc - x + 1, yc + y , 100); // quadrant 3
matrix.plot(xc + x , yc - y - 1, intensity); // quadrant 1
matrix.plot(xc - x + 1, yc - y - 1, intensity); // quadrant 2
matrix.plot(xc + x , yc + y , intensity); // quadrant 4
matrix.plot(xc - x + 1, yc + y , intensity); // quadrant 3
}
}
}

@ -159,7 +159,7 @@ public class GraphPlotter {
x = (xfactor == 0.0) ? width / 2 : (int) (leftborder + (c.x - leftmost) * xfactor);
y = (yfactor == 0.0) ? height / 2 : (int) (height - bottomborder - (c.y - bottommost) * yfactor);
image.setColor(color_dot);
image.dot(x, y, 6, true);
image.dot(x, y, 6, true, 100);
image.setColor(color_text);
PrintTool.print(image, x, y + 10, 0, name.toUpperCase(), 0);
}

@ -98,8 +98,12 @@ public class HexGridPlotter extends RasterPlotter {
}
}
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 gridDot(final int x, final int y, final int radius) {
dot(projectionX(x, y), projectionY(y), radius, true, 100);
}
public void gridDot(final int x, final int y, final int radius, int fromArc, int toArc) {
CircleTool.circle(this, projectionX(x, y), projectionY(y), radius, fromArc, toArc);
}
public void gridPrint(final int x, final int y, final int radius, final String messageHigh, final String messageLow, final int align) {
@ -111,18 +115,36 @@ public class HexGridPlotter extends RasterPlotter {
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) {
public void gridLine(
int Ax, int Ay, final int Bx, final int By
) {
gridLine(Ax, Ay, Bx, By, null, 100, null, 100, -1, -1, -1, false);
}
public void gridLine(
int Ax, int Ay, final int Bx, final int By,
String colorLine, final int intensityLine,
String colorDot, final int intensityDot, int dotDist, int dotPos, int dotRadius, boolean dotFilled
) {
// 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;
int dotc = 0;
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);
if (colorLine != null) this.setColor(colorLine);
plot(x1, y1, (horizontal == 2) ? intensityLine : intensityLine * 8 / 10);
if (dotc == dotPos) {
if (colorDot != null) this.setColor(colorDot);
if (dotRadius > 0) this.dot(x1, y1, dotRadius, dotFilled, intensityDot);
}
dotc++;
if (dotc == dotDist) dotc = 0;
}
}
@ -133,36 +155,36 @@ public class HexGridPlotter extends RasterPlotter {
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);
picture.gridDot(0, 0, 5); 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("33ff33");picture.gridDot(0, i, 3);
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("33ff33");picture.gridDot(i, 0, 3);
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(0, picture.gheight - 1, 5); picture.gridPrint(0, picture.gheight - 1, 5, "0, grid.gheight - 1", "", -1);
picture.gridDot(picture.gwidth - 1, 0, 5); picture.gridPrint(picture.gwidth - 1, 0, 5, "", "grid.gwidth - 1, 0", -1);
picture.gridDot(picture.gwidth - 1, picture.gheight - 1, 5); picture.gridPrint(picture.gwidth - 1, picture.gheight - 1, 5, "grid.gwidth - 1, grid.gheight - 1", "", 1);
picture.gridDot(3, 3, 20, false);
picture.gridDot(3, 3, 20, 0, 360);
picture.gridDot(7, 5, 5, false);
picture.gridDot(7, 5, 5, 0, 360);
picture.gridPrint(7, 5, 8, "COMMUNICATION TEST", "TRANSFER 64KBIT", -1);
picture.gridDot(14, 8, 5, true);
picture.gridDot(14, 8, 5);
picture.gridLine(7, 5, 14, 8);
picture.gridPrint315(14, 8, 8, "NULL");
picture.gridDot(4, 28, 5, false);
picture.gridDot(4, 28, 5, 0, 360);
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.gridDot(picture.gwidth - 1, picture.gheight - 4, 5, 0, 360);
picture.gridPrint(picture.gwidth - 1, picture.gheight - 4, 5, "INTERNET", "END", 1);
picture.gridDot(picture.gwidth / 2, picture.gheight / 2, 5, false);
picture.gridDot(picture.gwidth / 2, picture.gheight / 2, 5, 0, 360);
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);

@ -206,18 +206,33 @@ public class RasterPlotter {
}
public void line(int Ax, int Ay, final int Bx, final int By, final int intensity) {
line(Ax, Ay, Bx, By, null, intensity, null, -1, -1, -1, -1, false);
}
public void line(
int Ax, int Ay, final int Bx, final int By,
String colorLine, final int intensityLine,
String colorDot, final int intensityDot, int dotDist, int dotPos, int dotRadius, boolean dotFilled
) {
// Bresenham's line drawing algorithm
int dX = Math.abs(Bx-Ax);
int dY = Math.abs(By-Ay);
final int Xincr = (Ax > Bx) ? -1 : 1;
final int Yincr = (Ay > By) ? -1 : 1;
int dotc = 0;
if (dX >= dY) {
final int dPr = dY<<1;
final int dPru = dPr - (dX<<1);
int P = dPr - dX;
for (; dX >= 0; dX--) {
plot(Ax, Ay, intensity);
if (colorLine != null) this.setColor(colorLine);
plot(Ax, Ay, intensityLine);
if (dotc == dotPos) {
if (colorDot != null) this.setColor(colorDot);
if (dotRadius > 0) this.dot(Ax, Ay, dotRadius, dotFilled, intensityDot);
}
dotc++;
if (dotc == dotDist) dotc = 0;
if (P > 0) {
Ax += Xincr;
Ay += Yincr;
@ -232,7 +247,14 @@ public class RasterPlotter {
final int dPru = dPr - (dY<<1);
int P = dPr - dY;
for (; dY >= 0; dY--) {
plot(Ax, Ay, intensity);
if (colorLine != null) this.setColor(colorLine);
plot(Ax, Ay, intensityLine);
if (dotc == dotPos) {
if (colorDot != null) this.setColor(colorDot);
if (dotRadius > 0) this.dot(Ax, Ay, dotRadius, dotFilled, intensityDot);
}
dotc++;
if (dotc == dotDist) dotc = 0;
if (P > 0) {
Ax += Xincr;
Ay += Yincr;
@ -269,7 +291,7 @@ public class RasterPlotter {
setColor(lineColor);
line(x0, y0, x3, y3, 100);
setColor(dotColor);
dot(x2, y2, radius, true);
dot(x2, y2, radius, true, 100);
}
public int[] getColor(final int x, final int y) {
@ -277,13 +299,13 @@ public class RasterPlotter {
return grid.getPixel(x, y, c);
}
public void dot(final int x, final int y, final int radius, final boolean filled) {
public void dot(final int x, final int y, final int radius, final boolean filled, int intensity) {
if (filled) {
for (int r = radius; r >= 0; r--) {
CircleTool.circle(this, x, y, r);
CircleTool.circle(this, x, y, r, intensity);
}
} else {
CircleTool.circle(this, x, y, radius);
CircleTool.circle(this, x, y, radius, intensity);
}
}
@ -293,7 +315,8 @@ public class RasterPlotter {
}
}
public void arcLine(final int cx, final int cy, final int innerRadius, final int outerRadius, final int angle) {
public void arcLine(final int cx, final int cy, final int innerRadius, final int outerRadius, final int angle,
String colorLine, String colorDot, int dotDist, int dotPos, int dotRadius, boolean dotFilled) {
final double a = Math.PI * ((double) angle) / 180.0;
final double cosa = Math.cos(a);
final double sina = Math.sin(a);
@ -301,14 +324,19 @@ public class RasterPlotter {
final int yi = cy - (int) (innerRadius * sina);
final int xo = cx + (int) (outerRadius * cosa);
final int yo = cy - (int) (outerRadius * sina);
line(xi, yi, xo, yo, 100);
//line(xi, yi, xo, yo, 100);
line(
xo, yo, xi, yi,
colorLine, 100,
colorDot, 100, dotDist, dotPos, dotRadius, dotFilled
);
}
public void arcDot(final int cx, final int cy, final int arcRadius, final int angle, final int dotRadius) {
final double a = Math.PI * ((double) angle) / 180.0;
final int x = cx + (int) (arcRadius * Math.cos(a));
final int y = cy - (int) (arcRadius * Math.sin(a));
dot(x, y, dotRadius, true);
dot(x, y, dotRadius, true, 100);
}
public void arcConnect(final int cx, final int cy, final int arcRadius, final int angle1, final int angle2) {

Loading…
Cancel
Save