1 package org.catacomb.numeric.mesh; 2 3 import org.catacomb.interlish.structure.Mesh; 4 import org.catacomb.interlish.structure.MeshBuilder; 5 6 import java.util.HashMap; 7 8 9 10 public class DifMeshBuilder implements MeshBuilder { 11 12 13 DifMesh dmesh; 14 15 int npoint; 16 MeshPoint[] points; 17 18 HashMap<Object, DifMeshPoint> peerHM; 19 20 21 22 23 public void startMesh() { 24 peerHM = new HashMap<Object, DifMeshPoint>(); 25 points = new DifMeshPoint[100]; 26 npoint = 0; 27 } 28 29 30 31 public Object newPoint(double x, double y, double z, double r, int idx, 32 Object peer) { 33 DifMeshPoint dmp = new DifMeshPoint(x, y, z, r, idx); 34 35 peerHM.put(peer, dmp); 36 37 addPoint(dmp); 38 39 return dmp; 40 } 41 42 43 44 public void addPoint(DifMeshPoint pt) { 45 46 if (npoint >= points.length) { 47 MeshPoint[] dmpa = new MeshPoint[(3 * npoint) / 2]; 48 for (int i = 0; i < npoint; i++) { 49 dmpa[i] = points[i]; 50 } 51 points = dmpa; 52 } 53 54 points[npoint++] = pt; 55 } 56 57 58 59 private DifMeshPoint getPoint(Object obj) { 60 return peerHM.get(obj); 61 } 62 63 64 65 66 public void connectToPeer(Object mp1, Object o2) { 67 DifMeshPoint dmpa = (DifMeshPoint)mp1; 68 DifMeshPoint dmpb = getPoint(o2); 69 70 dmpa.addNeighbor(dmpb); 71 dmpb.addNeighbor(dmpa); 72 } 73 74 75 76 77 78 public Mesh getMesh() { 79 DifMesh dm= new DifMesh(); 80 81 trimPointArray(); 82 83 dm.setPoints(points); 84 85 return dm; 86 } 87 88 89 90 91 public void trimPointArray() { 92 if (points.length != npoint) { 93 94 MeshPoint[] dmpa = new MeshPoint[npoint]; 95 for (int i = 0; i < npoint; i++) { 96 dmpa[i] = points[i]; 97 } 98 99 points = dmpa; 100 } 101 } 102 103 }