Advertisement
Guest User

Untitled

a guest
Jul 3rd, 2012
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.64 KB | None | 0 0
  1. package de.finalspace.engine.geometry;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Collection;
  5. import java.util.List;
  6.  
  7. public class Mesh {
  8.     private List<Vertex> vertices;
  9.     private List<Face> faces;
  10.     private List<Integer> indices;
  11.  
  12.     public Mesh() {
  13.         vertices = new ArrayList<Vertex>();
  14.         faces = new ArrayList<Face>();
  15.         indices = new ArrayList<Integer>();
  16.     }
  17.  
  18.     private class VertexIndex {
  19.         private final Vertex vertex;
  20.         private final Integer index;
  21.  
  22.         public VertexIndex(final Vertex vertex, final Integer index) {
  23.             this.vertex = vertex;
  24.             this.index = index;
  25.         }
  26.  
  27.         public Vertex getVertex() {
  28.             return vertex;
  29.         }
  30.  
  31.         public Integer getIndex() {
  32.             return index;
  33.         }
  34.        
  35.         @Override
  36.         public String toString() {
  37.             return index.toString() + " - " + vertex.toString();
  38.         }
  39.     }
  40.  
  41.     private final int searchVertexIndexCacheCapacity = 100;
  42.     private VertexIndex[] searchVertexIndexCache = new VertexIndex[searchVertexIndexCacheCapacity];
  43.     private int searchVertexIndexCacheCurrentIndex = 0;
  44.    
  45.     private void writeToCache(final Vertex v, final int idx) {
  46.         searchVertexIndexCacheCurrentIndex++;
  47.         if (searchVertexIndexCacheCurrentIndex < searchVertexIndexCacheCapacity) {
  48.             // We have free cache slots free, add it to it
  49.         } else {
  50.             // Cache is full, restart it
  51.             searchVertexIndexCacheCurrentIndex = 1;
  52.         }
  53.         searchVertexIndexCache[searchVertexIndexCacheCurrentIndex - 1] = new VertexIndex(
  54.                 v, idx);
  55.     }
  56.  
  57.     private int getVertexIndex(final Vertex v) {
  58. //      // First look into the cache
  59. //      for (int i = 0; i < searchVertexIndexCacheCapacity; i++) {
  60. //          if (searchVertexIndexCache[i] != null) {
  61. //              if (searchVertexIndexCache[i].getVertex().equals(v)) {
  62. //                  return searchVertexIndexCache[i].getIndex();
  63. //              }
  64. //          }
  65. //      }
  66.  
  67.         // Not found, we have to search in our vertices list
  68.         int i = 0;
  69.         for (Vertex x : vertices) {
  70.             if (x.equals(v)) {
  71. //              writeToCache(x, i);
  72.                 return i;
  73.             }
  74.             i++;
  75.         }
  76.  
  77.         // Not found
  78.         return -1;
  79.     }
  80.  
  81.     public int addVertex(final Vertex v, boolean ignoreSearch) {
  82.         // Find duplicated vertex and returns index of it
  83.         int idx = !ignoreSearch ? getVertexIndex(v) : -1;
  84.         if (idx == -1) {
  85.             int newindex = vertices.size();
  86. //          writeToCache(v, newindex);
  87.             vertices.add(v);
  88.             return newindex;
  89.         } else {
  90.             return idx;
  91.         }
  92.     }
  93.  
  94.     public void addFace(final Face face) {
  95.         faces.add(face);
  96.     }
  97.  
  98.     public void addIndex(final Integer index) {
  99.         indices.add(index);
  100.     }
  101.  
  102.     public Collection<Vertex> getVertices() {
  103.         return vertices;
  104.     }
  105.  
  106.     public Collection<Face> getFaces() {
  107.         return faces;
  108.     }
  109.  
  110.     public Collection<Integer> getIndices() {
  111.         return indices;
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement