package icpc.challenge.view; import java.io.IOException; import java.io.InputStream; import java.util.Scanner; import javax.media.opengl.GL; public class Mesh { float[] vdata; float[] ndata; int[] fvert; int[] fnorm; float[] mdata; int[] mindex; public void read(String paramString) throws IOException { InputStream localInputStream = super.getClass().getResourceAsStream(paramString); Scanner localScanner = new Scanner(localInputStream); String str = localScanner.next(); int i = localScanner.nextInt(); this.vdata = new float[i * 3]; for (int j = 0; j < i; ++j) { this.vdata[(j * 3 + 0)] = localScanner.nextFloat(); this.vdata[(j * 3 + 2)] = localScanner.nextFloat(); this.vdata[(j * 3 + 1)] = (-localScanner.nextFloat()); } str = localScanner.next(); i = localScanner.nextInt(); this.ndata = new float[i * 3]; for (j = 0; j < i; ++j) { this.ndata[(j * 3 + 0)] = localScanner.nextFloat(); this.ndata[(j * 3 + 2)] = localScanner.nextFloat(); this.ndata[(j * 3 + 1)] = (-localScanner.nextFloat()); } str = localScanner.next(); i = localScanner.nextInt(); this.fvert = new int[i * 3]; this.fnorm = new int[i * 3]; for (j = 0; j < i; ++j) { localScanner.nextInt(); this.fvert[(j * 3 + 0)] = (localScanner.nextInt() * 3); this.fnorm[(j * 3 + 0)] = (localScanner.nextInt() * 3); this.fvert[(j * 3 + 1)] = (localScanner.nextInt() * 3); this.fnorm[(j * 3 + 1)] = (localScanner.nextInt() * 3); this.fvert[(j * 3 + 2)] = (localScanner.nextInt() * 3); this.fnorm[(j * 3 + 2)] = (localScanner.nextInt() * 3); } str = localScanner.next(); i = localScanner.nextInt(); this.mdata = new float[i * 3]; for (j = 0; j < i; ++j) { this.mdata[(j * 3 + 0)] = localScanner.nextFloat(); this.mdata[(j * 3 + 1)] = localScanner.nextFloat(); this.mdata[(j * 3 + 2)] = localScanner.nextFloat(); } str = localScanner.next(); this.mindex = new int[this.fvert.length / 3]; for (j = 0; j < this.mindex.length; ++j) this.mindex[j] = localScanner.nextInt(); localInputStream.close(); } public void draw(GL paramGL, int paramInt) { int i = -1; paramGL.glBegin(4); for (int j = 0; j < this.fvert.length; ++j) { if ((j % 3 == 0) && (i != this.mindex[(j / 3)])) { paramGL.glEnd(); i = this.mindex[(j / 3)] * 3; if (i == 0) switch (paramInt) { case 0: Util3D.materialColor(paramGL, 1.0F, 0.0F, 0.0F); break; case 1: Util3D.materialColor(paramGL, 0.0F, 0.0F, 1.0F); break; case 2: Util3D.materialColor(paramGL, 0.5F, 0.5F, 0.5F); } else { Util3D.materialColor(paramGL, this.mdata[(i + 0)], this.mdata[(i + 1)], this.mdata[(i + 2)]); } paramGL.glBegin(4); } int k = this.fvert[j]; int l = this.fnorm[j]; paramGL.glNormal3f(this.ndata[(l + 0)], this.ndata[(l + 1)], this.ndata[(l + 2)]); paramGL.glVertex3f(this.vdata[(k + 0)], this.vdata[(k + 1)], this.vdata[(k + 2)]); } paramGL.glEnd(); } public void drawGeometry(GL paramGL) { paramGL.glBegin(4); for (int i = 0; i < this.fvert.length; ++i) { int j = this.fvert[i]; paramGL.glVertex3f(this.vdata[(j + 0)], this.vdata[(j + 1)], this.vdata[(j + 2)]); } paramGL.glEnd(); } }