home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VCafe / WDESAMPL.BIN / XYZChemModel.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-11-19  |  3.7 KB  |  245 lines

  1. import java.awt.Graphics;
  2. import java.io.BufferedInputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.StreamTokenizer;
  6. import java.util.Hashtable;
  7.  
  8. class XYZChemModel {
  9.    float[] vert;
  10.    Atom[] atoms;
  11.    int[] tvert;
  12.    int[] ZsortMap;
  13.    int nvert;
  14.    int maxvert;
  15.    static Hashtable atomTable = new Hashtable();
  16.    static Atom defaultAtom;
  17.    boolean transformed;
  18.    Matrix3D mat;
  19.    float xmin;
  20.    float xmax;
  21.    float ymin;
  22.    float ymax;
  23.    float zmin;
  24.    float zmax;
  25.  
  26.    XYZChemModel() {
  27.       this.mat = new Matrix3D();
  28.       this.mat.xrot((double)20.0F);
  29.       this.mat.yrot((double)30.0F);
  30.    }
  31.  
  32.    XYZChemModel(InputStream var1) throws Exception {
  33.       this();
  34.       StreamTokenizer var2 = new StreamTokenizer(new BufferedInputStream(var1, 4000));
  35.       var2.eolIsSignificant(true);
  36.       var2.commentChar(35);
  37.  
  38.       try {
  39.          label41:
  40.          while(true) {
  41.             switch (var2.nextToken()) {
  42.                case -3:
  43.                   String var3 = var2.sval;
  44.                   double var4 = (double)0.0F;
  45.                   double var6 = (double)0.0F;
  46.                   double var8 = (double)0.0F;
  47.                   if (var2.nextToken() == -2) {
  48.                      var4 = var2.nval;
  49.                      if (var2.nextToken() == -2) {
  50.                         var6 = var2.nval;
  51.                         if (var2.nextToken() == -2) {
  52.                            var8 = var2.nval;
  53.                         }
  54.                      }
  55.                   }
  56.  
  57.                   this.addVert(var3, (float)var4, (float)var6, (float)var8);
  58.  
  59.                   while(var2.ttype != 10 && var2.ttype != -1) {
  60.                      var2.nextToken();
  61.                   }
  62.                case -2:
  63.                default:
  64.                   break;
  65.                case -1:
  66.                   var1.close();
  67.                   break label41;
  68.             }
  69.          }
  70.       } catch (IOException var10) {
  71.       }
  72.  
  73.       if (var2.ttype != -1) {
  74.          throw new Exception(var2.toString());
  75.       }
  76.    }
  77.  
  78.    int addVert(String var1, float var2, float var3, float var4) {
  79.       int var5 = this.nvert;
  80.       if (var5 >= this.maxvert) {
  81.          if (this.vert == null) {
  82.             this.maxvert = 100;
  83.             this.vert = new float[this.maxvert * 3];
  84.             this.atoms = new Atom[this.maxvert];
  85.          } else {
  86.             this.maxvert *= 2;
  87.             float[] var6 = new float[this.maxvert * 3];
  88.             System.arraycopy(this.vert, 0, var6, 0, this.vert.length);
  89.             this.vert = var6;
  90.             Atom[] var7 = new Atom[this.maxvert];
  91.             System.arraycopy(this.atoms, 0, var7, 0, this.atoms.length);
  92.             this.atoms = var7;
  93.          }
  94.       }
  95.  
  96.       Atom var9 = (Atom)atomTable.get(var1.toLowerCase());
  97.       if (var9 == null) {
  98.          var9 = defaultAtom;
  99.       }
  100.  
  101.       this.atoms[var5] = var9;
  102.       var5 *= 3;
  103.       this.vert[var5] = var2;
  104.       this.vert[var5 + 1] = var3;
  105.       this.vert[var5 + 2] = var4;
  106.       return this.nvert++;
  107.    }
  108.  
  109.    void transform() {
  110.       if (!this.transformed && this.nvert > 0) {
  111.          if (this.tvert == null || this.tvert.length < this.nvert * 3) {
  112.             this.tvert = new int[this.nvert * 3];
  113.          }
  114.  
  115.          this.mat.transform(this.vert, this.tvert, this.nvert);
  116.          this.transformed = true;
  117.       }
  118.    }
  119.  
  120.    void paint(Graphics var1) {
  121.       if (this.vert != null && this.nvert > 0) {
  122.          this.transform();
  123.          int[] var2 = this.tvert;
  124.          int[] var3 = this.ZsortMap;
  125.          if (var3 == null) {
  126.             this.ZsortMap = var3 = new int[this.nvert];
  127.             int var4 = this.nvert;
  128.  
  129.             while(true) {
  130.                --var4;
  131.                if (var4 < 0) {
  132.                   break;
  133.                }
  134.  
  135.                var3[var4] = var4 * 3;
  136.             }
  137.          }
  138.  
  139.          int var9 = this.nvert - 1;
  140.  
  141.          boolean var5;
  142.          do {
  143.             --var9;
  144.             if (var9 < 0) {
  145.                break;
  146.             }
  147.  
  148.             var5 = 0;
  149.  
  150.             for(int var6 = 0; var6 <= var9; ++var6) {
  151.                int var7 = var3[var6];
  152.                int var8 = var3[var6 + 1];
  153.                if (var2[var7 + 2] > var2[var8 + 2]) {
  154.                   var3[var6 + 1] = var7;
  155.                   var3[var6] = var8;
  156.                   var5 = 1;
  157.                }
  158.             }
  159.          } while(var5);
  160.  
  161.          var5 = this.nvert;
  162.          if (var5 > 0 && this.nvert > 0) {
  163.             for(int var11 = 0; var11 < var5; ++var11) {
  164.                int var12 = var3[var11];
  165.                int var13 = var2[var12 + 2];
  166.                if (var13 < 0) {
  167.                   var13 = 0;
  168.                }
  169.  
  170.                if (var13 > 15) {
  171.                   var13 = 15;
  172.                }
  173.  
  174.                this.atoms[var12 / 3].paint(var1, var2[var12], var2[var12 + 1], var13);
  175.             }
  176.  
  177.          }
  178.       }
  179.    }
  180.  
  181.    void findBB() {
  182.       if (this.nvert > 0) {
  183.          float[] var1 = this.vert;
  184.          float var2 = var1[0];
  185.          float var3 = var2;
  186.          float var4 = var1[1];
  187.          float var5 = var4;
  188.          float var6 = var1[2];
  189.          float var7 = var6;
  190.          int var8 = this.nvert * 3;
  191.  
  192.          while(true) {
  193.             var8 -= 3;
  194.             if (var8 <= 0) {
  195.                this.xmax = var3;
  196.                this.xmin = var2;
  197.                this.ymax = var5;
  198.                this.ymin = var4;
  199.                this.zmax = var7;
  200.                this.zmin = var6;
  201.                return;
  202.             }
  203.  
  204.             float var9 = var1[var8];
  205.             if (var9 < var2) {
  206.                var2 = var9;
  207.             }
  208.  
  209.             if (var9 > var3) {
  210.                var3 = var9;
  211.             }
  212.  
  213.             float var10 = var1[var8 + 1];
  214.             if (var10 < var4) {
  215.                var4 = var10;
  216.             }
  217.  
  218.             if (var10 > var5) {
  219.                var5 = var10;
  220.             }
  221.  
  222.             float var11 = var1[var8 + 2];
  223.             if (var11 < var6) {
  224.                var6 = var11;
  225.             }
  226.  
  227.             if (var11 > var7) {
  228.                var7 = var11;
  229.             }
  230.          }
  231.       }
  232.    }
  233.  
  234.    static {
  235.       atomTable.put("c", new Atom(0, 0, 0));
  236.       atomTable.put("h", new Atom(210, 210, 210));
  237.       atomTable.put("n", new Atom(0, 0, 255));
  238.       atomTable.put("o", new Atom(255, 0, 0));
  239.       atomTable.put("p", new Atom(255, 0, 255));
  240.       atomTable.put("s", new Atom(255, 255, 0));
  241.       atomTable.put("hn", new Atom(150, 255, 150));
  242.       defaultAtom = new Atom(255, 100, 200);
  243.    }
  244. }
  245.