📄 selfedge.java
字号:
package edu.odu.cs.zeil.AlgAE.Client.DataViewer.DataGraph;import edu.odu.cs.zeil.AlgAE.Debug;import edu.odu.cs.zeil.AlgAE.Direction;import edu.odu.cs.zeil.AlgAE.Client.DataViewer.DataGraph.Edge;import edu.odu.cs.zeil.AlgAE.Client.DataViewer.DataGraph.Edgeable;import edu.odu.cs.zeil.AlgAE.Client.GraphicsInfo;import java.awt.Color;import java.awt.FontMetrics;import java.awt.Graphics;import java.awt.Point;import java.awt.Polygon; /** * A self edge is an edge that from a node to itself. * * * @see NullEdge * @see LinearEdge */public class SelfEdge extends Edge{ SelfEdge(Edgeable srcdest, int direction, Color colour, String edgeLabel) { //pre: srcdest != null super (srcdest, srcdest, direction, colour, edgeLabel); } Point entryPoint() { return exitPoint(); } void draw(GraphicsInfo gi) { Graphics g = gi.g; Point sourcePt = null; if (source.position() != null) { // For directional edges, draw a small circle at the // exit point. sourcePt = exitPoint(); if (dir != Direction.ANYDIR) { // Draw a small circle at the exit point. drawExitPoint (gi, sourcePt); } else { sourcePt = source.exitPoint(Direction.SE); } g.setColor (color); Point destPt = new Point(sourcePt); switch (dir) { case Direction.NNW: case Direction.N: destPt.x += gi.getTextOffset().width; g.drawArc (sourcePt.x, sourcePt.y-2*gi.getTextOffset().width, gi.getTextOffset().width, 4*gi.getTextOffset().width, 0, 180); sourcePt.x = destPt.x; --sourcePt.y; drawArrowHead (destPt, sourcePt, gi); break; case Direction.NNE: case Direction.NE: destPt.x -= gi.getTextOffset().width; g.drawArc (destPt.x, sourcePt.y-2*gi.getTextOffset().width, gi.getTextOffset().width, 4*gi.getTextOffset().width, 0, 180); sourcePt.x = destPt.x; --sourcePt.y; drawArrowHead (destPt, sourcePt, gi); break; case Direction.ENE: case Direction.E: destPt.y += gi.getTextOffset().width; g.drawArc (sourcePt.x-2*gi.getTextOffset().width, sourcePt.y, 4*gi.getTextOffset().width, gi.getTextOffset().width, 270, 180); sourcePt.y = destPt.y; ++sourcePt.x; drawArrowHead (destPt, sourcePt, gi); break; case Direction.ESE: case Direction.SE: case Direction.ANYDIR: destPt.y -= gi.getTextOffset().width; g.drawArc (sourcePt.x-2*gi.getTextOffset().width, destPt.y, 4*gi.getTextOffset().width, gi.getTextOffset().width, 270, 180); sourcePt.y = destPt.y; ++sourcePt.x; drawArrowHead (destPt, sourcePt, gi); break; case Direction.SSE: case Direction.S: destPt.x -= gi.getTextOffset().width; g.drawArc (destPt.x, sourcePt.y-2*gi.getTextOffset().width, gi.getTextOffset().width, 4*gi.getTextOffset().width, 180, 180); sourcePt.x = destPt.x; ++sourcePt.y; drawArrowHead (destPt, sourcePt, gi); break; case Direction.SSW: case Direction.SW: destPt.x += gi.getTextOffset().width; g.drawArc (sourcePt.x, sourcePt.y-2*gi.getTextOffset().width, gi.getTextOffset().width, 4*gi.getTextOffset().width, 180, 180); sourcePt.x = destPt.x; ++sourcePt.y; drawArrowHead (destPt, sourcePt, gi); break; case Direction.WSW: case Direction.W: destPt.y -= gi.getTextOffset().width; g.drawArc (sourcePt.x-2*gi.getTextOffset().width, destPt.y, 4*gi.getTextOffset().width, gi.getTextOffset().width, 90, 180); sourcePt.y = destPt.y; --sourcePt.x; drawArrowHead (destPt, sourcePt, gi); break; case Direction.WNW: case Direction.NW: destPt.y += gi.getTextOffset().width; g.drawArc (sourcePt.x-2*gi.getTextOffset().width, sourcePt.y, 4*gi.getTextOffset().width, gi.getTextOffset().width, 90, 180); sourcePt.y = destPt.y; --sourcePt.x; drawArrowHead (destPt, sourcePt, gi); break; } if (label != null && label.length() != 0) { FontMetrics fm = gi.g.getFontMetrics(); int labelwidth = fm.stringWidth(label); int labelheight = fm.getAscent(); switch (dir) { case Direction.NNW: case Direction.N: case Direction.NNE: case Direction.NE: g.drawString (label, destPt.x - labelwidth/2, destPt.y - gi.getTextOffset().height*5/2); break; case Direction.ENE: case Direction.E: case Direction.ESE: case Direction.SE: case Direction.ANYDIR: g.drawString (label, destPt.x + gi.getTextOffset().width * 5/2, destPt.y); break; case Direction.SSE: case Direction.S: case Direction.SSW: case Direction.SW: g.drawString (label, sourcePt.x - labelwidth/2, sourcePt.y + gi.getTextOffset().height * 2 + labelheight); break; case Direction.WSW: case Direction.W: case Direction.WNW: case Direction.NW: g.drawString (label, sourcePt.x - gi.getTextOffset().width * 5/2 - labelwidth, sourcePt.y); break; } } } } double length() { return 0.0; } double positionScore(double targetLength) { return 0.0; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -