home *** CD-ROM | disk | FTP | other *** search
/ Java Programmer's Toolkit / Java Programmer's Toolkit.iso / solaris2 / book / applets / escher / escherpa.jav < prev    next >
Encoding:
Text File  |  1995-09-16  |  4.4 KB  |  246 lines

  1. import java.awt.*;
  2. import java.util.Hashtable;
  3. import java.io.*;
  4. import java.net.*;
  5.  
  6. public class escherpaint extends java.applet.Applet {
  7.   generic_paint paint;
  8.   int size=2;
  9.   int linex[],liney[];
  10.   public boolean cut[];
  11.   int l=0;
  12.   int sym;
  13.   boolean keydown=false;
  14. boolean clear=false;
  15.  int last=0;
  16.  
  17.   public void init() {
  18.  
  19.     resize(300,300);
  20.  
  21.     linex = new int[5000];
  22.     liney = new int[5000];
  23.     cut =new boolean[5000];
  24.     paint = new generic_paint(100,100);
  25.     sym=0;
  26.  
  27.     requestFocus();
  28.  
  29.   }
  30.   public void end(){
  31.   }
  32.   public void stop(){
  33.   }
  34.   public void update(Graphics g) {
  35.     escher(g);
  36.   }
  37.   public void paint(Graphics g) {
  38.     escher(g);
  39.   } 
  40.   public void escher(Graphics g){
  41.  
  42.     if(clear){
  43.       g.setColor(java.awt.Color.lightGray);
  44.       g.fillRect(0,0,size().width,size().height);
  45.     clear=false;
  46.     }
  47.       g.setColor(java.awt.Color.black);
  48.       g.draw3DRect(0, 0, size().width-1, size().height-1,true);
  49.       
  50.     int x0=0,x1=0,y0=0,y1=0;
  51.     int sodd=0,todd=0;
  52.     int X0,X1,Y0,Y1;
  53.  
  54.       for (int i=last;i<l-1;i++){
  55.  
  56.     if(!cut[i]){
  57.  
  58.  
  59.       for (int s=1;s<8;s++){
  60.       for (int t=1;t<8;t++){
  61.         sodd = s%2;
  62.         todd = t%2;
  63.         if(sodd==0 && todd==0){
  64.         x0=linex[i];
  65.         y0=liney[i];
  66.         x1=linex[i+1];
  67.         y1=liney[i+1];
  68.         } else if(sodd==0 && todd==1){
  69.       if(sym==0){
  70.         x0=linex[i];
  71.         y0=liney[i];
  72.         x1=linex[i+1];
  73.         y1=liney[i+1];
  74.       } else if(sym==1){
  75.         x0=100-linex[i];
  76.         y0=liney[i];
  77.         x1=100-linex[i+1];
  78.         y1=liney[i+1];
  79.       } else if(sym==2){
  80.         x0=100-liney[i];
  81.         y0=linex[i];
  82.         x1=100-liney[i+1];
  83.         y1=linex[i+1];
  84.       } else if(sym==3){
  85.         x0=100-linex[i];
  86.         y0=liney[i];
  87.         x1=100-linex[i+1];
  88.         y1=liney[i+1];
  89.       }
  90.         } else if(sodd==1 && todd==0){
  91.       if(sym==0){
  92.         x0=linex[i];
  93.         y0=liney[i];
  94.         x1=linex[i+1];
  95.         y1=liney[i+1];
  96.       } else if(sym==1){
  97.         x0=linex[i];
  98.         y0=liney[i];
  99.         x1=linex[i+1];
  100.         y1=liney[i+1];
  101.       } else if(sym==2){
  102.         x0=liney[i];
  103.         y0=100-linex[i];
  104.         x1=liney[i+1];
  105.         y1=100-linex[i+1];
  106.       } else if(sym==3){
  107.         x0=linex[i];
  108.         y0=100-liney[i];
  109.         x1=linex[i+1];
  110.         y1=100-liney[i+1];
  111.       }
  112.         } else if(sodd==1 && todd==1){
  113.       if(sym==0){
  114.         x0=linex[i];
  115.         y0=liney[i];
  116.         x1=linex[i+1];
  117.         y1=liney[i+1];
  118.       } else if(sym==1){
  119.         x0=100-linex[i];
  120.         y0=liney[i];
  121.         x1=100-linex[i+1];
  122.         y1=liney[i+1];
  123.       } else if(sym==2){
  124.         x0=100-linex[i];
  125.         y0=100-liney[i];
  126.         x1=100-linex[i+1];
  127.         y1=100-liney[i+1];
  128.       } else if(sym==3){
  129.         x0=100-linex[i];
  130.         y0=100-liney[i];
  131.         x1=100-linex[i+1];
  132.         y1=100-liney[i+1];
  133.       }
  134.         }
  135.         X0=x0+(s-4)*100;
  136.         X1=x1+(s-4)*100;
  137.         Y0=y0+(t-4)*100;
  138.         Y1=y1+(t-4)*100;
  139.         g.drawLine(X0,Y0,X1,Y1);
  140.         g.drawLine(X0+1,Y0,X1+1,Y1);
  141.         g.drawLine(X0,Y0+1,X1,Y1+1);
  142.         g.drawLine(X0+1,Y0+1,X1+1,Y1+1);
  143.         paint.drawLine(X0,Y0,X1,Y1);
  144.         paint.drawLine(X0+1,Y0,X1+1,Y1);
  145.         paint.drawLine(X0,Y0+1,X1,Y1+1);
  146.         paint.drawLine(X0+1,Y0+1,X1+1,Y1+1);
  147.       }}
  148.     }
  149.       }
  150.   }
  151.  
  152.   public void sendImage(){
  153.       try {
  154.  
  155.         URL url = new URL("http://www.neuro.sfc.keio.ac.jp/aly/hotjava/upload/whiteup.cgi?sym="+sym+"&size=100&image="+paint.string());
  156.         getAppletContext().showDocument(url);
  157.     clear();
  158.       } catch (IOException e) {
  159.       e.printStackTrace();
  160.       }
  161.   }
  162.  
  163.   public boolean mouseDown(java.awt.Event evt, int x, int y) {
  164.  
  165.     linex[l]=x;
  166.     liney[l]=y;
  167.     cut[l]=false;
  168.     int dx=0,dy=0;
  169.     boolean change=false;
  170.     l++;
  171.  
  172.     if(l>1){
  173.     if((liney[l-2]-liney[l-1])>80){
  174.         dy=100;    change=true;
  175.     } else if((liney[l-1]-liney[l-2])>80){
  176.         dy=-100; change=true;    
  177.     }
  178.     if((linex[l-2]-linex[l-1])>80){
  179.         dx=100;    change=true;
  180.     } else if((linex[l-1]-linex[l-2])>80){
  181.         dx=-100; change=true;
  182.     }
  183.     }
  184.     if(change){
  185.     linex[l-1]=x+dx;
  186.     liney[l-1]=y+dy;
  187.     cut[l-1]=true;
  188.  
  189.     linex[l]=x;
  190.     liney[l]=y;
  191.     cut[l]=false;
  192.     l++;
  193.     }
  194.     repaint();
  195.     return true;
  196.   }
  197.   public boolean mouseDrag(java.awt.Event evt, int x, int y) {
  198.     return mouseDown(evt, x,y);
  199.   }
  200.   public boolean mouseExit(java.awt.Event evt){
  201.     paint.cut();
  202.     last=l;
  203.     return true;
  204.   }
  205.   public boolean mouseUp(java.awt.Event evt, int x,int y){
  206.     cut[l-1]=true;
  207.     paint.cut();
  208.     last=l;
  209.     return true;
  210.   }
  211.   public boolean keyDown(java.awt.Event evt, int key){
  212.         char c=(char)key;
  213.     if(c=='4'){
  214.         sym=0;
  215.         flush();
  216.     } else if(c=='1'){
  217.         sym=1;
  218.         flush();
  219.     } else if(c=='2'){
  220.         sym=2;
  221.         flush();
  222.     } else if(c=='3'){
  223.         sym=3;
  224.         flush();
  225.         } else if(c=='s'){
  226.                 sendImage();
  227.         } else if(c=='r'){
  228.         flush();
  229.         } else if(c=='c'){
  230.         clear();
  231.     }
  232.     keydown=true;
  233.     repaint();
  234.     return true;
  235.   }
  236.   public void flush (){
  237.         paint.clear();
  238.         clear=true;
  239.         last=0;        
  240.   }
  241.   public void clear (){
  242.     flush();
  243.     l=0;
  244.   }
  245. }
  246.