//Name: Agree.java //Version: 1.1 //Created by: Ferdi Hellweger // Center for Resarch in Water Resources // The University of Texas at Austin // ferdi@crwr.utexas.edu //Created on: 10/14/96 //Description: This applet illustrates the surface reconditioning methodology. // //------------------------- //------------------------- //--- import some stuff --- //------------------------- //------------------------- // import java.awt.*; import java.applet.*; import java.lang.*; // //------------------------------- //------------------------------- //--- applet class definition --- //------------------------------- //------------------------------- // public class Agree extends Applet { // //------------------------- //--- declare variables --- //------------------------- // Label lhead, lsmooth, lsharp, lbuffer, ldummy1; TextField fsmooth, fsharp, fbuffer; Panel north, east, south, west, center; Button bcalculate; int oelev[], melev[], spos, selevsmooth, selevsharp, blelev, brelev, sdist, bdist, blpos, brpos; int mode, dragx, dragy, movenode, error; double nodedist, streamdist, lowdist, dsmooth, dsharp, dbuffer; Double Dsmooth, Dsharp, Dbuffer; String ssmooth, ssharp, sbuffer; // //--------------------------- //--- initiate the applet --- //--------------------------- // public void init() { // //--- main display --- // setBackground(Color.lightGray); setLayout(new BorderLayout(10,10)); // north = new Panel(); north.setBackground(Color.lightGray); north.setLayout(new GridLayout(1,2,10,10)); add("North", north); // east = new Panel(); east.setBackground(Color.lightGray); east.setLayout(new GridLayout(1,2,10,10)); add("East", east); // south = new Panel(); south.setBackground(Color.lightGray); south.setLayout(new GridLayout(2, 4, 10,10)); add("South", south); // west = new Panel(); west.setBackground(Color.lightGray); west.setLayout(new GridLayout(1,2,10,10)); add("West", west); // lhead = new Label("AGREE METHOD (V1.1)", Label.LEFT); lsmooth = new Label("Smooth [ft]", Label.RIGHT); lsharp = new Label("Sharp [ft]", Label.RIGHT); lbuffer = new Label("Buffer [cells]", Label.RIGHT); ldummy1 = new Label(" ", Label.RIGHT); // fsmooth = new TextField("-10", 5); fsharp = new TextField("-5", 5); fbuffer = new TextField("7", 5); // bcalculate = new Button("Calculate"); // north.add(lhead); // south.add(lsmooth); south.add(fsmooth); south.add(lbuffer); south.add(fbuffer); south.add(lsharp); south.add(fsharp); south.add(ldummy1); south.add(bcalculate); // //--- dimensions --- // oelev = new int[25]; melev = new int[25]; // //--- default data --- // oelev[0] = 145; oelev[1] = 147; oelev[2] = 149; oelev[3] = 151; oelev[4] = 155; oelev[5] = 166; oelev[6] = 170; oelev[7] = 180; oelev[8] = 185; oelev[9] = 189; oelev[10] = 175; oelev[11] = 170; oelev[12] = 176; oelev[13] = 171; oelev[14] = 170; oelev[15] = 170; oelev[16] = 170; oelev[17] = 166; oelev[18] = 166; oelev[19] = 166; oelev[20] = 150; oelev[21] = 155; oelev[22] = 156; oelev[23] = 150; oelev[24] = 150; // spos = 12; } // //------------------------- //--- mouse down method --- //------------------------- // public boolean mouseDown(Event evt, int x, int y) { // //--- get closest grid cell --- // nodedist = 1000; movenode = 0; for (int i = 0; i < 25; i++) { if ((x > ((i * 20) + 60 - 10)) && (x < ((i * 20) + 60 + 10))) { nodedist = java.lang.Math.sqrt(java.lang.Math.pow((oelev[i] - y), 2)); movenode = i; } } // //--- get stream distance --- // streamdist = 1000; if ((y > 50) && (y < 300)) { streamdist = java.lang.Math.sqrt(java.lang.Math.pow((((spos * 20) + 60) - x), 2)); } // //--- determine what gets moved --- // //mode 0 = nothing //mode 1 = node //mode 2 = stream // mode = 0; if ( nodedist < 5 ) { mode = 1; } if ( streamdist < 5 ) { mode = 2; } // return true; } // //------------------------- //--- mouse drag method --- //------------------------- // public boolean mouseDrag(Event evt, int x, int y) { dragx = x; dragy = y; repaint(); return true; } // //----------------------- //--- mouse up method --- //----------------------- // public boolean mouseUp(Event evt, int x, int y) { // //--- action for move grid cell --- // if (mode == 1) { if ((y > 50) && (y < 300)) { oelev[movenode] = y; } mode = 0; } // //--- action for move stream --- // if (mode == 2) { for (int i = 1; i < 24; i++) { if ((x > ((i * 20) + 60 - 10)) && (x < ((i * 20) + 60 + 10))) { spos = i; } } mode = 0; } // //--- update display --- // repaint(); // return true; } // //-------------------- //--- paint method --- //-------------------- // public void paint(Graphics g) { // //--- grid --- // g.setColor(Color.gray); g.drawRect(50, 50, 500, 250); for (int i = 0; i < 26; i++) { g.drawLine(((i * 20) + 50), 50, ((i * 20) + 50), 300); } for (int i = 0; i < 13; i++) { g.drawLine(46, ((i * 20) + 60), 50, ((i * 20) + 60)); } for (int i = 0; i < 26; i++) { g.drawLine(48, ((i * 10) + 50), 50, ((i * 10) + 50)); } g.drawString("Elevation [ft]", 10, 45); g.drawString("120", 23, 66); g.drawString("110", 23, 86); g.drawString("100", 23, 106); g.drawString(" 90", 23, 126); g.drawString(" 80", 23, 146); g.drawString(" 70", 23, 166); g.drawString(" 60", 23, 186); g.drawString(" 50", 23, 206); g.drawString(" 40", 23, 226); g.drawString(" 30", 23, 246); g.drawString(" 20", 23, 266); g.drawString(" 10", 23, 286); g.drawString(" 0", 23, 306); // //--- legend --- // g.setColor(Color.black); g.drawString("Original Surface", 445, 65); g.drawString("Modified Surface", 445, 82); g.drawString("Stream", 445, 99); g.setColor(Color.black); g.drawLine(420, 60, 440, 60); g.setColor(Color.green); g.drawLine(420, 77, 440, 77); g.setColor(Color.blue); g.drawLine(420, 94, 440, 94); // //--- original surface --- // g.setColor(Color.black); g.drawLine((0 + 60 - 10), oelev[0], (0 + 60 + 10), oelev[0]); for (int i = 1; i < 24; i++) { g.drawLine(((i * 20) + 60 - 10), oelev[(i)], ((i * 20) + 60 + 10), oelev[i]); g.drawLine(((i * 20) + 60 - 10), oelev[(i - 1)], ((i * 20) + 60 - 10), oelev[i]); } g.drawLine(((24 * 20) + 60 - 10), oelev[24], ((24 * 20) + 60 + 10), oelev[24]); g.drawLine(((24 * 20) + 60 - 10), oelev[23], ((24 * 20) + 60 - 10), oelev[24]); // //--- modified surface --- // g.setColor(Color.green); g.drawLine((0 + 60 - 10), melev[0], (0 + 60 + 10), melev[0]); for (int i = 1; i < 24; i++) { g.drawLine(((i * 20) + 60 - 10), melev[(i)], ((i * 20) + 60 + 10), melev[i]); g.drawLine(((i * 20) + 60 - 10), melev[(i - 1)], ((i * 20) + 60 - 10), melev[i]); } g.drawLine(((24 * 20) + 60 - 10), melev[24], ((24 * 20) + 60 + 10), melev[24]); g.drawLine(((24 * 20) + 60 - 10), melev[23], ((24 * 20) + 60 - 10), melev[24]); // //--- stream --- // g.setColor(Color.blue); g.drawLine(((spos * 20) + 60), 50, ((spos * 20) + 60), 300); // //--- cursor --- // g.setColor(Color.yellow); if (mode == 1) { // //new elevation // if (movenode == 0) { g.drawLine(((movenode * 20) + 60 - 10), dragy, ((movenode * 20) + 60 + 10), dragy); g.drawLine(((movenode * 20) + 60 + 10), dragy, ((movenode * 20) + 60 + 10), oelev[(movenode + 1)]); } if ((movenode > 0) && (movenode < 24)) { g.drawLine(((movenode * 20) + 60 - 10), dragy, ((movenode * 20) + 60 + 10), dragy); g.drawLine(((movenode * 20) + 60 - 10), dragy, ((movenode * 20) + 60 - 10), oelev[(movenode - 1)]); g.drawLine(((movenode * 20) + 60 + 10), dragy, ((movenode * 20) + 60 + 10), oelev[(movenode + 1)]); } if (movenode == 24) { g.drawLine(((movenode * 20) + 60 - 10), dragy, ((movenode * 20) + 60 + 10), dragy); g.drawLine(((movenode * 20) + 60 - 10), dragy, ((movenode * 20) + 60 - 10), oelev[(movenode - 1)]); } } if (mode == 2) { g.drawLine(dragx, 50, dragx, 300); } } //-------------- //--- action --- //-------------- public boolean action(Event evt, Object arg) { if (arg.equals("Calculate")) { // //get string values from text fields // ssmooth = fsmooth.getText(); ssharp = fsharp.getText(); sbuffer = fbuffer.getText(); // //convert string values to numbers // Dsmooth = Double.valueOf(ssmooth); dsmooth = Dsmooth.doubleValue(); Dsharp = Double.valueOf(ssharp); dsharp = Dsharp.doubleValue(); Dbuffer = Double.valueOf(sbuffer); dbuffer = Dbuffer.doubleValue(); // error = 0; // //get and check buffer positions // blpos = (spos - (int) dbuffer); brpos = (spos + (int) dbuffer); if ( blpos < 0 ) { error = 1; fbuffer.setText("Error"); } if ( brpos > 24 ) { error = 1; fbuffer.setText("Error"); } // //get and check smooth stream elevation // selevsmooth = (oelev[spos] - (int) dsmooth); if ( selevsmooth > 300 ) { error = 1; fsmooth.setText("Error"); } if ( selevsmooth < 50 ) { error = 1; fsmooth.setText("Error"); } // //get and check sharp stream elevation // selevsharp = (selevsmooth - (int) dsharp); if ( selevsharp > 300 ) { error = 1; fsharp.setText("Error"); } if ( selevsharp < 50 ) { error = 1; fsharp.setText("Error"); } if ( error == 0 ) { // //get buffer elevations // blelev = oelev[blpos]; brelev = oelev[brpos]; // //calculate smooth modified elevation // for (int i = 0; i <= blpos; i++) { melev[i] = oelev[i]; } for (int i = (blpos + 1); i < spos; i++) { bdist = (i - blpos); sdist = (spos - i); melev[i] = (selevsmooth + (int) (((blelev - selevsmooth) / (bdist + sdist)) * sdist)); } melev[spos] = selevsmooth; for (int i = (spos + 1); i < brpos ; i++) { bdist = (brpos - i); sdist = (i - spos); melev[i] = (selevsmooth + (int) (((brelev - selevsmooth) / (bdist + sdist)) * sdist)); } for (int i = (brpos); i < 25; i++) { melev[i] = oelev[i]; } // //calculate sharp modified elevation // melev[spos] = selevsharp; } // //redraw // repaint(); } return true; } }