private Record readTestRecord(final StreamTokenizer stok) throws IOException { final Record rec = new Record(); final double[] vals; try { rec.poly1 = scanString(stok); } catch (final EOFException e) { return null; } rec.lineNumber = stok.lineno(); rec.poly2 = scanString(stok); rec.X21.scan("[%s]", stok); rec.X12.invert(rec.X21); final Vector pairList = new Vector(10); String s; rec.minDist = Double.POSITIVE_INFINITY; while (true) { s = scanString(stok); if (s.equals("P")) rec.promote = true; else if (s.equals("D")) rec.maxPairDist = TokenScanner.scanDouble(stok); else break; } while (!s.equals("*")) { final ClosestPointPair pair = new ClosestPointPair(); if (!s.equals("N")) { pair.feat1 = getDummyFeature(s, stok); pair.feat2 = getDummyFeature(scanString(stok), stok); final Point3dX p1 = new Point3dX(); p1.scan("[%v]", stok); pair.pnt1.set(p1); } final Vector3dX dir = new Vector3dX(); dir.scan("[%v]", stok); dir.normalize(); pair.nrml.set(dir); pair.dist = TokenScanner.scanDouble(stok); if (!s.equals("N")) pair.pnt2.scaleAdd(pair.dist, pair.nrml, pair.pnt1); if (pair.dist < rec.minDist) { rec.minDist = pair.dist; rec.minNrml = new Vector3d(pair.nrml); } pairList.add(pair); s = scanString(stok); } rec.basePairs = (ClosestPointPair[]) pairList.toArray(new ClosestPointPair[0]); rec.testPairs = new ClosestPointPair[rec.basePairs.length]; for (int i = 0; i < rec.testPairs.length; i++) rec.testPairs[i] = new ClosestPointPair(rec.basePairs[i]); return rec; }