// Arc.java // Function block for block diagram animation // import java.awt.*; public class Arc implements DrawingObj { int x[], y[]; // Position of Arc int width; // Width of Arc boolean plus, sumPoint; // plus/minus sign towards SummingPoints boolean PaintMove; Color cur_colour; int cnt, max; FunctionBlock fbk; LabelledBox lb; SummingPoint spt; Node start, end; // Start and end of each Arc public Arc( int width, boolean plus, boolean sumPoint,Node start, Node end ) { this.width = width; //w = width; this.plus = plus; this.sumPoint = sumPoint; cur_colour = Color.green; max =4 ; x = new int[ max ]; y = new int[ max ]; cnt = 0; this.start = start; this.end = end; } public void setColour(Color c) { cur_colour = c; } Node getStart() { return start; } void setStart( Node start ) { this.start = start; } Node getEnd() { return end; } void setEnd( Node start ) { this.start = start; } public void addPoint( int x, int y ) { if ( cnt < max ) { this.x[cnt] = x; this.y[cnt] = y; cnt++; } else { // Create a larger array and copy the old points } } public void move (int x, int y) { int i, dx, dy; dx = x - this.x[0]; dy = y - this.y[0]; for ( i = 0; i < cnt; i++ ) { this.x[i] = this.x[i] + dx; this.y[i] = this.y[i] + dy; } } public void moveOffset (int dx, int dy) { int i; for ( i = 0; i < cnt; i++ ) { this.x[i] = this.x[i] + dx ; this.y[i] = this.y[i] + dy ; } } public int getX() { return x[0]; } public int getY() { return y[0]; } public void draw( Graphics g ) { int lx, ly, lx2, ly2, last_dirn, j, i; int arrowx_i, arrowx_j, arrowx_k; int arrowy_i, arrowy_j, arrowy_k; Dimension start_pt; String p_or_m; g.setColor( cur_colour ); g.drawPolyline( x, y, cnt ); lx = x[cnt-1]; ly = y[cnt-1]; lx2 = x[cnt-2]; ly2 = y[cnt-2]; //Draw arrow head // initialized direction to point right last_dirn = -1; i = -10; j = 13; // Refining position of + / - sign arrowx_i = -5; arrowx_j = -5; arrowx_k = 0; arrowy_i = -5; arrowy_j = 5; arrowy_k = 0; //Pointing Left if ((ly == ly2) && (lx2 > lx)) { last_dirn = 1; i = 5; arrowx_i = 5; arrowx_j = 5; arrowx_k = 0; arrowy_i = -5; arrowy_j = 5; arrowy_k = 0; } //Pointing Up else if ((lx == lx2) && (ly2 > ly)) { last_dirn = 2; i = 5; arrowx_i = -5; arrowx_j = 5; arrowx_k = 0; arrowy_i = 5; arrowy_j = 5; arrowy_k = 0; } //Pointing Down else if ((lx == lx2) && (ly2 < ly)) { last_dirn = -2; j = -5; arrowx_i = -5; arrowx_j = 5; arrowx_k = 0; arrowy_i = -5; arrowy_j = -5; arrowy_k = 0; } Object s_pt = end.getObject(); start_pt = ((DrawingObj)s_pt).getLimit( last_dirn ); int[] arrowx = {start_pt.width + arrowx_i, start_pt.width + arrowx_j, start_pt.width + arrowx_k}; int[] arrowy = {start_pt.height + arrowy_i, start_pt.height + arrowy_j, start_pt.height + arrowy_k}; g.fillPolygon(arrowx, arrowy, 3); g.setColor( Color.black ); if (sumPoint) { if ( plus ) { p_or_m = "+"; } else { p_or_m = "-"; } g.drawString( p_or_m, start_pt.width+i, start_pt.height+j ); } } public Dimension getLimit( int dirn ) { return new Dimension( 0, 0 ); } }