HalfEdgeMesh = {
function HalfEdgeMesh(){
this.verts = [];
this.edges = {};
this.geom = null;
}
HalfEdgeMesh.prototype.addVert = function(point){
this.verts.push(new Vertex(point));
}
HalfEdgeMesh.prototype.addHalfEdge = function(head,tail){
if(!([head,tail] in this.edges)){
var E = new HalfEdge(this.verts[head],this.verts[tail]);
this.edges[[head,tail]] = E;
return E;
}
}
HalfEdgeMesh.prototype.populateFromThreeGeom = function(geom){
this.geom = geom;
for(var V in geom.vertices){
this.addVert(geom.vertices[V]);
}
for(var faceIndex in geom.faces){
var F = geom.faces[faceIndex];
var vertPairs = [[F.a,F.b],[F.b,F.c],[F.c,F.a]];
for(var i = 0; i<3; i++){
var E=vertPairs[i];
var newEdge = this.addHalfEdge(E[0],E[1]);
newEdge.face = F;
if(this.verts[E[0]].halfedge == null){
this.verts[E[0]].halfedge = newEdge;
}
}
for(var i=0; i<3; i++){
var E = vertPairs[i]
this.edges[E].next = this.edges[vertPairs[(i+1) % 3]];
if([E[1],E[0]] in this.edges){
this.edges[E].twin = this.edges[[E[1],E[0]]];
this.edges[[E[1],E[0]]].twin = this.edges[E];
}
}
}
}
return HalfEdgeMesh
}