2 protected static final HashMap edge_map = new HashMap();
7 public static HashSet getBad(EdgeGraph mesh) {
8 HashSet ret = new HashSet();
9 for (Iterator iterator = mesh.iterator(); iterator.hasNext();) {
10 Node node = (Node) iterator.next();
11 Element element = (Element) mesh.getNodeData(node);
19 private static FileInputStream getScanner(String filename) {
20 return new FileInputStream(filename);
23 private Tuple[] readNodes(String filename) {
24 FileInputStream scanner = getScanner(filename + ".node");
25 StringTokenizer st = new StringTokenizer(scanner.readLine());
27 int ntups = Integer.parseInt(st.nextToken());
28 Tuple tuples[] = new Tuple[ntups];
29 for (int i = 0; i < ntups; i++) {
30 st = new StringTokenizer(scanner.readLine());
31 int index = Integer.parseInt(st.nextToken());
32 double x = Double.parseDouble(st.nextToken());
33 double y = Double.parseDouble(st.nextToken());
34 // we don't parse the z axis
35 tuples[index] = new Tuple(x, y, 0.0D);
40 private void readElements(EdgeGraph mesh, String filename, Tuple tuples[]) {
41 FileInputStream scanner =getScanner(filename + ".ele");
42 StringTokenizer st = new StringTokenizer(scanner.readLine());
43 int nels = Integer.parseInt(st.nextToken());
44 Element elements[] = new Element[nels];
45 for (int i = 0; i < nels; i++) {
46 st = new StringTokenizer(scanner.readLine());
47 int index = Integer.parseInt(st.nextToken());
48 int n1 = Integer.parseInt(st.nextToken());
49 int n2 = Integer.parseInt(st.nextToken());
50 int n3 = Integer.parseInt(st.nextToken());
51 elements[index] = new Element(tuples[n1], tuples[n2], tuples[n3]);
52 addElement(mesh, elements[index]);
56 private void readPoly(EdgeGraph mesh, String filename, Tuple tuples[]) {
57 FileInputStream scanner = getScanner(filename + ".poly");
58 StringTokenizer st = new StringTokenizer(scanner.readLine());
60 st = new StringTokenizer(scanner.readLine());
61 int nsegs = Integer.parseInt(st.nextToken());
63 Element segments[] = new Element[nsegs];
64 for (int i = 0; i < nsegs; i++) {
65 st = new StringTokenizer(scanner.readLine());
66 int index = Integer.parseInt(st.nextToken());
67 int n1 = Integer.parseInt(st.nextToken());
68 int n2 = Integer.parseInt(st.nextToken());
69 // don't parse z value
70 segments[index] = new Element(tuples[n1], tuples[n2]);
71 addElement(mesh, segments[index]);
76 public void read(EdgeGraph mesh, String basename) {
77 Tuple tuples[] = readNodes(basename);
78 readElements(mesh, basename, tuples);
79 readPoly(mesh, basename, tuples);
82 protected Node addElement(EdgeGraph mesh, Element element) {
83 Node node = mesh.createNode(element);
85 for (int i = 0; i < element.numEdges(); i++) {
86 ElementEdge edge = element.getEdge(i);
87 if (!edge_map.containsKey(edge)) {
88 edge_map.put(edge, node);
90 Edge_d new_edge = mesh.createEdge(node, (Node) edge_map.get(edge), edge);
91 mesh.addEdge(new_edge);
92 edge_map.remove(edge);
99 public static boolean verify(EdgeGraph mesh) {
100 for (Iterator iterator = mesh.iterator(); iterator.hasNext();) {
101 Node node = (Node) iterator.next();
102 Element element = (Element) mesh.getNodeData(node);
103 if (element.getDim() == 2) {
104 if (mesh.getOutNeighborsSize(node) != 1) {
105 System.out.println("-> Segment " + element + " has " + mesh.getOutNeighborsSize(node) + " relation(s)");
108 } else if (element.getDim() == 3) {
109 if (mesh.getOutNeighborsSize(node) != 3) {
110 System.out.println("-> Triangle " + element + " has " + mesh.getOutNeighborsSize(node) + " relation(s)");
114 System.out.println("-> Figures with " + element.getDim() + " edges");
119 Node start = mesh.getRandom();
120 Stack remaining = new Stack();
121 HashSet found = new HashSet();
122 remaining.push(start);
123 while (!remaining.empty()) {
124 Node node = (Node) remaining.pop();
125 if (!found.contains(node)) {
128 for (Iterator iterator1 = mesh.getOutNeighbors(node); iterator1.hasNext(); remaining
130 neighbor = (Node) iterator1.next();
134 if (found.size() != mesh.getNumNodes()) {
135 System.out.println("Not all elements are reachable");