You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.2 KiB
Java
84 lines
2.2 KiB
Java
// TransmissionSymbol.java
|
|
|
|
package simulator;
|
|
|
|
import java.awt.*;
|
|
import support.ProtocolEvent;
|
|
|
|
/**
|
|
This is the class for a general transmission symbol.
|
|
|
|
@author Iain A. Robin, Kenneth J. Turner
|
|
@version 1.0 (1st September 1999, IAR): initial version <br/>
|
|
<br/> 1.5 (22nd July 2010, KJT): minor tidying
|
|
*/
|
|
public abstract class TransmissionSymbol extends TSDSymbol {
|
|
|
|
/** Left-to-right (if true, else right-to-left) */
|
|
protected boolean lToR;
|
|
|
|
/** Dash length */
|
|
protected int dashLength = 6;
|
|
|
|
/**
|
|
Constructor for a transmission symbol
|
|
|
|
@param event protocol event
|
|
@param lToR left-to-right (if true, else right-to-left)
|
|
@param col column
|
|
@param top top of service primitive
|
|
@param height height of successful transmission
|
|
*/
|
|
public TransmissionSymbol(
|
|
ProtocolEvent event, boolean lToR, int col, int top, int height) {
|
|
super(event, col, top);
|
|
this.lToR = lToR;
|
|
this.height = height;
|
|
}
|
|
|
|
/**
|
|
Draw a dashed line from (x1, y1) to (x2, y2) using the given dash length for
|
|
the lines and graps of the dash.
|
|
|
|
@param g graphics object
|
|
@param x1 initial X-coordinate
|
|
@param y1 initial Y-coordinate
|
|
@param x2 final X-coordinate
|
|
@param y2 final Y-coordinate
|
|
@param dashLength dash length
|
|
*/
|
|
protected void drawDashedLine(
|
|
Graphics g, int x1, int y1, int x2, int y2, int dashLength) {
|
|
float x0 = x1;
|
|
float y0 = y1;
|
|
float x = 0.0f;
|
|
float y = 0.0f;
|
|
float s = 0.0f;
|
|
int deltaX = x2 - x1;
|
|
int deltaY = y2 - y1;
|
|
float length = (float) (Math.sqrt(deltaX * deltaX + deltaY * deltaY));
|
|
float dx = dashLength * deltaX / length;
|
|
float dy = dashLength * deltaY / length;
|
|
x += dx / 2;
|
|
y += dy / 2;
|
|
float ds = (float) (Math.sqrt(dx * dx + dy * dy));
|
|
while (s <= length - ds) {
|
|
g.drawLine(
|
|
Math.round(x + x0), Math.round(y + y0),
|
|
Math.round(x + x0 + dx), Math.round(y + y0 + dy));
|
|
x += 2 * dx;
|
|
y += 2 * dy;
|
|
s += 2 * ds;
|
|
}
|
|
}
|
|
|
|
/**
|
|
Empty draw method to be overridden.
|
|
|
|
@param g graphics object
|
|
*/
|
|
public abstract void draw(Graphics g);
|
|
|
|
}
|
|
|