SimpleMesh.prototype.addFaceByVertLoop = function addFaceByVertLoop( verts ) { if ( verts.length < 3 || verts.size < 3 ) { throw new TypeError('Degenerate vert-loop!'); } var list = [ ...verts ]; var edges = []; var previous = list[0]; var current; var commonEdge; for ( var i = 1; i < list.length; i++ ) { current = list[i]; commonEdge = setalg.n( previous.edges, current.edges ); if ( commonEdge.size < 1 ) { throw new TypeError('Degenerate vert-loop!'); } edges.push( [ ...commonEdge ][0] ); previous = current; } commonEdge = setalg.n( list[list.length-1].edges, list[0].edges ); if ( commonEdge.size < 1 ) { throw new TypeError('Degenerate vert-loop!'); } edges.push( [ ...commonEdge ][0] ); return this.addFaceByEdgeLoop( edges, false ); };
SimpleMesh.prototype.addEdgeByVertPair = function addEdgeByVertPair( vert1, vert2, validate ) { if ( ( validate || validate === undefined ) && vert1 === vert2 ) { throw new TypeError('Degenerate edge!'); } if ( !this.verts.has( vert1.id ) || !this.verts.has( vert2.id ) ) { throw new ReferenceError('Vert not in mesh!'); } if ( ( validate || validate === undefined ) && setalg.n(vert1.edges, vert2.edges).size ) { throw new ReferenceError('Vert pair already has edge in common!'); } var edge = new Edge(); edge.vert1 = vert1; edge.vert2 = vert2; vert1.edges.add( edge ); vert2.edges.add( edge ); return Mesh.prototype.addEdge.call( this, edge ); };