View Javadoc

1   package org.textensor.vis;
2   
3   import java.io.BufferedReader;
4   import java.io.File;
5   import java.io.FileReader;
6   import java.io.IOException;
7   import java.io.StreamTokenizer;
8   import java.util.ArrayList;
9   
10  import org.textensor.report.E;
11  
12  public class ElementReader {
13  
14      File fsrc;
15  
16      ArrayList<VolElt> elts;
17  
18      public ElementReader(File f) {
19          fsrc = f;
20          elts = new ArrayList<VolElt>();
21      }
22  
23      public void read() {
24          try {
25  
26              BufferedReader br = new BufferedReader(new FileReader(fsrc));
27              StreamTokenizer tz = new StreamTokenizer(br);
28              tz.eolIsSignificant(false);
29  
30              while (br.ready()) {
31                  int ielt =  nextInt(tz);
32                  int nstrip = nextInt(tz);
33                  int nvert = nextInt(tz);
34  
35                  int[] slens = new int[nstrip];
36                  for (int i = 0; i < nstrip; i++) {
37                      slens[i] = nextInt(tz);
38                  }
39                  float[] verts = new float[3 * nvert];
40                  float[] norms = new float[3 * nvert];
41  
42                  int ind = 0;
43                  for (int i = 0; i < nvert; i++) {
44                      verts[ind] = nextFloat(tz);
45                      verts[ind+1] = nextFloat(tz);
46                      verts[ind+2] = nextFloat(tz);
47  
48                      norms[ind] = nextFloat(tz);
49                      norms[ind+1] = nextFloat(tz);
50                      norms[ind+2] = nextFloat(tz);
51  
52                      ind += 3;
53                  }
54  
55                  VolElt ve = new VolElt(slens, verts, norms);
56                  elts.add(ve);
57              }
58  
59          } catch (Exception ex) {
60              ex.printStackTrace();
61          }
62          E.info("loaded " + elts.size() + " curved volume elements");
63      }
64  
65      private int nextInt(StreamTokenizer tz) throws IOException {
66          int itok = tz.nextToken();
67          int ret = 0;
68          if (tz.ttype == StreamTokenizer.TT_NUMBER) {
69              ret = (int)(Math.round(tz.nval));
70  
71          } else {
72              throw new IOException("need a number but got " + tz);
73          }
74          return ret;
75      }
76  
77  
78      private float nextFloat(StreamTokenizer tz) throws IOException {
79          int itok = tz.nextToken();
80          float ret = 0;
81          if (tz.ttype == StreamTokenizer.TT_NUMBER) {
82              ret = (float)(tz.nval);
83  
84          } else {
85              throw new IOException("need a number but got " + tz);
86          }
87          return ret;
88      }
89  
90      public ArrayList<VolElt> getElements() {
91          return elts;
92      }
93  }