diff --git a/htroot/AccessGrid_p.html b/htroot/AccessGrid_p.html index 45023795e..f015d6750 100644 --- a/htroot/AccessGrid_p.html +++ b/htroot/AccessGrid_p.html @@ -50,7 +50,7 @@ #%env/templates/header.template%# #%env/templates/submenuAccessTracker.template%#

Server Access Grid

- +

This images shows incoming connections to your YaCy peer and outgoing connections from your peer to other peers and web servers

The YaCy Network diff --git a/htroot/AccessPicture_p.java b/htroot/AccessPicture_p.java index 9a8b43c00..bdf3f2e45 100644 --- a/htroot/AccessPicture_p.java +++ b/htroot/AccessPicture_p.java @@ -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,13 +129,20 @@ 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); - 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); + 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); + } } } @@ -146,13 +164,20 @@ 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); - 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); + 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); + } } } @@ -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; diff --git a/htroot/imagetest.java b/htroot/imagetest.java index 4b4e9b717..ce84ed6ba 100644 --- a/htroot/imagetest.java +++ b/htroot/imagetest.java @@ -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; diff --git a/source/de/anomic/yacy/graphics/NetworkGraph.java b/source/de/anomic/yacy/graphics/NetworkGraph.java index 45884ed31..c2e279323 100644 --- a/source/de/anomic/yacy/graphics/NetworkGraph.java +++ b/source/de/anomic/yacy/graphics/NetworkGraph.java @@ -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); diff --git a/source/net/yacy/visualization/ChartPlotter.java b/source/net/yacy/visualization/ChartPlotter.java index aeca8b043..5f2ae1bf0 100644 --- a/source/net/yacy/visualization/ChartPlotter.java +++ b/source/net/yacy/visualization/ChartPlotter.java @@ -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)); } diff --git a/source/net/yacy/visualization/CircleTool.java b/source/net/yacy/visualization/CircleTool.java index 997200f66..3ad9d8b18 100644 --- a/source/net/yacy/visualization/CircleTool.java +++ b/source/net/yacy/visualization/CircleTool.java @@ -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 } } } diff --git a/source/net/yacy/visualization/GraphPlotter.java b/source/net/yacy/visualization/GraphPlotter.java index 146c876cf..abe732947 100644 --- a/source/net/yacy/visualization/GraphPlotter.java +++ b/source/net/yacy/visualization/GraphPlotter.java @@ -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); } diff --git a/source/net/yacy/visualization/HexGridPlotter.java b/source/net/yacy/visualization/HexGridPlotter.java index 25815a51f..f2cabc587 100644 --- a/source/net/yacy/visualization/HexGridPlotter.java +++ b/source/net/yacy/visualization/HexGridPlotter.java @@ -97,9 +97,13 @@ public class HexGridPlotter extends RasterPlotter { } } } + + 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, final boolean filled) { - dot(projectionX(x, y), projectionY(y), radius, filled); + 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); diff --git a/source/net/yacy/visualization/RasterPlotter.java b/source/net/yacy/visualization/RasterPlotter.java index cd5f8194a..7f02ae871 100644 --- a/source/net/yacy/visualization/RasterPlotter.java +++ b/source/net/yacy/visualization/RasterPlotter.java @@ -204,20 +204,35 @@ 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) {