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 / Model3D.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-09-18  |  4.1 KB  |  322 lines

  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.StreamTokenizer;
  6.  
  7. class Model3D {
  8.    float[] vert;
  9.    int[] tvert;
  10.    int nvert;
  11.    int maxvert;
  12.    int[] con;
  13.    int ncon;
  14.    int maxcon;
  15.    boolean transformed;
  16.    Matrix3D mat;
  17.    float xmin;
  18.    float xmax;
  19.    float ymin;
  20.    float ymax;
  21.    float zmin;
  22.    float zmax;
  23.    // $FF: renamed from: gr java.awt.Color[]
  24.    static Color[] field_0;
  25.  
  26.    Model3D() {
  27.       this.mat = new Matrix3D();
  28.       this.mat.xrot((double)20.0F);
  29.       this.mat.yrot((double)30.0F);
  30.    }
  31.  
  32.    Model3D(InputStream var1) throws IOException, FileFormatException {
  33.       this();
  34.       StreamTokenizer var2 = new StreamTokenizer(var1);
  35.       var2.eolIsSignificant(true);
  36.       var2.commentChar(35);
  37.  
  38.       label82:
  39.       while(true) {
  40.          switch (var2.nextToken()) {
  41.             case -3:
  42.                if ("v".equals(var2.sval)) {
  43.                   double var9 = (double)0.0F;
  44.                   double var11 = (double)0.0F;
  45.                   double var7 = (double)0.0F;
  46.                   if (var2.nextToken() == -2) {
  47.                      var9 = var2.nval;
  48.                      if (var2.nextToken() == -2) {
  49.                         var11 = var2.nval;
  50.                         if (var2.nextToken() == -2) {
  51.                            var7 = var2.nval;
  52.                         }
  53.                      }
  54.                   }
  55.  
  56.                   this.addVert((float)var9, (float)var11, (float)var7);
  57.  
  58.                   while(var2.ttype != 10 && var2.ttype != -1) {
  59.                      var2.nextToken();
  60.                   }
  61.                } else if (!"f".equals(var2.sval) && !"fo".equals(var2.sval) && !"l".equals(var2.sval)) {
  62.                   while(var2.nextToken() != 10 && var2.ttype != -1) {
  63.                   }
  64.                } else {
  65.                   int var3 = -1;
  66.                   int var4 = -1;
  67.                   int var5 = -1;
  68.  
  69.                   while(true) {
  70.                      while(var2.nextToken() != -2) {
  71.                         if (var2.ttype != 47) {
  72.                            if (var3 >= 0) {
  73.                               this.add(var3 - 1, var4 - 1);
  74.                            }
  75.  
  76.                            if (var2.ttype != 10) {
  77.                               break label82;
  78.                            }
  79.                            continue label82;
  80.                         }
  81.  
  82.                         var2.nextToken();
  83.                      }
  84.  
  85.                      var5 = (int)var2.nval;
  86.                      if (var4 >= 0) {
  87.                         this.add(var4 - 1, var5 - 1);
  88.                      }
  89.  
  90.                      if (var3 < 0) {
  91.                         var3 = var5;
  92.                      }
  93.  
  94.                      var4 = var5;
  95.                   }
  96.                }
  97.             case 10:
  98.                break;
  99.             default:
  100.                break label82;
  101.          }
  102.       }
  103.  
  104.       var1.close();
  105.       if (var2.ttype != -1) {
  106.          throw new FileFormatException(var2.toString());
  107.       }
  108.    }
  109.  
  110.    int addVert(float var1, float var2, float var3) {
  111.       int var4 = this.nvert;
  112.       if (var4 >= this.maxvert) {
  113.          if (this.vert == null) {
  114.             this.maxvert = 100;
  115.             this.vert = new float[this.maxvert * 3];
  116.          } else {
  117.             this.maxvert *= 2;
  118.             float[] var5 = new float[this.maxvert * 3];
  119.             System.arraycopy(this.vert, 0, var5, 0, this.vert.length);
  120.             this.vert = var5;
  121.          }
  122.       }
  123.  
  124.       var4 *= 3;
  125.       this.vert[var4] = var1;
  126.       this.vert[var4 + 1] = var2;
  127.       this.vert[var4 + 2] = var3;
  128.       return this.nvert++;
  129.    }
  130.  
  131.    void add(int var1, int var2) {
  132.       int var3 = this.ncon;
  133.       if (var1 < this.nvert && var2 < this.nvert) {
  134.          if (var3 >= this.maxcon) {
  135.             if (this.con == null) {
  136.                this.maxcon = 100;
  137.                this.con = new int[this.maxcon];
  138.             } else {
  139.                this.maxcon *= 2;
  140.                int[] var4 = new int[this.maxcon];
  141.                System.arraycopy(this.con, 0, var4, 0, this.con.length);
  142.                this.con = var4;
  143.             }
  144.          }
  145.  
  146.          if (var1 > var2) {
  147.             int var5 = var1;
  148.             var1 = var2;
  149.             var2 = var5;
  150.          }
  151.  
  152.          this.con[var3] = var1 << 16 | var2;
  153.          this.ncon = var3 + 1;
  154.       }
  155.    }
  156.  
  157.    void transform() {
  158.       if (!this.transformed && this.nvert > 0) {
  159.          if (this.tvert == null || this.tvert.length < this.nvert * 3) {
  160.             this.tvert = new int[this.nvert * 3];
  161.          }
  162.  
  163.          this.mat.transform(this.vert, this.tvert, this.nvert);
  164.          this.transformed = true;
  165.       }
  166.    }
  167.  
  168.    private void quickSort(int[] var1, int var2, int var3) {
  169.       int var4 = var2;
  170.       int var5 = var3;
  171.       if (var3 > var2) {
  172.          int var6 = var1[(var2 + var3) / 2];
  173.  
  174.          while(var4 <= var5) {
  175.             while(var4 < var3 && var1[var4] < var6) {
  176.                ++var4;
  177.             }
  178.  
  179.             while(var5 > var2 && var1[var5] > var6) {
  180.                --var5;
  181.             }
  182.  
  183.             if (var4 <= var5) {
  184.                this.swap(var1, var4, var5);
  185.                ++var4;
  186.                --var5;
  187.             }
  188.          }
  189.  
  190.          if (var2 < var5) {
  191.             this.quickSort(var1, var2, var5);
  192.          }
  193.  
  194.          if (var4 < var3) {
  195.             this.quickSort(var1, var4, var3);
  196.          }
  197.       }
  198.  
  199.    }
  200.  
  201.    private void swap(int[] var1, int var2, int var3) {
  202.       int var4 = var1[var2];
  203.       var1[var2] = var1[var3];
  204.       var1[var3] = var4;
  205.    }
  206.  
  207.    void compress() {
  208.       int var1 = this.ncon;
  209.       int[] var2 = this.con;
  210.       this.quickSort(this.con, 0, this.ncon - 1);
  211.       int var3 = 0;
  212.       int var4 = -1;
  213.  
  214.       for(int var5 = 0; var5 < var1; ++var5) {
  215.          int var6 = var2[var5];
  216.          if (var4 != var6) {
  217.             var2[var3] = var6;
  218.             ++var3;
  219.          }
  220.  
  221.          var4 = var6;
  222.       }
  223.  
  224.       this.ncon = var3;
  225.    }
  226.  
  227.    void paint(Graphics var1) {
  228.       if (this.vert != null && this.nvert > 0) {
  229.          this.transform();
  230.          if (field_0 == null) {
  231.             field_0 = new Color[16];
  232.  
  233.             for(int var2 = 0; var2 < 16; ++var2) {
  234.                int var3 = (int)((double)170.0F * ((double)1.0F - Math.pow((double)var2 / (double)15.0F, 2.3)));
  235.                field_0[var2] = new Color(var3, var3, var3);
  236.             }
  237.          }
  238.  
  239.          int var11 = 0;
  240.          int var12 = this.ncon;
  241.          int[] var4 = this.con;
  242.          int[] var5 = this.tvert;
  243.          if (var12 > 0 && this.nvert > 0) {
  244.             for(int var6 = 0; var6 < var12; ++var6) {
  245.                int var7 = var4[var6];
  246.                int var8 = (var7 >> 16 & '\uffff') * 3;
  247.                int var9 = (var7 & '\uffff') * 3;
  248.                int var10 = var5[var8 + 2] + var5[var9 + 2];
  249.                if (var10 < 0) {
  250.                   var10 = 0;
  251.                }
  252.  
  253.                if (var10 > 15) {
  254.                   var10 = 15;
  255.                }
  256.  
  257.                if (var10 != var11) {
  258.                   var11 = var10;
  259.                   var1.setColor(field_0[var10]);
  260.                }
  261.  
  262.                var1.drawLine(var5[var8], var5[var8 + 1], var5[var9], var5[var9 + 1]);
  263.             }
  264.  
  265.          }
  266.       }
  267.    }
  268.  
  269.    void findBB() {
  270.       if (this.nvert > 0) {
  271.          float[] var1 = this.vert;
  272.          float var2 = var1[0];
  273.          float var3 = var2;
  274.          float var4 = var1[1];
  275.          float var5 = var4;
  276.          float var6 = var1[2];
  277.          float var7 = var6;
  278.          int var8 = this.nvert * 3;
  279.  
  280.          while(true) {
  281.             var8 -= 3;
  282.             if (var8 <= 0) {
  283.                this.xmax = var3;
  284.                this.xmin = var2;
  285.                this.ymax = var5;
  286.                this.ymin = var4;
  287.                this.zmax = var7;
  288.                this.zmin = var6;
  289.                return;
  290.             }
  291.  
  292.             float var9 = var1[var8];
  293.             if (var9 < var2) {
  294.                var2 = var9;
  295.             }
  296.  
  297.             if (var9 > var3) {
  298.                var3 = var9;
  299.             }
  300.  
  301.             float var10 = var1[var8 + 1];
  302.             if (var10 < var4) {
  303.                var4 = var10;
  304.             }
  305.  
  306.             if (var10 > var5) {
  307.                var5 = var10;
  308.             }
  309.  
  310.             float var11 = var1[var8 + 2];
  311.             if (var11 < var6) {
  312.                var6 = var11;
  313.             }
  314.  
  315.             if (var11 > var7) {
  316.                var7 = var11;
  317.             }
  318.          }
  319.       }
  320.    }
  321. }
  322.