// read_stl.java read a .stl file import java.io.*; import java.util.*; import java.text.*; import java.awt.*; import java.awt.event.*; // solid rect // facet normal 0.0 0.0 -1.0 // outer loop // vertex 1.0 1.0 1.0 // vertex 5.0 4.0 1.0 // vertex 1.0 4.0 1.0 // endloop // endfacet // facet normal 0.0 0.0 -1.0 // outer loop // vertex 1.0 1.0 1.0 // vertex 5.0 1.0 1.0 // vertex 5.0 4.0 1.0 // endloop // endfacet //... // endsolid class read_stl { Boolean debug = false; double xmin, xmax, ymin, ymax, zmin, zmax; public read_stl(String filein, double stl[][], int num_ptv[]) { int num_tri = 0; int num_pt = 0; StringTokenizer T; String token; String solid = "solid"; String facet = "facet"; String normal = "normal"; String outer = "outer"; String loop = "loop"; String vertex = "vertex"; String endloop = "endloop"; String endfacet = "endfacet"; String endsolid = "endsolid"; if(debug) System.out.println("read_stl.java reading "+filein); try { FileReader fin = new FileReader(filein); BufferedReader in = new BufferedReader(fin); String input_line; int len; while(true) // to endsolid { input_line = in.readLine(); // len = input_line.length(); if(debug) System.out.println("input:"+input_line+" len="+len); T = new StringTokenizer(input_line," "); token = T.nextToken(); // ? if(debug) System.out.println("token:"+token); if(token.equals(endsolid)) break; if(token.equals(endloop)) { num_tri++; num_pt = 0; continue; } if(token.equals(endfacet)) continue; if(token.equals(vertex)) { token = T.nextToken(); // x if(debug) System.out.println("token:"+token); stl[num_tri][num_pt] = Double.parseDouble(token); token = T.nextToken(); // y if(debug) System.out.println("token:"+token); stl[num_tri][num_pt+1] = Double.parseDouble(token); token = T.nextToken(); // z if(debug) System.out.println("token:"+token); stl[num_tri][num_pt+2] = Double.parseDouble(token); num_pt = num_pt + 3; } if(token.equals(facet)) { if(debug) System.out.println("num_tri="+num_tri); token = T.nextToken(); // normal if(debug) System.out.println("token:"+token); token = T.nextToken(); // nx if(debug) System.out.println("token:"+token); stl[num_tri][9] = Double.parseDouble(token); token = T.nextToken(); // ny if(debug) System.out.println("token:"+token); stl[num_tri][10] = Double.parseDouble(token); token = T.nextToken(); // nz if(debug) System.out.println("token:"+token); stl[num_tri][11] = Double.parseDouble(token); } } // end while } // end try catch(IOException exception) { System.out.println("read stl.java "+exception); } xmin = stl[0][0]; xmax = stl[0][0]; ymin = stl[0][1]; ymax = stl[0][1]; zmin = stl[0][2]; zmax = stl[0][2]; for(int i=1; i