{"version":3,"file":"index.umd.cjs","sources":["../src/core/utils/hashUtils.js","../src/core/utils/geometryUtils.js","../src/core/utils/halfEdgeUtils.js","../src/core/utils/RaySet.js","../src/core/utils/computeDisjointEdges.js","../src/core/HalfEdgeMap.js","../src/core/Brush.js","../src/core/utils/triangleUtils.js","../src/core/TriangleSplitter.js","../src/core/TypeBackedArray.js","../src/core/TypedAttributeData.js","../src/core/IntersectionMap.js","../src/core/constants.js","../src/core/operations/operationsUtils.js","../src/core/debug/OperationDebugData.js","../src/core/operations/operations.js","../src/core/Evaluator.js","../src/core/operations/Operation.js","../src/core/operations/OperationGroup.js","../src/materials/shaderUtils.js","../src/materials/GridMaterial.js","../src/core/debug/debugUtils.js","../src/objects/TriangleSetHelper.js","../src/objects/EdgesHelper.js","../src/objects/PointsHelper.js","../src/objects/HalfEdgeHelper.js","../src/utils/computeMeshVolume.js"],"sourcesContent":["const HASH_WIDTH = 1e-6;\nconst HASH_HALF_WIDTH = HASH_WIDTH * 0.5;\nconst HASH_MULTIPLIER = Math.pow( 10, - Math.log10( HASH_WIDTH ) );\nconst HASH_ADDITION = HASH_HALF_WIDTH * HASH_MULTIPLIER;\nexport function hashNumber( v ) {\n\n\treturn ~ ~ ( v * HASH_MULTIPLIER + HASH_ADDITION );\n\n}\n\nexport function hashVertex2( v ) {\n\n\treturn `${ hashNumber( v.x ) },${ hashNumber( v.y ) }`;\n\n}\n\nexport function hashVertex3( v ) {\n\n\treturn `${ hashNumber( v.x ) },${ hashNumber( v.y ) },${ hashNumber( v.z ) }`;\n\n}\n\nexport function hashVertex4( v ) {\n\n\treturn `${ hashNumber( v.x ) },${ hashNumber( v.y ) },${ hashNumber( v.z ) },${ hashNumber( v.w ) }`;\n\n}\n\nexport function hashRay( r ) {\n\n\treturn `${ hashVertex3( r.origin ) }-${ hashVertex3( r.direction ) }`;\n\n}\n\nexport function toNormalizedRay( v0, v1, target ) {\n\n\t// get a normalized direction\n\ttarget\n\t\t.direction\n\t\t.subVectors( v1, v0 )\n\t\t.normalize();\n\n\t// project the origin onto the perpendicular plane that\n\t// passes through 0, 0, 0\n\tconst scalar = v0.dot( target.direction );\n\ttarget.\n\t\torigin\n\t\t.copy( v0 )\n\t\t.addScaledVector( target.direction, - scalar );\n\n\treturn target;\n\n}\n","import { BufferAttribute } from 'three';\n\nexport function areSharedArrayBuffersSupported() {\n\n\treturn typeof SharedArrayBuffer !== 'undefined';\n\n}\n\nexport function convertToSharedArrayBuffer( array ) {\n\n\tif ( array.buffer instanceof SharedArrayBuffer ) {\n\n\t\treturn array;\n\n\t}\n\n\tconst cons = array.constructor;\n\tconst buffer = array.buffer;\n\tconst sharedBuffer = new SharedArrayBuffer( buffer.byteLength );\n\n\tconst uintArray = new Uint8Array( buffer );\n\tconst sharedUintArray = new Uint8Array( sharedBuffer );\n\tsharedUintArray.set( uintArray, 0 );\n\n\treturn new cons( sharedBuffer );\n\n}\n\nexport function getIndexArray( vertexCount, BufferConstructor = ArrayBuffer ) {\n\n\tif ( vertexCount > 65535 ) {\n\n\t\treturn new Uint32Array( new BufferConstructor( 4 * vertexCount ) );\n\n\t} else {\n\n\t\treturn new Uint16Array( new BufferConstructor( 2 * vertexCount ) );\n\n\t}\n\n}\n\nexport function ensureIndex( geo, options ) {\n\n\tif ( ! geo.index ) {\n\n\t\tconst vertexCount = geo.attributes.position.count;\n\t\tconst BufferConstructor = options.useSharedArrayBuffer ? SharedArrayBuffer : ArrayBuffer;\n\t\tconst index = getIndexArray( vertexCount, BufferConstructor );\n\t\tgeo.setIndex( new BufferAttribute( index, 1 ) );\n\n\t\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\t\tindex[ i ] = i;\n\n\t\t}\n\n\t}\n\n}\n\nexport function getVertexCount( geo ) {\n\n\treturn geo.index ? geo.index.count : geo.attributes.position.count;\n\n}\n\nexport function getTriCount( geo ) {\n\n\treturn getVertexCount( geo ) / 3;\n\n}\n","import { Vector3 } from 'three';\n\nconst DEGENERATE_EPSILON = 1e-8;\nconst _tempVec = new Vector3();\n\nexport function toTriIndex( v ) {\n\n\treturn ~ ~ ( v / 3 );\n\n}\n\nexport function toEdgeIndex( v ) {\n\n\treturn v % 3;\n\n}\n\nexport function sortEdgeFunc( a, b ) {\n\n\treturn a.start - b.start;\n\n}\n\nexport function getProjectedDistance( ray, vec ) {\n\n\treturn _tempVec.subVectors( vec, ray.origin ).dot( ray.direction );\n\n}\n\nexport function hasOverlaps( arr ) {\n\n\tarr = [ ...arr ].sort( sortEdgeFunc );\n\tfor ( let i = 0, l = arr.length; i < l - 1; i ++ ) {\n\n\t\tconst info0 = arr[ i ];\n\t\tconst info1 = arr[ i + 1 ];\n\n\t\tif ( info1.start < info0.end && Math.abs( info1.start - info0.end ) > 1e-5 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t}\n\n\treturn false;\n\n}\n\nexport function getEdgeSetLength( arr ) {\n\n\tlet tot = 0;\n\tarr.forEach( ( { start, end } ) => tot += end - start );\n\treturn tot;\n\n}\n\nexport function matchEdges( forward, reverse, disjointConnectivityMap, eps = DEGENERATE_EPSILON ) {\n\n\tforward.sort( sortEdgeFunc );\n\treverse.sort( sortEdgeFunc );\n\n\tfor ( let i = 0; i < forward.length; i ++ ) {\n\n\t\tconst e0 = forward[ i ];\n\t\tfor ( let o = 0; o < reverse.length; o ++ ) {\n\n\t\t\tconst e1 = reverse[ o ];\n\t\t\tif ( e1.start > e0.end ) {\n\n\t\t\t\t// e2 is completely after e1\n\t\t\t\t// break;\n\n\t\t\t\t// NOTE: there are cases where there are overlaps due to precision issues or\n\t\t\t\t// thin / degenerate triangles. Assuming the sibling side has the same issues\n\t\t\t\t// we let the matching work here. Long term we should remove the degenerate\n\t\t\t\t// triangles before this.\n\n\t\t\t} else if ( e0.end < e1.start || e1.end < e0.start ) {\n\n\t\t\t\t// e1 is completely before e2\n\t\t\t\tcontinue;\n\n\t\t\t} else if ( e0.start <= e1.start && e0.end >= e1.end ) {\n\n\t\t\t\t// e1 is larger than and e2 is completely within e1\n\t\t\t\tif ( ! areDistancesDegenerate( e1.end, e0.end ) ) {\n\n\t\t\t\t\tforward.splice( i + 1, 0, {\n\t\t\t\t\t\tstart: e1.end,\n\t\t\t\t\t\tend: e0.end,\n\t\t\t\t\t\tindex: e0.index,\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\te0.end = e1.start;\n\n\t\t\t\te1.start = 0;\n\t\t\t\te1.end = 0;\n\n\t\t\t} else if ( e0.start >= e1.start && e0.end <= e1.end ) {\n\n\t\t\t\t// e2 is larger than and e1 is completely within e2\n\t\t\t\tif ( ! areDistancesDegenerate( e0.end, e1.end ) ) {\n\n\t\t\t\t\treverse.splice( o + 1, 0, {\n\t\t\t\t\t\tstart: e0.end,\n\t\t\t\t\t\tend: e1.end,\n\t\t\t\t\t\tindex: e1.index,\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\te1.end = e0.start;\n\n\t\t\t\te0.start = 0;\n\t\t\t\te0.end = 0;\n\n\t\t\t} else if ( e0.start <= e1.start && e0.end <= e1.end ) {\n\n\t\t\t\t// e1 overlaps e2 at the beginning\n\t\t\t\tconst tmp = e0.end;\n\t\t\t\te0.end = e1.start;\n\t\t\t\te1.start = tmp;\n\n\t\t\t} else if ( e0.start >= e1.start && e0.end >= e1.end ) {\n\n\t\t\t\t// e1 overlaps e2 at the end\n\t\t\t\tconst tmp = e1.end;\n\t\t\t\te1.end = e0.start;\n\t\t\t\te0.start = tmp;\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error();\n\n\t\t\t}\n\n\t\t\t// Add the connectivity information\n\t\t\tif ( ! disjointConnectivityMap.has( e0.index ) ) {\n\n\t\t\t\tdisjointConnectivityMap.set( e0.index, [] );\n\n\t\t\t}\n\n\t\t\tif ( ! disjointConnectivityMap.has( e1.index ) ) {\n\n\t\t\t\tdisjointConnectivityMap.set( e1.index, [] );\n\n\t\t\t}\n\n\t\t\tdisjointConnectivityMap\n\t\t\t\t.get( e0.index )\n\t\t\t\t.push( e1.index );\n\n\t\t\tdisjointConnectivityMap\n\t\t\t\t.get( e1.index )\n\t\t\t\t.push( e0.index );\n\n\t\t\tif ( isEdgeDegenerate( e1 ) ) {\n\n\t\t\t\treverse.splice( o, 1 );\n\t\t\t\to --;\n\n\t\t\t}\n\n\t\t\tif ( isEdgeDegenerate( e0 ) ) {\n\n\t\t\t\t// and if we have to remove the current original edge then exit this loop\n\t\t\t\t// so we can work on the next one\n\t\t\t\tforward.splice( i, 1 );\n\t\t\t\ti --;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcleanUpEdgeSet( forward );\n\tcleanUpEdgeSet( reverse );\n\n\tfunction cleanUpEdgeSet( arr ) {\n\n\t\tfor ( let i = 0; i < arr.length; i ++ ) {\n\n\t\t\tif ( isEdgeDegenerate( arr[ i ] ) ) {\n\n\t\t\t\tarr.splice( i, 1 );\n\t\t\t\ti --;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction areDistancesDegenerate( start, end ) {\n\n\t\treturn Math.abs( end - start ) < eps;\n\n\t}\n\n\tfunction isEdgeDegenerate( e ) {\n\n\t\treturn Math.abs( e.end - e.start ) < eps;\n\n\t}\n\n}\n","const DIST_EPSILON = 1e-5;\nconst ANGLE_EPSILON = 1e-4;\n\nexport class RaySet {\n\n\tconstructor() {\n\n\t\tthis._rays = [];\n\n\t}\n\n\taddRay( ray ) {\n\n\t\tthis._rays.push( ray );\n\n\t}\n\n\tfindClosestRay( ray ) {\n\n\t\tconst rays = this._rays;\n\t\tconst inv = ray.clone();\n\t\tinv.direction.multiplyScalar( - 1 );\n\n\t\tlet bestScore = Infinity;\n\t\tlet bestRay = null;\n\t\tfor ( let i = 0, l = rays.length; i < l; i ++ ) {\n\n\t\t\tconst r = rays[ i ];\n\t\t\tif ( skipRay( r, ray ) && skipRay( r, inv ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst rayScore = scoreRays( r, ray );\n\t\t\tconst invScore = scoreRays( r, inv );\n\t\t\tconst score = Math.min( rayScore, invScore );\n\t\t\tif ( score < bestScore ) {\n\n\t\t\t\tbestScore = score;\n\t\t\t\tbestRay = r;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bestRay;\n\n\t\tfunction skipRay( r0, r1 ) {\n\n\t\t\tconst distOutOfThreshold = r0.origin.distanceTo( r1.origin ) > DIST_EPSILON;\n\t\t\tconst angleOutOfThreshold = r0.direction.angleTo( r1.direction ) > ANGLE_EPSILON;\n\t\t\treturn angleOutOfThreshold || distOutOfThreshold;\n\n\t\t}\n\n\t\tfunction scoreRays( r0, r1 ) {\n\n\t\t\tconst originDistance = r0.origin.distanceTo( r1.origin );\n\t\t\tconst angleDistance = r0.direction.angleTo( r1.direction );\n\t\t\treturn originDistance / DIST_EPSILON + angleDistance / ANGLE_EPSILON;\n\n\t\t}\n\n\t}\n\n}\n","import { Vector3, Ray } from 'three';\nimport { toEdgeIndex, toTriIndex, matchEdges, getProjectedDistance } from './halfEdgeUtils.js';\nimport { toNormalizedRay } from './hashUtils.js';\nimport { RaySet } from './RaySet.js';\n\nconst _v0 = new Vector3();\nconst _v1 = new Vector3();\nconst _ray = new Ray();\n\nexport function computeDisjointEdges(\n\tgeometry,\n\tunmatchedSet,\n\teps,\n) {\n\n\tconst attributes = geometry.attributes;\n\tconst indexAttr = geometry.index;\n\tconst posAttr = attributes.position;\n\n\tconst disjointConnectivityMap = new Map();\n\tconst fragmentMap = new Map();\n\tconst edges = Array.from( unmatchedSet );\n\tconst rays = new RaySet();\n\n\tfor ( let i = 0, l = edges.length; i < l; i ++ ) {\n\n\t\t// get the triangle edge\n\t\tconst index = edges[ i ];\n\t\tconst triIndex = toTriIndex( index );\n\t\tconst edgeIndex = toEdgeIndex( index );\n\n\t\tlet i0 = 3 * triIndex + edgeIndex;\n\t\tlet i1 = 3 * triIndex + ( edgeIndex + 1 ) % 3;\n\t\tif ( indexAttr ) {\n\n\t\t\ti0 = indexAttr.getX( i0 );\n\t\t\ti1 = indexAttr.getX( i1 );\n\n\t\t}\n\n\t\t_v0.fromBufferAttribute( posAttr, i0 );\n\t\t_v1.fromBufferAttribute( posAttr, i1 );\n\n\t\t// get the ray corresponding to the edge\n\t\ttoNormalizedRay( _v0, _v1, _ray );\n\n\t\t// find the shared ray with other edges\n\t\tlet info;\n\t\tlet commonRay = rays.findClosestRay( _ray );\n\t\tif ( commonRay === null ) {\n\n\t\t\tcommonRay = _ray.clone();\n\t\t\trays.addRay( commonRay );\n\n\t\t}\n\n\t\tif ( ! fragmentMap.has( commonRay ) ) {\n\n\t\t\tfragmentMap.set( commonRay, {\n\n\t\t\t\tforward: [],\n\t\t\t\treverse: [],\n\t\t\t\tray: commonRay,\n\n\t\t\t} );\n\n\t\t}\n\n\t\tinfo = fragmentMap.get( commonRay );\n\n\t\t// store the stride of edge endpoints along the ray\n\t\tlet start = getProjectedDistance( commonRay, _v0 );\n\t\tlet end = getProjectedDistance( commonRay, _v1 );\n\t\tif ( start > end ) {\n\n\t\t\t[ start, end ] = [ end, start ];\n\n\t\t}\n\n\t\tif ( _ray.direction.dot( commonRay.direction ) < 0 ) {\n\n\t\t\tinfo.reverse.push( { start, end, index } );\n\n\t\t} else {\n\n\t\t\tinfo.forward.push( { start, end, index } );\n\n\t\t}\n\n\t}\n\n\t// match the found sibling edges\n\tfragmentMap.forEach( ( { forward, reverse }, ray ) => {\n\n\t\tmatchEdges( forward, reverse, disjointConnectivityMap, eps );\n\n\t\tif ( forward.length === 0 && reverse.length === 0 ) {\n\n\t\t\tfragmentMap.delete( ray );\n\n\t\t}\n\n\t} );\n\n\treturn {\n\t\tdisjointConnectivityMap,\n\t\tfragmentMap,\n\t};\n\n}\n\n","import { Vector2, Vector3, Vector4 } from 'three';\nimport { hashNumber, hashVertex2, hashVertex3, hashVertex4 } from './utils/hashUtils.js';\nimport { getTriCount } from './utils/geometryUtils.js';\nimport { computeDisjointEdges } from './utils/computeDisjointEdges.js';\n\nconst _vec2 = new Vector2();\nconst _vec3 = new Vector3();\nconst _vec4 = new Vector4();\nconst _hashes = [ '', '', '' ];\n\nexport class HalfEdgeMap {\n\n\tconstructor( geometry = null ) {\n\n\t\t// result data\n\t\tthis.data = null;\n\t\tthis.disjointConnections = null;\n\t\tthis.unmatchedDisjointEdges = null;\n\t\tthis.unmatchedEdges = - 1;\n\t\tthis.matchedEdges = - 1;\n\n\t\t// options\n\t\tthis.useDrawRange = true;\n\t\tthis.useAllAttributes = false;\n\t\tthis.matchDisjointEdges = false;\n\t\tthis.degenerateEpsilon = 1e-8;\n\n\t\tif ( geometry ) {\n\n\t\t\tthis.updateFrom( geometry );\n\n\t\t}\n\n\t}\n\n\tgetSiblingTriangleIndex( triIndex, edgeIndex ) {\n\n\t\tconst otherIndex = this.data[ triIndex * 3 + edgeIndex ];\n\t\treturn otherIndex === - 1 ? - 1 : ~ ~ ( otherIndex / 3 );\n\n\t}\n\n\tgetSiblingEdgeIndex( triIndex, edgeIndex ) {\n\n\t\tconst otherIndex = this.data[ triIndex * 3 + edgeIndex ];\n\t\treturn otherIndex === - 1 ? - 1 : ( otherIndex % 3 );\n\n\t}\n\n\tgetDisjointSiblingTriangleIndices( triIndex, edgeIndex ) {\n\n\t\tconst index = triIndex * 3 + edgeIndex;\n\t\tconst arr = this.disjointConnections.get( index );\n\t\treturn arr ? arr.map( i => ~ ~ ( i / 3 ) ) : [];\n\n\t}\n\n\tgetDisjointSiblingEdgeIndices( triIndex, edgeIndex ) {\n\n\t\tconst index = triIndex * 3 + edgeIndex;\n\t\tconst arr = this.disjointConnections.get( index );\n\t\treturn arr ? arr.map( i => i % 3 ) : [];\n\n\t}\n\n\tisFullyConnected() {\n\n\t\treturn this.unmatchedEdges === 0;\n\n\t}\n\n\tupdateFrom( geometry ) {\n\n\t\tconst { useAllAttributes, useDrawRange, matchDisjointEdges, degenerateEpsilon } = this;\n\t\tconst hashFunction = useAllAttributes ? hashAllAttributes : hashPositionAttribute;\n\n\t\t// runs on the assumption that there is a 1 : 1 match of edges\n\t\tconst map = new Map();\n\n\t\t// attributes\n\t\tconst { attributes } = geometry;\n\t\tconst attrKeys = useAllAttributes ? Object.keys( attributes ) : null;\n\t\tconst indexAttr = geometry.index;\n\t\tconst posAttr = attributes.position;\n\n\t\t// get the potential number of triangles\n\t\tlet triCount = getTriCount( geometry );\n\t\tconst maxTriCount = triCount;\n\n\t\t// get the real number of triangles from the based on the draw range\n\t\tlet offset = 0;\n\t\tif ( useDrawRange ) {\n\n\t\t\toffset = geometry.drawRange.start;\n\t\t\tif ( geometry.drawRange.count !== Infinity ) {\n\n\t\t\t\ttriCount = ~ ~ ( geometry.drawRange.count / 3 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// initialize the connectivity buffer - 1 means no connectivity\n\t\tlet data = this.data;\n\t\tif ( ! data || data.length < 3 * maxTriCount ) {\n\n\t\t\tdata = new Int32Array( 3 * maxTriCount );\n\n\t\t}\n\n\t\tdata.fill( - 1 );\n\n\t\t// iterate over all triangles\n\t\tlet matchedEdges = 0;\n\t\tlet unmatchedSet = new Set();\n\t\tfor ( let i = offset, l = triCount * 3 + offset; i < l; i += 3 ) {\n\n\t\t\tconst i3 = i;\n\t\t\tfor ( let e = 0; e < 3; e ++ ) {\n\n\t\t\t\tlet i0 = i3 + e;\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\ti0 = indexAttr.getX( i0 );\n\n\t\t\t\t}\n\n\t\t\t\t_hashes[ e ] = hashFunction( i0 );\n\n\t\t\t}\n\n\t\t\tfor ( let e = 0; e < 3; e ++ ) {\n\n\t\t\t\tconst nextE = ( e + 1 ) % 3;\n\t\t\t\tconst vh0 = _hashes[ e ];\n\t\t\t\tconst vh1 = _hashes[ nextE ];\n\n\t\t\t\tconst reverseHash = `${ vh1 }_${ vh0 }`;\n\t\t\t\tif ( map.has( reverseHash ) ) {\n\n\t\t\t\t\t// create a reference between the two triangles and clear the hash\n\t\t\t\t\tconst index = i3 + e;\n\t\t\t\t\tconst otherIndex = map.get( reverseHash );\n\t\t\t\t\tdata[ index ] = otherIndex;\n\t\t\t\t\tdata[ otherIndex ] = index;\n\t\t\t\t\tmap.delete( reverseHash );\n\t\t\t\t\tmatchedEdges += 2;\n\t\t\t\t\tunmatchedSet.delete( otherIndex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// save the triangle and triangle edge index captured in one value\n\t\t\t\t\t// triIndex = ~ ~ ( i0 / 3 );\n\t\t\t\t\t// edgeIndex = i0 % 3;\n\t\t\t\t\tconst hash = `${ vh0 }_${ vh1 }`;\n\t\t\t\t\tconst index = i3 + e;\n\t\t\t\t\tmap.set( hash, index );\n\t\t\t\t\tunmatchedSet.add( index );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( matchDisjointEdges ) {\n\n\t\t\tconst {\n\t\t\t\tfragmentMap,\n\t\t\t\tdisjointConnectivityMap,\n\t\t\t} = computeDisjointEdges( geometry, unmatchedSet, degenerateEpsilon );\n\n\t\t\tunmatchedSet.clear();\n\t\t\tfragmentMap.forEach( ( { forward, reverse } ) => {\n\n\t\t\t\tforward.forEach( ( { index } ) => unmatchedSet.add( index ) );\n\t\t\t\treverse.forEach( ( { index } ) => unmatchedSet.add( index ) );\n\n\t\t\t} );\n\n\t\t\tthis.unmatchedDisjointEdges = fragmentMap;\n\t\t\tthis.disjointConnections = disjointConnectivityMap;\n\t\t\tmatchedEdges = triCount * 3 - unmatchedSet.size;\n\n\t\t}\n\n\t\tthis.matchedEdges = matchedEdges;\n\t\tthis.unmatchedEdges = unmatchedSet.size;\n\t\tthis.data = data;\n\n\t\tfunction hashPositionAttribute( i ) {\n\n\t\t\t_vec3.fromBufferAttribute( posAttr, i );\n\t\t\treturn hashVertex3( _vec3 );\n\n\t\t}\n\n\t\tfunction hashAllAttributes( i ) {\n\n\t\t\tlet result = '';\n\t\t\tfor ( let k = 0, l = attrKeys.length; k < l; k ++ ) {\n\n\t\t\t\tconst attr = attributes[ attrKeys[ k ] ];\n\t\t\t\tlet str;\n\t\t\t\tswitch ( attr.itemSize ) {\n\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstr = hashNumber( attr.getX( i ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tstr = hashVertex2( _vec2.fromBufferAttribute( attr, i ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tstr = hashVertex3( _vec3.fromBufferAttribute( attr, i ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tstr = hashVertex4( _vec4.fromBufferAttribute( attr, i ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( result !== '' ) {\n\n\t\t\t\t\tresult += '|';\n\n\t\t\t\t}\n\n\t\t\t\tresult += str;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t}\n\n}\n","import { Mesh, Matrix4 } from 'three';\nimport { MeshBVH } from 'three-mesh-bvh';\nimport { HalfEdgeMap } from './HalfEdgeMap.js';\nimport { areSharedArrayBuffersSupported, convertToSharedArrayBuffer, ensureIndex, getTriCount } from './utils/geometryUtils.js';\n\nexport class Brush extends Mesh {\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\n\t\tthis.isBrush = true;\n\t\tthis._previousMatrix = new Matrix4();\n\t\tthis._previousMatrix.elements.fill( 0 );\n\n\t}\n\n\tmarkUpdated() {\n\n\t\tthis._previousMatrix.copy( this.matrix );\n\n\t}\n\n\tisDirty() {\n\n\t\tconst { matrix, _previousMatrix } = this;\n\t\tconst el1 = matrix.elements;\n\t\tconst el2 = _previousMatrix.elements;\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( el1[ i ] !== el2[ i ] ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tprepareGeometry() {\n\n\t\t// generate shared array buffers\n\t\tconst geometry = this.geometry;\n\t\tconst attributes = geometry.attributes;\n\t\tconst useSharedArrayBuffer = areSharedArrayBuffersSupported();\n\t\tif ( useSharedArrayBuffer ) {\n\n\t\t\tfor ( const key in attributes ) {\n\n\t\t\t\tconst attribute = attributes[ key ];\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tthrow new Error( 'Brush: InterleavedBufferAttributes are not supported.' );\n\n\t\t\t\t}\n\n\t\t\t\tattribute.array = convertToSharedArrayBuffer( attribute.array );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate bounds tree\n\t\tif ( ! geometry.boundsTree ) {\n\n\t\t\tensureIndex( geometry, { useSharedArrayBuffer } );\n\t\t\tgeometry.boundsTree = new MeshBVH( geometry, { maxLeafTris: 3, indirect: true, useSharedArrayBuffer } );\n\n\t\t}\n\n\t\t// generate half edges\n\t\tif ( ! geometry.halfEdges ) {\n\n\t\t\tgeometry.halfEdges = new HalfEdgeMap( geometry );\n\n\t\t}\n\n\t\t// save group indices for materials\n\t\tif ( ! geometry.groupIndices ) {\n\n\t\t\tconst triCount = getTriCount( geometry );\n\t\t\tconst array = new Uint16Array( triCount );\n\t\t\tconst groups = geometry.groups;\n\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\tconst { start, count } = groups[ i ];\n\t\t\t\tfor ( let g = start / 3, lg = ( start + count ) / 3; g < lg; g ++ ) {\n\n\t\t\t\t\tarray[ g ] = i;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.groupIndices = array;\n\n\t\t}\n\n\t}\n\n\tdisposeCacheData() {\n\n\t\tconst { geometry } = this;\n\t\tgeometry.halfEdges = null;\n\t\tgeometry.boundsTree = null;\n\t\tgeometry.groupIndices = null;\n\n\t}\n\n}\n","import { Vector3 } from 'three';\n\nconst EPSILON = 1e-14;\nconst _AB = new Vector3();\nconst _AC = new Vector3();\nconst _CB = new Vector3();\n\nexport function isTriDegenerate( tri, eps = EPSILON ) {\n\n\t// compute angles to determine whether they're degenerate\n\t_AB.subVectors( tri.b, tri.a );\n\t_AC.subVectors( tri.c, tri.a );\n\t_CB.subVectors( tri.b, tri.c );\n\n\tconst angle1 = _AB.angleTo( _AC );\t\t\t\t// AB v AC\n\tconst angle2 = _AB.angleTo( _CB );\t\t\t\t// AB v BC\n\tconst angle3 = Math.PI - angle1 - angle2;\t\t// 180deg - angle1 - angle2\n\n\treturn Math.abs( angle1 ) < eps ||\n\t\tMath.abs( angle2 ) < eps ||\n\t\tMath.abs( angle3 ) < eps ||\n\t\ttri.a.distanceToSquared( tri.b ) < eps ||\n\t\ttri.a.distanceToSquared( tri.c ) < eps ||\n\t\ttri.b.distanceToSquared( tri.c ) < eps;\n\n}\n","import { Triangle, Line3, Vector3, Plane } from 'three';\nimport { ExtendedTriangle } from 'three-mesh-bvh';\nimport { isTriDegenerate } from './utils/triangleUtils.js';\n\n// NOTE: these epsilons likely should all be the same since they're used to measure the\n// distance from a point to a plane which needs to be done consistently\nconst EPSILON = 1e-10;\nconst COPLANAR_EPSILON = 1e-10;\nconst PARALLEL_EPSILON = 1e-10;\nconst _edge = new Line3();\nconst _foundEdge = new Line3();\nconst _vec = new Vector3();\nconst _triangleNormal = new Vector3();\nconst _planeNormal = new Vector3();\nconst _plane = new Plane();\nconst _splittingTriangle = new ExtendedTriangle();\n\n// A pool of triangles to avoid unnecessary triangle creation\nclass TrianglePool {\n\n\tconstructor() {\n\n\t\tthis._pool = [];\n\t\tthis._index = 0;\n\n\t}\n\n\tgetTriangle() {\n\n\t\tif ( this._index >= this._pool.length ) {\n\n\t\t\tthis._pool.push( new Triangle() );\n\n\t\t}\n\n\t\treturn this._pool[ this._index ++ ];\n\n\t}\n\n\tclear() {\n\n\t\tthis._index = 0;\n\n\t}\n\n\treset() {\n\n\t\tthis._pool.length = 0;\n\t\tthis._index = 0;\n\n\t}\n\n}\n\n// Utility class for splitting triangles\nexport class TriangleSplitter {\n\n\tconstructor() {\n\n\t\tthis.trianglePool = new TrianglePool();\n\t\tthis.triangles = [];\n\t\tthis.normal = new Vector3();\n\t\tthis.coplanarTriangleUsed = false;\n\n\t}\n\n\t// initialize the class with a triangle\n\tinitialize( tri ) {\n\n\t\tthis.reset();\n\n\t\tconst { triangles, trianglePool, normal } = this;\n\t\tif ( Array.isArray( tri ) ) {\n\n\t\t\tfor ( let i = 0, l = tri.length; i < l; i ++ ) {\n\n\t\t\t\tconst t = tri[ i ];\n\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\tt.getNormal( normal );\n\n\t\t\t\t} else if ( Math.abs( 1.0 - t.getNormal( _vec ).dot( normal ) ) > EPSILON ) {\n\n\t\t\t\t\tthrow new Error( 'Triangle Splitter: Cannot initialize with triangles that have different normals.' );\n\n\t\t\t\t}\n\n\t\t\t\tconst poolTri = trianglePool.getTriangle();\n\t\t\t\tpoolTri.copy( t );\n\t\t\t\ttriangles.push( poolTri );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\ttri.getNormal( normal );\n\n\t\t\tconst poolTri = trianglePool.getTriangle();\n\t\t\tpoolTri.copy( tri );\n\t\t\ttriangles.push( poolTri );\n\n\t\t}\n\n\t}\n\n\t// Split the current set of triangles by passing a single triangle in. If the triangle is\n\t// coplanar it will attempt to split by the triangle edge planes\n\tsplitByTriangle( triangle ) {\n\n\t\tconst { normal, triangles } = this;\n\t\ttriangle.getNormal( _triangleNormal ).normalize();\n\n\t\tif ( Math.abs( 1.0 - Math.abs( _triangleNormal.dot( normal ) ) ) < PARALLEL_EPSILON ) {\n\n\t\t\tthis.coplanarTriangleUsed = true;\n\n\t\t\tfor ( let i = 0, l = triangles.length; i < l; i ++ ) {\n\n\t\t\t\tconst t = triangles[ i ];\n\t\t\t\tt.coplanarCount = 0;\n\n\t\t\t}\n\n\t\t\t// if the triangle is coplanar then split by the edge planes\n\t\t\tconst arr = [ triangle.a, triangle.b, triangle.c ];\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\tconst nexti = ( i + 1 ) % 3;\n\n\t\t\t\tconst v0 = arr[ i ];\n\t\t\t\tconst v1 = arr[ nexti ];\n\n\t\t\t\t// plane positive direction is toward triangle center\n\t\t\t\t_vec.subVectors( v1, v0 ).normalize();\n\t\t\t\t_planeNormal.crossVectors( _triangleNormal, _vec );\n\t\t\t\t_plane.setFromNormalAndCoplanarPoint( _planeNormal, v0 );\n\n\t\t\t\tthis.splitByPlane( _plane, triangle );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// otherwise split by the triangle plane\n\t\t\ttriangle.getPlane( _plane );\n\t\t\tthis.splitByPlane( _plane, triangle );\n\n\t\t}\n\n\t}\n\n\t// Split the triangles by the given plan. If a triangle is provided then we ensure we\n\t// intersect the triangle before splitting the plane\n\tsplitByPlane( plane, clippingTriangle ) {\n\n\t\tconst { triangles, trianglePool } = this;\n\n\t\t// init our triangle to check for intersection\n\t\t_splittingTriangle.copy( clippingTriangle );\n\t\t_splittingTriangle.needsUpdate = true;\n\n\t\t// try to split every triangle in the class\n\t\tfor ( let i = 0, l = triangles.length; i < l; i ++ ) {\n\n\t\t\tconst tri = triangles[ i ];\n\n\t\t\t// skip the triangle if we don't intersect with it\n\t\t\tif ( ! _splittingTriangle.intersectsTriangle( tri, _edge, true ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst { a, b, c } = tri;\n\t\t\tlet intersects = 0;\n\t\t\tlet vertexSplitEnd = - 1;\n\t\t\tlet coplanarEdge = false;\n\t\t\tlet posSideVerts = [];\n\t\t\tlet negSideVerts = [];\n\t\t\tconst arr = [ a, b, c ];\n\t\t\tfor ( let t = 0; t < 3; t ++ ) {\n\n\t\t\t\t// get the triangle edge\n\t\t\t\tconst tNext = ( t + 1 ) % 3;\n\t\t\t\t_edge.start.copy( arr[ t ] );\n\t\t\t\t_edge.end.copy( arr[ tNext ] );\n\n\t\t\t\t// track if the start point sits on the plane or if it's on the positive side of it\n\t\t\t\t// so we can use that information to determine whether to split later.\n\t\t\t\tconst startDist = plane.distanceToPoint( _edge.start );\n\t\t\t\tconst endDist = plane.distanceToPoint( _edge.end );\n\t\t\t\tif ( Math.abs( startDist ) < COPLANAR_EPSILON && Math.abs( endDist ) < COPLANAR_EPSILON ) {\n\n\t\t\t\t\tcoplanarEdge = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( startDist > 0 ) {\n\n\t\t\t\t\tposSideVerts.push( t );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnegSideVerts.push( t );\n\n\t\t\t\t}\n\n\t\t\t\t// we only don't consider this an intersection if the start points hits the plane\n\t\t\t\tif ( Math.abs( startDist ) < COPLANAR_EPSILON ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// double check the end point since the \"intersectLine\" function sometimes does not\n\t\t\t\t// return it as an intersection (see issue #28)\n\t\t\t\t// Because we ignore the start point intersection above we have to make sure we check the end\n\t\t\t\t// point intersection here.\n\t\t\t\tlet didIntersect = ! ! plane.intersectLine( _edge, _vec );\n\t\t\t\tif ( ! didIntersect && Math.abs( endDist ) < COPLANAR_EPSILON ) {\n\n\t\t\t\t\t_vec.copy( _edge.end );\n\t\t\t\t\tdidIntersect = true;\n\n\t\t\t\t}\n\n\t\t\t\t// check if we intersect the plane (ignoring the start point so we don't double count)\n\t\t\t\tif ( didIntersect && ! ( _vec.distanceTo( _edge.start ) < EPSILON ) ) {\n\n\t\t\t\t\t// if we intersect at the end point then we track that point as one that we\n\t\t\t\t\t// have to split down the middle\n\t\t\t\t\tif ( _vec.distanceTo( _edge.end ) < EPSILON ) {\n\n\t\t\t\t\t\tvertexSplitEnd = t;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// track the split edge\n\t\t\t\t\tif ( intersects === 0 ) {\n\n\t\t\t\t\t\t_foundEdge.start.copy( _vec );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_foundEdge.end.copy( _vec );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tintersects ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// skip splitting if:\n\t\t\t// - we have two points on the plane then the plane intersects the triangle exactly on an edge\n\t\t\t// - the plane does not intersect on 2 points\n\t\t\t// - the intersection edge is too small\n\t\t\t// - we're not along a coplanar edge\n\t\t\tif ( ! coplanarEdge && intersects === 2 && _foundEdge.distance() > COPLANAR_EPSILON ) {\n\n\t\t\t\tif ( vertexSplitEnd !== - 1 ) {\n\n\t\t\t\t\tvertexSplitEnd = ( vertexSplitEnd + 1 ) % 3;\n\n\t\t\t\t\t// we're splitting along a vertex\n\t\t\t\t\tlet otherVert1 = 0;\n\t\t\t\t\tif ( otherVert1 === vertexSplitEnd ) {\n\n\t\t\t\t\t\totherVert1 = ( otherVert1 + 1 ) % 3;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet otherVert2 = otherVert1 + 1;\n\t\t\t\t\tif ( otherVert2 === vertexSplitEnd ) {\n\n\t\t\t\t\t\totherVert2 = ( otherVert2 + 1 ) % 3;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst nextTri = trianglePool.getTriangle();\n\t\t\t\t\tnextTri.a.copy( arr[ otherVert2 ] );\n\t\t\t\t\tnextTri.b.copy( _foundEdge.end );\n\t\t\t\t\tnextTri.c.copy( _foundEdge.start );\n\n\t\t\t\t\tif ( ! isTriDegenerate( nextTri ) ) {\n\n\t\t\t\t\t\ttriangles.push( nextTri );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttri.a.copy( arr[ otherVert1 ] );\n\t\t\t\t\ttri.b.copy( _foundEdge.start );\n\t\t\t\t\ttri.c.copy( _foundEdge.end );\n\n\t\t\t\t\t// finish off the adjusted triangle\n\t\t\t\t\tif ( isTriDegenerate( tri ) ) {\n\n\t\t\t\t\t\ttriangles.splice( i, 1 );\n\t\t\t\t\t\ti --;\n\t\t\t\t\t\tl --;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// we're splitting with a quad and a triangle\n\t\t\t\t\t// TODO: what happens when we find that about the pos and negative\n\t\t\t\t\t// sides have only a single vertex?\n\t\t\t\t\tconst singleVert =\n\t\t\t\t\t\tposSideVerts.length >= 2 ?\n\t\t\t\t\t\t\tnegSideVerts[ 0 ] :\n\t\t\t\t\t\t\tposSideVerts[ 0 ];\n\n\t\t\t\t\t// swap the direction of the intersection edge depending on which\n\t\t\t\t\t// side of the plane the single vertex is on to align with the\n\t\t\t\t\t// correct winding order.\n\t\t\t\t\tif ( singleVert === 0 ) {\n\n\t\t\t\t\t\tlet tmp = _foundEdge.start;\n\t\t\t\t\t\t_foundEdge.start = _foundEdge.end;\n\t\t\t\t\t\t_foundEdge.end = tmp;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst nextVert1 = ( singleVert + 1 ) % 3;\n\t\t\t\t\tconst nextVert2 = ( singleVert + 2 ) % 3;\n\n\t\t\t\t\tconst nextTri1 = trianglePool.getTriangle();\n\t\t\t\t\tconst nextTri2 = trianglePool.getTriangle();\n\n\t\t\t\t\t// choose the triangle that has the larger areas (shortest split distance)\n\t\t\t\t\tif ( arr[ nextVert1 ].distanceToSquared( _foundEdge.start ) < arr[ nextVert2 ].distanceToSquared( _foundEdge.end ) ) {\n\n\t\t\t\t\t\tnextTri1.a.copy( arr[ nextVert1 ] );\n\t\t\t\t\t\tnextTri1.b.copy( _foundEdge.start );\n\t\t\t\t\t\tnextTri1.c.copy( _foundEdge.end );\n\n\t\t\t\t\t\tnextTri2.a.copy( arr[ nextVert1 ] );\n\t\t\t\t\t\tnextTri2.b.copy( arr[ nextVert2 ] );\n\t\t\t\t\t\tnextTri2.c.copy( _foundEdge.start );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tnextTri1.a.copy( arr[ nextVert2 ] );\n\t\t\t\t\t\tnextTri1.b.copy( _foundEdge.start );\n\t\t\t\t\t\tnextTri1.c.copy( _foundEdge.end );\n\n\t\t\t\t\t\tnextTri2.a.copy( arr[ nextVert1 ] );\n\t\t\t\t\t\tnextTri2.b.copy( arr[ nextVert2 ] );\n\t\t\t\t\t\tnextTri2.c.copy( _foundEdge.end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttri.a.copy( arr[ singleVert ] );\n\t\t\t\t\ttri.b.copy( _foundEdge.end );\n\t\t\t\t\ttri.c.copy( _foundEdge.start );\n\n\t\t\t\t\t// don't add degenerate triangles to the list\n\t\t\t\t\tif ( ! isTriDegenerate( nextTri1 ) ) {\n\n\t\t\t\t\t\ttriangles.push( nextTri1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! isTriDegenerate( nextTri2 ) ) {\n\n\t\t\t\t\t\ttriangles.push( nextTri2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// finish off the adjusted triangle\n\t\t\t\t\tif ( isTriDegenerate( tri ) ) {\n\n\t\t\t\t\t\ttriangles.splice( i, 1 );\n\t\t\t\t\t\ti --;\n\t\t\t\t\t\tl --;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( intersects === 3 ) {\n\n\t\t\t\tconsole.warn( 'TriangleClipper: Coplanar clip not handled' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treset() {\n\n\t\tthis.triangles.length = 0;\n\t\tthis.trianglePool.clear();\n\t\tthis.coplanarTriangleUsed = false;\n\n\t}\n\n}\n","import { areSharedArrayBuffersSupported } from './utils/geometryUtils.js';\n\nfunction ceilToFourByteStride( byteLength ) {\n\n\tbyteLength = ~ ~ byteLength;\n\treturn byteLength + 4 - byteLength % 4;\n\n}\n\n// Make a new array wrapper class that more easily affords expansion when reaching it's max capacity\nexport class TypeBackedArray {\n\n\tconstructor( type, initialSize = 500 ) {\n\n\n\t\tthis.expansionFactor = 1.5;\n\t\tthis.type = type;\n\t\tthis.length = 0;\n\t\tthis.array = null;\n\n\t\tthis.setSize( initialSize );\n\n\t}\n\n\tsetType( type ) {\n\n\t\tif ( this.length !== 0 ) {\n\n\t\t\tthrow new Error( 'TypeBackedArray: Cannot change the type while there is used data in the buffer.' );\n\n\t\t}\n\n\t\tconst buffer = this.array.buffer;\n\t\tthis.array = new type( buffer );\n\t\tthis.type = type;\n\n\t}\n\n\tsetSize( size ) {\n\n\t\tif ( this.array && size === this.array.length ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// ceil to the nearest 4 bytes so we can replace the array with any type using the same buffer\n\t\tconst type = this.type;\n\t\tconst bufferType = areSharedArrayBuffersSupported() ? SharedArrayBuffer : ArrayBuffer;\n\t\tconst newArray = new type( new bufferType( ceilToFourByteStride( size * type.BYTES_PER_ELEMENT ) ) );\n\t\tif ( this.array ) {\n\n\t\t\tnewArray.set( this.array, 0 );\n\n\t\t}\n\n\t\tthis.array = newArray;\n\n\t}\n\n\texpand() {\n\n\t\tconst { array, expansionFactor } = this;\n\t\tthis.setSize( array.length * expansionFactor );\n\n\t}\n\n\tpush( ...args ) {\n\n\t\tlet { array, length } = this;\n\t\tif ( length + args.length > array.length ) {\n\n\t\t\tthis.expand();\n\t\t\tarray = this.array;\n\n\t\t}\n\n\t\tfor ( let i = 0, l = args.length; i < l; i ++ ) {\n\n\t\t\tarray[ length + i ] = args[ i ];\n\n\t\t}\n\n\t\tthis.length += args.length;\n\n\t}\n\n\tclear() {\n\n\t\tthis.length = 0;\n\n\t}\n\n}\n","import { TypeBackedArray } from './TypeBackedArray.js';\n\n// Utility class for for tracking attribute data in type-backed arrays for a set\n// of groups. The set of attributes is kept for each group and are expected to be the\n// same buffer type.\nexport class TypedAttributeData {\n\n\tconstructor() {\n\n\t\tthis.groupAttributes = [ {} ];\n\t\tthis.groupCount = 0;\n\n\t}\n\n\t// returns the buffer type for the given attribute\n\tgetType( name ) {\n\n\t\treturn this.groupAttributes[ 0 ][ name ].type;\n\n\t}\n\n\tgetItemSize( name ) {\n\n\t\treturn this.groupAttributes[ 0 ][ name ].itemSize;\n\n\t}\n\n\tgetNormalized( name ) {\n\n\t\treturn this.groupAttributes[ 0 ][ name ].normalized;\n\n\t}\n\n\tgetCount( index ) {\n\n\t\tif ( this.groupCount <= index ) {\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tconst pos = this.getGroupAttrArray( 'position', index );\n\t\treturn pos.length / pos.itemSize;\n\n\t}\n\n\t// returns the total length required for all groups for the given attribute\n\tgetTotalLength( name ) {\n\n\t\tconst { groupCount, groupAttributes } = this;\n\n\t\tlet length = 0;\n\t\tfor ( let i = 0; i < groupCount; i ++ ) {\n\n\t\t\tconst attrSet = groupAttributes[ i ];\n\t\t\tlength += attrSet[ name ].length;\n\n\t\t}\n\n\t\treturn length;\n\n\t}\n\n\tgetGroupAttrSet( index = 0 ) {\n\n\t\t// TODO: can this be abstracted?\n\t\t// Return the exiting group set if necessary\n\t\tconst { groupAttributes } = this;\n\t\tif ( groupAttributes[ index ] ) {\n\n\t\t\tthis.groupCount = Math.max( this.groupCount, index + 1 );\n\t\t\treturn groupAttributes[ index ];\n\n\t\t}\n\n\t\t// add any new group sets required\n\t\tconst refAttrSet = groupAttributes[ 0 ];\n\t\tthis.groupCount = Math.max( this.groupCount, index + 1 );\n\t\twhile ( index >= groupAttributes.length ) {\n\n\t\t\tconst newAttrSet = {};\n\t\t\tgroupAttributes.push( newAttrSet );\n\t\t\tfor ( const key in refAttrSet ) {\n\n\t\t\t\tconst refAttr = refAttrSet[ key ];\n\t\t\t\tconst newAttr = new TypeBackedArray( refAttr.type );\n\t\t\t\tnewAttr.itemSize = refAttr.itemSize;\n\t\t\t\tnewAttr.normalized = refAttr.normalized;\n\t\t\t\tnewAttrSet[ key ] = newAttr;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn groupAttributes[ index ];\n\n\t}\n\n\t// Get the raw array for the group set of data\n\tgetGroupAttrArray( name, index = 0 ) {\n\n\t\t// throw an error if we've never\n\t\tconst { groupAttributes } = this;\n\t\tconst referenceAttrSet = groupAttributes[ 0 ];\n\t\tconst referenceAttr = referenceAttrSet[ name ];\n\t\tif ( ! referenceAttr ) {\n\n\t\t\tthrow new Error( `TypedAttributeData: Attribute with \"${ name }\" has not been initialized` );\n\n\t\t}\n\n\t\treturn this.getGroupAttrSet( index )[ name ];\n\n\t}\n\n\t// initializes an attribute array with the given name, type, and size\n\tinitializeArray( name, type, itemSize, normalized ) {\n\n\t\tconst { groupAttributes } = this;\n\t\tconst referenceAttrSet = groupAttributes[ 0 ];\n\t\tconst referenceAttr = referenceAttrSet[ name ];\n\t\tif ( referenceAttr ) {\n\n\t\t\tif ( referenceAttr.type !== type ) {\n\n\t\t\t\tfor ( let i = 0, l = groupAttributes.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst arr = groupAttributes[ i ][ name ];\n\t\t\t\t\tarr.setType( type );\n\t\t\t\t\tarr.itemSize = itemSize;\n\t\t\t\t\tarr.normalized = normalized;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0, l = groupAttributes.length; i < l; i ++ ) {\n\n\t\t\t\tconst arr = new TypeBackedArray( type );\n\t\t\t\tarr.itemSize = itemSize;\n\t\t\t\tarr.normalized = normalized;\n\t\t\t\tgroupAttributes[ i ][ name ] = arr;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// Clear all the data\n\tclear() {\n\n\t\tthis.groupCount = 0;\n\n\t\tconst { groupAttributes } = this;\n\t\tgroupAttributes.forEach( attrSet => {\n\n\t\t\tfor ( const key in attrSet ) {\n\n\t\t\t\tattrSet[ key ].clear();\n\n\t\t\t}\n\n\n\t\t} );\n\n\t}\n\n\t// Remove the given key\n\tdelete( key ) {\n\n\t\tthis.groupAttributes.forEach( attrSet => {\n\n\t\t\tdelete attrSet[ key ];\n\n\t\t} );\n\n\t}\n\n\t// Reset the datasets completely\n\treset() {\n\n\t\tthis.groupAttributes = [];\n\t\tthis.groupCount = 0;\n\n\t}\n\n}\n","export class IntersectionMap {\n\n\tconstructor() {\n\n\t\tthis.intersectionSet = {};\n\t\tthis.ids = [];\n\n\t}\n\n\tadd( id, intersectionId ) {\n\n\t\tconst { intersectionSet, ids } = this;\n\t\tif ( ! intersectionSet[ id ] ) {\n\n\t\t\tintersectionSet[ id ] = [];\n\t\t\tids.push( id );\n\n\t\t}\n\n\t\tintersectionSet[ id ].push( intersectionId );\n\n\t}\n\n}\n","export const ADDITION = 0;\nexport const SUBTRACTION = 1;\nexport const REVERSE_SUBTRACTION = 2;\nexport const INTERSECTION = 3;\nexport const DIFFERENCE = 4;\n\n// guaranteed non manifold results\nexport const HOLLOW_SUBTRACTION = 5;\nexport const HOLLOW_INTERSECTION = 6;\n","import { Ray, Matrix4, DoubleSide, Vector3, Vector4, Triangle, Line3 } from 'three';\nimport { IntersectionMap } from '../IntersectionMap.js';\nimport {\n\tADDITION,\n\tSUBTRACTION,\n\tREVERSE_SUBTRACTION,\n\tINTERSECTION,\n\tDIFFERENCE,\n\tHOLLOW_SUBTRACTION,\n\tHOLLOW_INTERSECTION,\n} from '../constants.js';\nimport { isTriDegenerate } from '../utils/triangleUtils.js';\n\nconst _ray = new Ray();\nconst _matrix = new Matrix4();\nconst _tri = new Triangle();\nconst _vec3 = new Vector3();\nconst _vec4a = new Vector4();\nconst _vec4b = new Vector4();\nconst _vec4c = new Vector4();\nconst _vec4_0 = new Vector4();\nconst _vec4_1 = new Vector4();\nconst _vec4_2 = new Vector4();\nconst _edge = new Line3();\nconst _normal = new Vector3();\nconst JITTER_EPSILON = 1e-8;\nconst OFFSET_EPSILON = 1e-15;\n\nexport const BACK_SIDE = - 1;\nexport const FRONT_SIDE = 1;\nexport const COPLANAR_OPPOSITE = - 2;\nexport const COPLANAR_ALIGNED = 2;\n\nexport const INVERT_TRI = 0;\nexport const ADD_TRI = 1;\nexport const SKIP_TRI = 2;\n\nconst FLOATING_COPLANAR_EPSILON = 1e-14;\n\nlet _debugContext = null;\nexport function setDebugContext( debugData ) {\n\n\t_debugContext = debugData;\n\n}\n\nexport function getHitSide( tri, bvh ) {\n\n\ttri.getMidpoint( _ray.origin );\n\ttri.getNormal( _ray.direction );\n\n\tconst hit = bvh.raycastFirst( _ray, DoubleSide );\n\tconst hitBackSide = Boolean( hit && _ray.direction.dot( hit.face.normal ) > 0 );\n\treturn hitBackSide ? BACK_SIDE : FRONT_SIDE;\n\n}\n\nexport function getHitSideWithCoplanarCheck( tri, bvh ) {\n\n\t// random function that returns [ - 0.5, 0.5 ];\n\tfunction rand() {\n\n\t\treturn Math.random() - 0.5;\n\n\t}\n\n\t// get the ray the check the triangle for\n\ttri.getNormal( _normal );\n\t_ray.direction.copy( _normal );\n\ttri.getMidpoint( _ray.origin );\n\n\tconst total = 3;\n\tlet count = 0;\n\tlet minDistance = Infinity;\n\tfor ( let i = 0; i < total; i ++ ) {\n\n\t\t// jitter the ray slightly\n\t\t_ray.direction.x += rand() * JITTER_EPSILON;\n\t\t_ray.direction.y += rand() * JITTER_EPSILON;\n\t\t_ray.direction.z += rand() * JITTER_EPSILON;\n\n\t\t// and invert it so we can account for floating point error by checking both directions\n\t\t// to catch coplanar distances\n\t\t_ray.direction.multiplyScalar( - 1 );\n\n\t\t// check if the ray hit the backside\n\t\tconst hit = bvh.raycastFirst( _ray, DoubleSide );\n\t\tlet hitBackSide = Boolean( hit && _ray.direction.dot( hit.face.normal ) > 0 );\n\t\tif ( hitBackSide ) {\n\n\t\t\tcount ++;\n\n\t\t}\n\n\t\tif ( hit !== null ) {\n\n\t\t\tminDistance = Math.min( minDistance, hit.distance );\n\n\t\t}\n\n\t\t// if we're right up against another face then we're coplanar\n\t\tif ( minDistance <= OFFSET_EPSILON ) {\n\n\t\t\treturn hit.face.normal.dot( _normal ) > 0 ? COPLANAR_ALIGNED : COPLANAR_OPPOSITE;\n\n\t\t}\n\n\t\t// if our current casts meet our requirements then early out\n\t\tif ( count / total > 0.5 || ( i - count + 1 ) / total > 0.5 ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn count / total > 0.5 ? BACK_SIDE : FRONT_SIDE;\n\n}\n\n// returns the intersected triangles and returns objects mapping triangle indices to\n// the other triangles intersected\nexport function collectIntersectingTriangles( a, b ) {\n\n\tconst aIntersections = new IntersectionMap();\n\tconst bIntersections = new IntersectionMap();\n\n\t_matrix\n\t\t.copy( a.matrixWorld )\n\t\t.invert()\n\t\t.multiply( b.matrixWorld );\n\n\ta.geometry.boundsTree.bvhcast( b.geometry.boundsTree, _matrix, {\n\n\t\tintersectsTriangles( triangleA, triangleB, ia, ib ) {\n\n\t\t\tif ( ! isTriDegenerate( triangleA ) && ! isTriDegenerate( triangleB ) ) {\n\n\t\t\t\t// due to floating point error it's possible that we can have two overlapping, coplanar triangles\n\t\t\t\t// that are a _tiny_ fraction of a value away from each other. If we find that case then check the\n\t\t\t\t// distance between triangles and if it's small enough consider them intersecting.\n\t\t\t\tlet intersected = triangleA.intersectsTriangle( triangleB, _edge, true );\n\t\t\t\tif ( ! intersected ) {\n\n\t\t\t\t\tconst pa = triangleA.plane;\n\t\t\t\t\tconst pb = triangleB.plane;\n\t\t\t\t\tconst na = pa.normal;\n\t\t\t\t\tconst nb = pb.normal;\n\n\t\t\t\t\tif ( na.dot( nb ) === 1 && Math.abs( pa.constant - pb.constant ) < FLOATING_COPLANAR_EPSILON ) {\n\n\t\t\t\t\t\tintersected = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( intersected ) {\n\n\t\t\t\t\tlet va = a.geometry.boundsTree.resolveTriangleIndex( ia );\n\t\t\t\t\tlet vb = b.geometry.boundsTree.resolveTriangleIndex( ib );\n\t\t\t\t\taIntersections.add( va, vb );\n\t\t\t\t\tbIntersections.add( vb, va );\n\n\t\t\t\t\tif ( _debugContext ) {\n\n\t\t\t\t\t\t_debugContext.addEdge( _edge );\n\t\t\t\t\t\t_debugContext.addIntersectingTriangles( ia, triangleA, ib, triangleB );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t}\n\n\t} );\n\n\treturn { aIntersections, bIntersections };\n\n}\n\n// Add the barycentric interpolated values fro the triangle into the new attribute data\nexport function appendAttributeFromTriangle(\n\ttriIndex,\n\tbaryCoordTri,\n\tgeometry,\n\tmatrixWorld,\n\tnormalMatrix,\n\tattributeData,\n\tinvert = false,\n) {\n\n\tconst attributes = geometry.attributes;\n\tconst indexAttr = geometry.index;\n\tconst i3 = triIndex * 3;\n\tconst i0 = indexAttr.getX( i3 + 0 );\n\tconst i1 = indexAttr.getX( i3 + 1 );\n\tconst i2 = indexAttr.getX( i3 + 2 );\n\n\tfor ( const key in attributeData ) {\n\n\t\t// check if the key we're asking for is in the geometry at all\n\t\tconst attr = attributes[ key ];\n\t\tconst arr = attributeData[ key ];\n\t\tif ( ! ( key in attributes ) ) {\n\n\t\t\tthrow new Error( `CSG Operations: Attribute ${ key } not available on geometry.` );\n\n\t\t}\n\n\t\t// handle normals and positions specially because they require transforming\n\t\t// TODO: handle tangents\n\t\tconst itemSize = attr.itemSize;\n\t\tif ( key === 'position' ) {\n\n\t\t\t_tri.a.fromBufferAttribute( attr, i0 ).applyMatrix4( matrixWorld );\n\t\t\t_tri.b.fromBufferAttribute( attr, i1 ).applyMatrix4( matrixWorld );\n\t\t\t_tri.c.fromBufferAttribute( attr, i2 ).applyMatrix4( matrixWorld );\n\n\t\t\tpushBarycoordInterpolatedValues( _tri.a, _tri.b, _tri.c, baryCoordTri, 3, arr, invert );\n\n\t\t} else if ( key === 'normal' ) {\n\n\t\t\t_tri.a.fromBufferAttribute( attr, i0 ).applyNormalMatrix( normalMatrix );\n\t\t\t_tri.b.fromBufferAttribute( attr, i1 ).applyNormalMatrix( normalMatrix );\n\t\t\t_tri.c.fromBufferAttribute( attr, i2 ).applyNormalMatrix( normalMatrix );\n\n\t\t\tif ( invert ) {\n\n\t\t\t\t_tri.a.multiplyScalar( - 1 );\n\t\t\t\t_tri.b.multiplyScalar( - 1 );\n\t\t\t\t_tri.c.multiplyScalar( - 1 );\n\n\t\t\t}\n\n\t\t\tpushBarycoordInterpolatedValues( _tri.a, _tri.b, _tri.c, baryCoordTri, 3, arr, invert, true );\n\n\t\t} else {\n\n\t\t\t_vec4a.fromBufferAttribute( attr, i0 );\n\t\t\t_vec4b.fromBufferAttribute( attr, i1 );\n\t\t\t_vec4c.fromBufferAttribute( attr, i2 );\n\n\t\t\tpushBarycoordInterpolatedValues( _vec4a, _vec4b, _vec4c, baryCoordTri, itemSize, arr, invert );\n\n\t\t}\n\n\t}\n\n}\n\n// Append all the values of the attributes for the triangle onto the new attribute arrays\nexport function appendAttributesFromIndices(\n\ti0,\n\ti1,\n\ti2,\n\tattributes,\n\tmatrixWorld,\n\tnormalMatrix,\n\tattributeData,\n\tinvert = false,\n) {\n\n\tappendAttributeFromIndex( i0, attributes, matrixWorld, normalMatrix, attributeData, invert );\n\tappendAttributeFromIndex( invert ? i2 : i1, attributes, matrixWorld, normalMatrix, attributeData, invert );\n\tappendAttributeFromIndex( invert ? i1 : i2, attributes, matrixWorld, normalMatrix, attributeData, invert );\n\n}\n\n// Returns the triangle to add when performing an operation\nexport function getOperationAction( operation, hitSide, invert = false ) {\n\n\tswitch ( operation ) {\n\n\t\tcase ADDITION:\n\n\t\t\tif ( hitSide === FRONT_SIDE || ( hitSide === COPLANAR_ALIGNED && ! invert ) ) {\n\n\t\t\t\treturn ADD_TRI;\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase SUBTRACTION:\n\n\t\t\tif ( invert ) {\n\n\t\t\t\tif ( hitSide === BACK_SIDE ) {\n\n\t\t\t\t\treturn INVERT_TRI;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( hitSide === FRONT_SIDE || hitSide === COPLANAR_OPPOSITE ) {\n\n\t\t\t\t\treturn ADD_TRI;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase REVERSE_SUBTRACTION:\n\n\t\t\tif ( invert ) {\n\n\t\t\t\tif ( hitSide === FRONT_SIDE || hitSide === COPLANAR_OPPOSITE ) {\n\n\t\t\t\t\treturn ADD_TRI;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( hitSide === BACK_SIDE ) {\n\n\t\t\t\t\treturn INVERT_TRI;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase DIFFERENCE:\n\n\t\t\tif ( hitSide === BACK_SIDE ) {\n\n\t\t\t\treturn INVERT_TRI;\n\n\t\t\t} else if ( hitSide === FRONT_SIDE ) {\n\n\t\t\t\treturn ADD_TRI;\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase INTERSECTION:\n\t\t\tif ( hitSide === BACK_SIDE || ( hitSide === COPLANAR_ALIGNED && ! invert ) ) {\n\n\t\t\t\treturn ADD_TRI;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase HOLLOW_SUBTRACTION:\n\t\t\tif ( ! invert && ( hitSide === FRONT_SIDE || hitSide === COPLANAR_OPPOSITE ) ) {\n\n\t\t\t\treturn ADD_TRI;\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase HOLLOW_INTERSECTION:\n\t\t\tif ( ! invert && ( hitSide === BACK_SIDE || hitSide === COPLANAR_ALIGNED ) ) {\n\n\t\t\t\treturn ADD_TRI;\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error( `Unrecognized CSG operation enum \"${ operation }\".` );\n\n\t}\n\n\treturn SKIP_TRI;\n\n}\n\n// takes a set of barycentric values in the form of a triangle, a set of vectors, number of components,\n// and whether to invert the result and pushes the new values onto the provided attribute array\nfunction pushBarycoordInterpolatedValues( v0, v1, v2, baryCoordTri, itemSize, attrArr, invert = false, normalize = false ) {\n\n\t// adds the appropriate number of values for the vector onto the array\n\tconst addValues = v => {\n\n\t\tattrArr.push( v.x );\n\t\tif ( itemSize > 1 ) attrArr.push( v.y );\n\t\tif ( itemSize > 2 ) attrArr.push( v.z );\n\t\tif ( itemSize > 3 ) attrArr.push( v.w );\n\n\t};\n\n\t// barycentric interpolate the first component\n\t_vec4_0.set( 0, 0, 0, 0 )\n\t\t.addScaledVector( v0, baryCoordTri.a.x )\n\t\t.addScaledVector( v1, baryCoordTri.a.y )\n\t\t.addScaledVector( v2, baryCoordTri.a.z );\n\n\t_vec4_1.set( 0, 0, 0, 0 )\n\t\t.addScaledVector( v0, baryCoordTri.b.x )\n\t\t.addScaledVector( v1, baryCoordTri.b.y )\n\t\t.addScaledVector( v2, baryCoordTri.b.z );\n\n\t_vec4_2.set( 0, 0, 0, 0 )\n\t\t.addScaledVector( v0, baryCoordTri.c.x )\n\t\t.addScaledVector( v1, baryCoordTri.c.y )\n\t\t.addScaledVector( v2, baryCoordTri.c.z );\n\n\tif ( normalize ) {\n\n\t\t_vec4_0.normalize();\n\t\t_vec4_1.normalize();\n\t\t_vec4_2.normalize();\n\n\t}\n\n\t// if the face is inverted then add the values in an inverted order\n\taddValues( _vec4_0 );\n\n\tif ( invert ) {\n\n\t\taddValues( _vec4_2 );\n\t\taddValues( _vec4_1 );\n\n\t} else {\n\n\t\taddValues( _vec4_1 );\n\t\taddValues( _vec4_2 );\n\n\t}\n\n}\n\n// Adds the values for the given vertex index onto the new attribute arrays\nfunction appendAttributeFromIndex(\n\tindex,\n\tattributes,\n\tmatrixWorld,\n\tnormalMatrix,\n\tattributeData,\n\tinvert = false,\n) {\n\n\tfor ( const key in attributeData ) {\n\n\t\t// check if the key we're asking for is in the geometry at all\n\t\tconst attr = attributes[ key ];\n\t\tconst arr = attributeData[ key ];\n\t\tif ( ! ( key in attributes ) ) {\n\n\t\t\tthrow new Error( `CSG Operations: Attribute ${ key } no available on geometry.` );\n\n\t\t}\n\n\t\t// specially handle the position and normal attributes because they require transforms\n\t\t// TODO: handle tangents\n\t\tconst itemSize = attr.itemSize;\n\t\tif ( key === 'position' ) {\n\n\t\t\t_vec3.fromBufferAttribute( attr, index ).applyMatrix4( matrixWorld );\n\t\t\tarr.push( _vec3.x, _vec3.y, _vec3.z );\n\n\t\t} else if ( key === 'normal' ) {\n\n\t\t\t_vec3.fromBufferAttribute( attr, index ).applyNormalMatrix( normalMatrix );\n\t\t\tif ( invert ) {\n\n\t\t\t\t_vec3.multiplyScalar( - 1 );\n\n\t\t\t}\n\n\t\t\tarr.push( _vec3.x, _vec3.y, _vec3.z );\n\n\t\t} else {\n\n\t\t\tarr.push( attr.getX( index ) );\n\t\t\tif ( itemSize > 1 ) arr.push( attr.getY( index ) );\n\t\t\tif ( itemSize > 2 ) arr.push( attr.getZ( index ) );\n\t\t\tif ( itemSize > 3 ) arr.push( attr.getW( index ) );\n\n\t\t}\n\n\t}\n\n}\n","import { Triangle } from 'three';\nimport { setDebugContext } from '../operations/operationsUtils.js';\n\nclass TriangleIntersectData {\n\n\tconstructor( tri ) {\n\n\t\tthis.triangle = new Triangle().copy( tri );\n\t\tthis.intersects = {};\n\n\t}\n\n\taddTriangle( index, tri ) {\n\n\t\tthis.intersects[ index ] = new Triangle().copy( tri );\n\n\t}\n\n\tgetIntersectArray() {\n\n\t\tconst array = [];\n\t\tconst { intersects } = this;\n\t\tfor ( const key in intersects ) {\n\n\t\t\tarray.push( intersects[ key ] );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n}\n\nclass TriangleIntersectionSets {\n\n\tconstructor() {\n\n\t\tthis.data = {};\n\n\t}\n\n\taddTriangleIntersection( ia, triA, ib, triB ) {\n\n\t\tconst { data } = this;\n\t\tif ( ! data[ ia ] ) {\n\n\t\t\tdata[ ia ] = new TriangleIntersectData( triA );\n\n\t\t}\n\n\t\tdata[ ia ].addTriangle( ib, triB );\n\n\t}\n\n\tgetTrianglesAsArray( id = null ) {\n\n\t\tconst { data } = this;\n\t\tconst arr = [];\n\n\t\tif ( id !== null ) {\n\n\t\t\tif ( id in data ) {\n\n\t\t\t\tarr.push( data[ id ].triangle );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( const key in data ) {\n\n\t\t\t\tarr.push( data[ key ].triangle );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn arr;\n\n\t}\n\n\tgetTriangleIndices() {\n\n\t\treturn Object.keys( this.data ).map( i => parseInt( i ) );\n\n\t}\n\n\tgetIntersectionIndices( id ) {\n\n\t\tconst { data } = this;\n\t\tif ( ! data[ id ] ) {\n\n\t\t\treturn [];\n\n\t\t} else {\n\n\t\t\treturn Object.keys( data[ id ].intersects ).map( i => parseInt( i ) );\n\n\n\t\t}\n\n\t}\n\n\tgetIntersectionsAsArray( id = null, id2 = null ) {\n\n\t\tconst { data } = this;\n\t\tconst triSet = new Set();\n\t\tconst arr = [];\n\n\t\tconst addTriangles = key => {\n\n\t\t\tif ( ! data[ key ] ) return;\n\n\t\t\tif ( id2 !== null ) {\n\n\t\t\t\tif ( data[ key ].intersects[ id2 ] ) {\n\n\t\t\t\t\tarr.push( data[ key ].intersects[ id2 ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst intersects = data[ key ].intersects;\n\t\t\t\tfor ( const key2 in intersects ) {\n\n\t\t\t\t\tif ( ! triSet.has( key2 ) ) {\n\n\t\t\t\t\t\ttriSet.add( key2 );\n\t\t\t\t\t\tarr.push( intersects[ key2 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tif ( id !== null ) {\n\n\t\t\taddTriangles( id );\n\n\t\t} else {\n\n\t\t\tfor ( const key in data ) {\n\n\t\t\t\taddTriangles( key );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn arr;\n\n\t}\n\n\treset() {\n\n\t\tthis.data = {};\n\n\t}\n\n}\n\nexport class OperationDebugData {\n\n\tconstructor() {\n\n\t\tthis.enabled = false;\n\t\tthis.triangleIntersectsA = new TriangleIntersectionSets();\n\t\tthis.triangleIntersectsB = new TriangleIntersectionSets();\n\t\tthis.intersectionEdges = [];\n\n\t}\n\n\taddIntersectingTriangles( ia, triA, ib, triB ) {\n\n\t\tconst { triangleIntersectsA, triangleIntersectsB } = this;\n\t\ttriangleIntersectsA.addTriangleIntersection( ia, triA, ib, triB );\n\t\ttriangleIntersectsB.addTriangleIntersection( ib, triB, ia, triA );\n\n\t}\n\n\taddEdge( edge ) {\n\n\t\tthis.intersectionEdges.push( edge.clone() );\n\n\t}\n\n\treset() {\n\n\t\tthis.triangleIntersectsA.reset();\n\t\tthis.triangleIntersectsB.reset();\n\t\tthis.intersectionEdges = [];\n\n\t}\n\n\tinit() {\n\n\t\tif ( this.enabled ) {\n\n\t\t\tthis.reset();\n\t\t\tsetDebugContext( this );\n\n\t\t}\n\n\t}\n\n\tcomplete() {\n\n\t\tif ( this.enabled ) {\n\n\t\t\tsetDebugContext( null );\n\n\t\t}\n\n\t}\n\n}\n","import { Matrix4, Matrix3, Triangle } from 'three';\nimport {\n\tgetHitSideWithCoplanarCheck,\n\tgetHitSide,\n\tcollectIntersectingTriangles,\n\tappendAttributeFromTriangle,\n\tappendAttributesFromIndices,\n\tgetOperationAction,\n\tSKIP_TRI, INVERT_TRI,\n} from './operationsUtils.js';\nimport { getTriCount } from '../utils/geometryUtils.js';\nimport { HOLLOW_INTERSECTION, HOLLOW_SUBTRACTION } from '../constants.js';\nimport { isTriDegenerate } from '../utils/triangleUtils.js';\n\nconst _matrix = new Matrix4();\nconst _normalMatrix = new Matrix3();\nconst _triA = new Triangle();\nconst _triB = new Triangle();\nconst _tri = new Triangle();\nconst _barycoordTri = new Triangle();\nconst _attr = [];\nconst _actions = [];\n\nfunction getFirstIdFromSet( set ) {\n\n\tfor ( const id of set ) return id;\n\n}\n\n// runs the given operation against a and b using the splitter and appending data to the\n// attributeData object.\nexport function performOperation(\n\ta,\n\tb,\n\toperations,\n\tsplitter,\n\tattributeData,\n\toptions = {},\n) {\n\n\tconst { useGroups = true } = options;\n\tconst { aIntersections, bIntersections } = collectIntersectingTriangles( a, b );\n\n\tconst resultGroups = [];\n\tlet resultMaterials = null;\n\n\tlet groupOffset;\n\tgroupOffset = useGroups ? 0 : - 1;\n\tperformSplitTriangleOperations( a, b, aIntersections, operations, false, splitter, attributeData, groupOffset );\n\tperformWholeTriangleOperations( a, b, aIntersections, operations, false, attributeData, groupOffset );\n\n\t// find whether the set of operations contains a non-hollow operations. If it does then we need\n\t// to perform the second set of triangle additions\n\tconst nonHollow = operations\n\t\t.findIndex( op => op !== HOLLOW_INTERSECTION && op !== HOLLOW_SUBTRACTION ) !== - 1;\n\n\tif ( nonHollow ) {\n\n\t\tgroupOffset = useGroups ? a.geometry.groups.length || 1 : - 1;\n\t\tperformSplitTriangleOperations( b, a, bIntersections, operations, true, splitter, attributeData, groupOffset );\n\t\tperformWholeTriangleOperations( b, a, bIntersections, operations, true, attributeData, groupOffset );\n\n\t}\n\n\t_attr.length = 0;\n\t_actions.length = 0;\n\n\treturn {\n\t\tgroups: resultGroups,\n\t\tmaterials: resultMaterials\n\t};\n\n}\n\n// perform triangle splitting and CSG operations on the set of split triangles\nfunction performSplitTriangleOperations(\n\ta,\n\tb,\n\tintersectionMap,\n\toperations,\n\tinvert,\n\tsplitter,\n\tattributeData,\n\tgroupOffset = 0,\n) {\n\n\tconst invertedGeometry = a.matrixWorld.determinant() < 0;\n\n\t// transforms into the local frame of matrix b\n\t_matrix\n\t\t.copy( b.matrixWorld )\n\t\t.invert()\n\t\t.multiply( a.matrixWorld );\n\n\t_normalMatrix\n\t\t.getNormalMatrix( a.matrixWorld )\n\t\t.multiplyScalar( invertedGeometry ? - 1 : 1 );\n\n\tconst groupIndices = a.geometry.groupIndices;\n\tconst aIndex = a.geometry.index;\n\tconst aPosition = a.geometry.attributes.position;\n\n\tconst bBVH = b.geometry.boundsTree;\n\tconst bIndex = b.geometry.index;\n\tconst bPosition = b.geometry.attributes.position;\n\tconst splitIds = intersectionMap.ids;\n\tconst intersectionSet = intersectionMap.intersectionSet;\n\n\t// iterate over all split triangle indices\n\tfor ( let i = 0, l = splitIds.length; i < l; i ++ ) {\n\n\t\tconst ia = splitIds[ i ];\n\t\tconst groupIndex = groupOffset === - 1 ? 0 : groupIndices[ ia ] + groupOffset;\n\n\t\t// get the triangle in the geometry B local frame\n\t\tconst ia3 = 3 * ia;\n\t\tconst ia0 = aIndex.getX( ia3 + 0 );\n\t\tconst ia1 = aIndex.getX( ia3 + 1 );\n\t\tconst ia2 = aIndex.getX( ia3 + 2 );\n\t\t_triA.a.fromBufferAttribute( aPosition, ia0 ).applyMatrix4( _matrix );\n\t\t_triA.b.fromBufferAttribute( aPosition, ia1 ).applyMatrix4( _matrix );\n\t\t_triA.c.fromBufferAttribute( aPosition, ia2 ).applyMatrix4( _matrix );\n\n\t\t// initialize the splitter with the triangle from geometry A\n\t\tsplitter.reset();\n\t\tsplitter.initialize( _triA );\n\n\t\t// split the triangle with the intersecting triangles from B\n\t\tconst intersectingIndices = intersectionSet[ ia ];\n\t\tfor ( let ib = 0, l = intersectingIndices.length; ib < l; ib ++ ) {\n\n\t\t\tconst ib3 = 3 * intersectingIndices[ ib ];\n\t\t\tconst ib0 = bIndex.getX( ib3 + 0 );\n\t\t\tconst ib1 = bIndex.getX( ib3 + 1 );\n\t\t\tconst ib2 = bIndex.getX( ib3 + 2 );\n\t\t\t_triB.a.fromBufferAttribute( bPosition, ib0 );\n\t\t\t_triB.b.fromBufferAttribute( bPosition, ib1 );\n\t\t\t_triB.c.fromBufferAttribute( bPosition, ib2 );\n\t\t\tsplitter.splitByTriangle( _triB );\n\n\t\t}\n\n\t\t// for all triangles in the split result\n\t\tconst triangles = splitter.triangles;\n\t\tfor ( let ib = 0, l = triangles.length; ib < l; ib ++ ) {\n\n\t\t\t// get the barycentric coordinates of the clipped triangle to add\n\t\t\tconst clippedTri = triangles[ ib ];\n\n\t\t\t// try to use the side derived from the clipping but if it turns out to be\n\t\t\t// uncertain then fall back to the raycasting approach\n\t\t\tconst hitSide = splitter.coplanarTriangleUsed ?\n\t\t\t\tgetHitSideWithCoplanarCheck( clippedTri, bBVH ) :\n\t\t\t\tgetHitSide( clippedTri, bBVH );\n\n\t\t\t_attr.length = 0;\n\t\t\t_actions.length = 0;\n\t\t\tfor ( let o = 0, lo = operations.length; o < lo; o ++ ) {\n\n\t\t\t\tconst op = getOperationAction( operations[ o ], hitSide, invert );\n\t\t\t\tif ( op !== SKIP_TRI ) {\n\n\t\t\t\t\t_actions.push( op );\n\t\t\t\t\t_attr.push( attributeData[ o ].getGroupAttrSet( groupIndex ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( _attr.length !== 0 ) {\n\n\t\t\t\t_triA.getBarycoord( clippedTri.a, _barycoordTri.a );\n\t\t\t\t_triA.getBarycoord( clippedTri.b, _barycoordTri.b );\n\t\t\t\t_triA.getBarycoord( clippedTri.c, _barycoordTri.c );\n\n\t\t\t\tfor ( let k = 0, lk = _attr.length; k < lk; k ++ ) {\n\n\t\t\t\t\tconst attrSet = _attr[ k ];\n\t\t\t\t\tconst action = _actions[ k ];\n\t\t\t\t\tconst invertTri = action === INVERT_TRI;\n\t\t\t\t\tappendAttributeFromTriangle( ia, _barycoordTri, a.geometry, a.matrixWorld, _normalMatrix, attrSet, invertedGeometry !== invertTri );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn splitIds.length;\n\n}\n\n// perform CSG operations on the set of whole triangles using a half edge structure\n// at the moment this isn't always faster due to overhead of building the half edge structure\n// and degraded connectivity due to split triangles.\n\nfunction performWholeTriangleOperations(\n\ta,\n\tb,\n\tsplitTriSet,\n\toperations,\n\tinvert,\n\tattributeData,\n\tgroupOffset = 0,\n) {\n\n\tconst invertedGeometry = a.matrixWorld.determinant() < 0;\n\n\t// matrix for transforming into the local frame of geometry b\n\t_matrix\n\t\t.copy( b.matrixWorld )\n\t\t.invert()\n\t\t.multiply( a.matrixWorld );\n\n\t_normalMatrix\n\t\t.getNormalMatrix( a.matrixWorld )\n\t\t.multiplyScalar( invertedGeometry ? - 1 : 1 );\n\n\tconst bBVH = b.geometry.boundsTree;\n\tconst groupIndices = a.geometry.groupIndices;\n\tconst aIndex = a.geometry.index;\n\tconst aAttributes = a.geometry.attributes;\n\tconst aPosition = aAttributes.position;\n\n\tconst stack = [];\n\tconst halfEdges = a.geometry.halfEdges;\n\tconst traverseSet = new Set();\n\tconst triCount = getTriCount( a.geometry );\n\tfor ( let i = 0, l = triCount; i < l; i ++ ) {\n\n\t\tif ( ! ( i in splitTriSet.intersectionSet ) ) {\n\n\t\t\ttraverseSet.add( i );\n\n\t\t}\n\n\t}\n\n\twhile ( traverseSet.size > 0 ) {\n\n\t\tconst id = getFirstIdFromSet( traverseSet );\n\t\ttraverseSet.delete( id );\n\n\t\tstack.push( id );\n\n\t\t// get the vertex indices\n\t\tconst i3 = 3 * id;\n\t\tconst i0 = aIndex.getX( i3 + 0 );\n\t\tconst i1 = aIndex.getX( i3 + 1 );\n\t\tconst i2 = aIndex.getX( i3 + 2 );\n\n\t\t// get the vertex position in the frame of geometry b so we can\n\t\t// perform hit testing\n\t\t_tri.a.fromBufferAttribute( aPosition, i0 ).applyMatrix4( _matrix );\n\t\t_tri.b.fromBufferAttribute( aPosition, i1 ).applyMatrix4( _matrix );\n\t\t_tri.c.fromBufferAttribute( aPosition, i2 ).applyMatrix4( _matrix );\n\n\t\t// get the side and decide if we need to cull the triangle based on the operation\n\t\tconst hitSide = getHitSide( _tri, bBVH );\n\n\t\t_actions.length = 0;\n\t\t_attr.length = 0;\n\t\tfor ( let o = 0, lo = operations.length; o < lo; o ++ ) {\n\n\t\t\tconst op = getOperationAction( operations[ o ], hitSide, invert );\n\t\t\tif ( op !== SKIP_TRI ) {\n\n\t\t\t\t_actions.push( op );\n\t\t\t\t_attr.push( attributeData[ o ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\twhile ( stack.length > 0 ) {\n\n\t\t\tconst currId = stack.pop();\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\tconst sid = halfEdges.getSiblingTriangleIndex( currId, i );\n\t\t\t\tif ( sid !== - 1 && traverseSet.has( sid ) ) {\n\n\t\t\t\t\tstack.push( sid );\n\t\t\t\t\ttraverseSet.delete( sid );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( _attr.length !== 0 ) {\n\n\t\t\t\tconst i3 = 3 * currId;\n\t\t\t\tconst i0 = aIndex.getX( i3 + 0 );\n\t\t\t\tconst i1 = aIndex.getX( i3 + 1 );\n\t\t\t\tconst i2 = aIndex.getX( i3 + 2 );\n\t\t\t\tconst groupIndex = groupOffset === - 1 ? 0 : groupIndices[ currId ] + groupOffset;\n\n\t\t\t\t_tri.a.fromBufferAttribute( aPosition, i0 );\n\t\t\t\t_tri.b.fromBufferAttribute( aPosition, i1 );\n\t\t\t\t_tri.c.fromBufferAttribute( aPosition, i2 );\n\t\t\t\tif ( ! isTriDegenerate( _tri ) ) {\n\n\t\t\t\t\tfor ( let k = 0, lk = _attr.length; k < lk; k ++ ) {\n\n\t\t\t\t\t\tconst action = _actions[ k ];\n\t\t\t\t\t\tconst attrSet = _attr[ k ].getGroupAttrSet( groupIndex );\n\t\t\t\t\t\tconst invertTri = action === INVERT_TRI;\n\t\t\t\t\t\tappendAttributesFromIndices( i0, i1, i2, aAttributes, a.matrixWorld, _normalMatrix, attrSet, invertTri !== invertedGeometry );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n","import { BufferAttribute } from 'three';\nimport { TriangleSplitter } from './TriangleSplitter.js';\nimport { TypedAttributeData } from './TypedAttributeData.js';\nimport { OperationDebugData } from './debug/OperationDebugData.js';\nimport { performOperation } from './operations/operations.js';\nimport { Brush } from './Brush.js';\n\n// merges groups with common material indices in place\nfunction joinGroups( groups ) {\n\n\tfor ( let i = 0; i < groups.length - 1; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\t\tconst nextGroup = groups[ i + 1 ];\n\t\tif ( group.materialIndex === nextGroup.materialIndex ) {\n\n\t\t\tconst start = group.start;\n\t\t\tconst end = nextGroup.start + nextGroup.count;\n\t\t\tnextGroup.start = start;\n\t\t\tnextGroup.count = end - start;\n\n\t\t\tgroups.splice( i, 1 );\n\t\t\ti --;\n\n\t\t}\n\n\t}\n\n}\n\n// initialize the target geometry and attribute data to be based on\n// the given reference geometry\nfunction prepareAttributesData( referenceGeometry, targetGeometry, attributeData, relevantAttributes ) {\n\n\tattributeData.clear();\n\n\t// initialize and clear unused data from the attribute buffers and vice versa\n\tconst aAttributes = referenceGeometry.attributes;\n\tfor ( let i = 0, l = relevantAttributes.length; i < l; i ++ ) {\n\n\t\tconst key = relevantAttributes[ i ];\n\t\tconst aAttr = aAttributes[ key ];\n\t\tattributeData.initializeArray( key, aAttr.array.constructor, aAttr.itemSize, aAttr.normalized );\n\n\t}\n\n\tfor ( const key in attributeData.attributes ) {\n\n\t\tif ( ! relevantAttributes.includes( key ) ) {\n\n\t\t\tattributeData.delete( key );\n\n\t\t}\n\n\t}\n\n\tfor ( const key in targetGeometry.attributes ) {\n\n\t\tif ( ! relevantAttributes.includes( key ) ) {\n\n\t\t\ttargetGeometry.deleteAttribute( key );\n\t\t\ttargetGeometry.dispose();\n\n\t\t}\n\n\t}\n\n}\n\n// Assigns the given tracked attribute data to the geometry and returns whether the\n// geometry needs to be disposed of.\nfunction assignBufferData( geometry, attributeData, groupOrder ) {\n\n\tlet needsDisposal = false;\n\tlet drawRange = - 1;\n\n\t// set the data\n\tconst attributes = geometry.attributes;\n\tconst referenceAttrSet = attributeData.groupAttributes[ 0 ];\n\tfor ( const key in referenceAttrSet ) {\n\n\t\tconst requiredLength = attributeData.getTotalLength( key );\n\t\tconst type = attributeData.getType( key );\n\t\tconst itemSize = attributeData.getItemSize( key );\n\t\tconst normalized = attributeData.getNormalized( key );\n\t\tlet geoAttr = attributes[ key ];\n\t\tif ( ! geoAttr || geoAttr.array.length < requiredLength ) {\n\n\t\t\t// create the attribute if it doesn't exist yet\n\t\t\tgeoAttr = new BufferAttribute( new type( requiredLength ), itemSize, normalized );\n\t\t\tgeometry.setAttribute( key, geoAttr );\n\t\t\tneedsDisposal = true;\n\n\t\t}\n\n\t\t// assign the data to the geometry attribute buffers in the provided order\n\t\t// of the groups list\n\t\tlet offset = 0;\n\t\tfor ( let i = 0, l = Math.min( groupOrder.length, attributeData.groupCount ); i < l; i ++ ) {\n\n\t\t\tconst index = groupOrder[ i ].index;\n\t\t\tconst { array, type, length } = attributeData.groupAttributes[ index ][ key ];\n\t\t\tconst trimmedArray = new type( array.buffer, 0, length );\n\t\t\tgeoAttr.array.set( trimmedArray, offset );\n\t\t\toffset += trimmedArray.length;\n\n\t\t}\n\n\t\tgeoAttr.needsUpdate = true;\n\t\tdrawRange = requiredLength / geoAttr.itemSize;\n\n\t}\n\n\t// remove or update the index appropriately\n\tif ( geometry.index ) {\n\n\t\tconst indexArray = geometry.index.array;\n\t\tif ( indexArray.length < drawRange ) {\n\n\t\t\tgeometry.index = null;\n\t\t\tneedsDisposal = true;\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0, l = indexArray.length; i < l; i ++ ) {\n\n\t\t\t\tindexArray[ i ] = i;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// initialize the groups\n\tlet groupOffset = 0;\n\tgeometry.clearGroups();\n\tfor ( let i = 0, l = Math.min( groupOrder.length, attributeData.groupCount ); i < l; i ++ ) {\n\n\t\tconst { index, materialIndex } = groupOrder[ i ];\n\t\tconst vertCount = attributeData.getCount( index );\n\t\tif ( vertCount !== 0 ) {\n\n\t\t\tgeometry.addGroup( groupOffset, vertCount, materialIndex );\n\t\t\tgroupOffset += vertCount;\n\n\t\t}\n\n\t}\n\n\t// update the draw range\n\tgeometry.setDrawRange( 0, drawRange );\n\n\t// remove the bounds tree if it exists because its now out of date\n\t// TODO: can we have this dispose in the same way that a brush does?\n\t// TODO: why are half edges and group indices not removed here?\n\tgeometry.boundsTree = null;\n\n\tif ( needsDisposal ) {\n\n\t\tgeometry.dispose();\n\n\t}\n\n}\n\n// Returns the list of materials used for the given set of groups\nfunction getMaterialList( groups, materials ) {\n\n\tlet result = materials;\n\tif ( ! Array.isArray( materials ) ) {\n\n\t\tresult = [];\n\t\tgroups.forEach( g => {\n\n\t\t\tresult[ g.materialIndex ] = materials;\n\n\t\t} );\n\n\t}\n\n\treturn result;\n\n}\n\n// Utility class for performing CSG operations\nexport class Evaluator {\n\n\tconstructor() {\n\n\t\tthis.triangleSplitter = new TriangleSplitter();\n\t\tthis.attributeData = [];\n\t\tthis.attributes = [ 'position', 'uv', 'normal' ];\n\t\tthis.useGroups = true;\n\t\tthis.consolidateGroups = true;\n\t\tthis.debug = new OperationDebugData();\n\n\t}\n\n\tgetGroupRanges( geometry ) {\n\n\t\treturn ! this.useGroups || geometry.groups.length === 0 ?\n\t\t\t[ { start: 0, count: Infinity, materialIndex: 0 } ] :\n\t\t\tgeometry.groups.map( group => ( { ...group } ) );\n\n\t}\n\n\tevaluate( a, b, operations, targetBrushes = new Brush() ) {\n\n\t\tlet wasArray = true;\n\t\tif ( ! Array.isArray( operations ) ) {\n\n\t\t\toperations = [ operations ];\n\n\t\t}\n\n\t\tif ( ! Array.isArray( targetBrushes ) ) {\n\n\t\t\ttargetBrushes = [ targetBrushes ];\n\t\t\twasArray = false;\n\n\t\t}\n\n\t\tif ( targetBrushes.length !== operations.length ) {\n\n\t\t\tthrow new Error( 'Evaluator: operations and target array passed as different sizes.' );\n\n\t\t}\n\n\t\ta.prepareGeometry();\n\t\tb.prepareGeometry();\n\n\t\tconst {\n\t\t\ttriangleSplitter,\n\t\t\tattributeData,\n\t\t\tattributes,\n\t\t\tuseGroups,\n\t\t\tconsolidateGroups,\n\t\t\tdebug,\n\t\t} = this;\n\n\t\t// expand the attribute data array to the necessary size\n\t\twhile ( attributeData.length < targetBrushes.length ) {\n\n\t\t\tattributeData.push( new TypedAttributeData() );\n\n\t\t}\n\n\t\t// prepare the attribute data buffer information\n\t\ttargetBrushes.forEach( ( brush, i ) => {\n\n\t\t\tprepareAttributesData( a.geometry, brush.geometry, attributeData[ i ], attributes );\n\n\t\t} );\n\n\t\t// run the operation to fill the list of attribute data\n\t\tdebug.init();\n\t\tperformOperation( a, b, operations, triangleSplitter, attributeData, { useGroups } );\n\t\tdebug.complete();\n\n\t\t// get the materials and group ranges\n\t\tconst aGroups = this.getGroupRanges( a.geometry );\n\t\tconst aMaterials = getMaterialList( aGroups, a.material );\n\n\t\tconst bGroups = this.getGroupRanges( b.geometry );\n\t\tconst bMaterials = getMaterialList( bGroups, b.material );\n\t\tbGroups.forEach( g => g.materialIndex += aMaterials.length );\n\n\t\tlet groups = [ ...aGroups, ...bGroups ]\n\t\t\t.map( ( group, index ) => ( { ...group, index } ) );\n\n\t\t// generate the minimum set of materials needed for the list of groups and adjust the groups\n\t\t// if they're needed\n\t\tif ( useGroups ) {\n\n\t\t\tconst allMaterials = [ ...aMaterials, ...bMaterials ];\n\t\t\tif ( consolidateGroups ) {\n\n\t\t\t\tgroups = groups\n\t\t\t\t\t.map( group => {\n\n\t\t\t\t\t\tconst mat = allMaterials[ group.materialIndex ];\n\t\t\t\t\t\tgroup.materialIndex = allMaterials.indexOf( mat );\n\t\t\t\t\t\treturn group;\n\n\t\t\t\t\t} )\n\t\t\t\t\t.sort( ( a, b ) => {\n\n\t\t\t\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\t// create a map from old to new index and remove materials that aren't used\n\t\t\tconst finalMaterials = [];\n\t\t\tfor ( let i = 0, l = allMaterials.length; i < l; i ++ ) {\n\n\t\t\t\tlet foundGroup = false;\n\t\t\t\tfor ( let g = 0, lg = groups.length; g < lg; g ++ ) {\n\n\t\t\t\t\tconst group = groups[ g ];\n\t\t\t\t\tif ( group.materialIndex === i ) {\n\n\t\t\t\t\t\tfoundGroup = true;\n\t\t\t\t\t\tgroup.materialIndex = finalMaterials.length;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( foundGroup ) {\n\n\t\t\t\t\tfinalMaterials.push( allMaterials[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttargetBrushes.forEach( tb => {\n\n\t\t\t\ttb.material = finalMaterials;\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\tgroups = [ { start: 0, count: Infinity, index: 0, materialIndex: 0 } ];\n\t\t\ttargetBrushes.forEach( tb => {\n\n\t\t\t\ttb.material = aMaterials[ 0 ];\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// apply groups and attribute data to the geometry\n\t\ttargetBrushes.forEach( ( brush, i ) => {\n\n\t\t\tconst targetGeometry = brush.geometry;\n\t\t\tassignBufferData( targetGeometry, attributeData[ i ], groups );\n\t\t\tif ( consolidateGroups ) {\n\n\t\t\t\tjoinGroups( targetGeometry.groups );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn wasArray ? targetBrushes : targetBrushes[ 0 ];\n\n\t}\n\n\t// TODO: fix\n\tevaluateHierarchy( root, target = new Brush() ) {\n\n\t\troot.updateMatrixWorld( true );\n\n\t\tconst flatTraverse = ( obj, cb ) => {\n\n\t\t\tconst children = obj.children;\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\t\t\t\tif ( child.isOperationGroup ) {\n\n\t\t\t\t\tflatTraverse( child, cb );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcb( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\n\t\tconst traverse = brush => {\n\n\t\t\tconst children = brush.children;\n\t\t\tlet didChange = false;\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\t\t\t\tdidChange = traverse( child ) || didChange;\n\n\t\t\t}\n\n\t\t\tconst isDirty = brush.isDirty();\n\t\t\tif ( isDirty ) {\n\n\t\t\t\tbrush.markUpdated();\n\n\t\t\t}\n\n\t\t\tif ( didChange && ! brush.isOperationGroup ) {\n\n\t\t\t\tlet result;\n\t\t\t\tflatTraverse( brush, child => {\n\n\t\t\t\t\tif ( ! result ) {\n\n\t\t\t\t\t\tresult = this.evaluate( brush, child, child.operation );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tresult = this.evaluate( result, child, child.operation );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tbrush._cachedGeometry = result.geometry;\n\t\t\t\tbrush._cachedMaterials = result.material;\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\treturn didChange || isDirty;\n\n\t\t\t}\n\n\t\t};\n\n\t\ttraverse( root );\n\n\t\ttarget.geometry = root._cachedGeometry;\n\t\ttarget.material = root._cachedMaterials;\n\n\t\treturn target;\n\n\t}\n\n\treset() {\n\n\t\tthis.triangleSplitter.reset();\n\n\t}\n\n}\n","import { BufferGeometry } from 'three';\nimport { Brush } from '../Brush.js';\nimport { ADDITION } from '../constants.js';\n\nexport class Operation extends Brush {\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\n\t\tthis.isOperation = true;\n\t\tthis.operation = ADDITION;\n\n\t\tthis._cachedGeometry = new BufferGeometry();\n\t\tthis._cachedMaterials = null;\n\t\tthis._previousOperation = null;\n\n\t}\n\n\tmarkUpdated() {\n\n\t\tsuper.markUpdated();\n\t\tthis._previousOperation = this.operation;\n\n\t}\n\n\tisDirty() {\n\n\t\treturn this.operation !== this._previousOperation || super.isDirty();\n\n\t}\n\n\tinsertBefore( brush ) {\n\n\t\tconst parent = this.parent;\n\t\tconst index = parent.children.indexOf( this );\n\t\tparent.children.splice( index, 0, brush );\n\n\t}\n\n\tinsertAfter( brush ) {\n\n\t\tconst parent = this.parent;\n\t\tconst index = parent.children.indexOf( this );\n\t\tparent.children.splice( index + 1, 0, brush );\n\n\t}\n\n}\n","import { Group, Matrix4 } from 'three';\n\nexport class OperationGroup extends Group {\n\n\tconstructor() {\n\n\t\tsuper();\n\t\tthis.isOperationGroup = true;\n\t\tthis._previousMatrix = new Matrix4();\n\n\t}\n\n\tmarkUpdated() {\n\n\t\tthis._previousMatrix.copy( this.matrix );\n\n\t}\n\n\tisDirty() {\n\n\t\tconst { matrix, _previousMatrix } = this;\n\t\tconst el1 = matrix.elements;\n\t\tconst el2 = _previousMatrix.elements;\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( el1[ i ] !== el2[ i ] ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n}\n","import { Color } from 'three';\n\nfunction addWorldPosition( shader ) {\n\n\tif ( /varying\\s+vec3\\s+wPosition/.test( shader.vertexShader ) ) return;\n\n\tshader.vertexShader = `\n\t\t\tvarying vec3 wPosition;\n\t\t\t${shader.vertexShader}\n\t\t`.replace(\n\t\t/#include <displacementmap_vertex>/,\n\t\tv =>\n\t\t\t`${v}\n\t\t\t\twPosition = (modelMatrix * vec4( transformed, 1.0 )).xyz;\n\t\t\t\t`,\n\t);\n\n\tshader.fragmentShader = `\n\t\tvarying vec3 wPosition;\n\t\t${shader.fragmentShader}\n\t\t`;\n\n\treturn shader;\n\n}\n\nexport function csgGridShaderMixin( shader ) {\n\n\tshader.uniforms = {\n\t\t...shader.uniforms,\n\t\tcheckerboardColor: { value: new Color( 0x111111 ) }\n\t};\n\n\taddWorldPosition( shader );\n\n\tshader.defines = { CSG_GRID: 1 };\n\n\tshader.fragmentShader = shader.fragmentShader.replace(\n\t\t/#include <common>/,\n\t\tv =>\n\t\t/* glsl */`\n\t\t\t${v}\n\n\t\t\tuniform vec3 checkerboardColor;\n\t\t\tfloat getCheckerboard( vec2 p, float scale ) {\n\n\t\t\t\tp /= scale;\n\t\t\t\tp += vec2( 0.5 );\n\n\t\t\t\tvec2 line = mod( p, 2.0 ) - vec2( 1.0 );\n\t\t\t\tline = abs( line );\n\n\t\t\t\tvec2 pWidth = fwidth( line );\n\t\t\t\tvec2 value = smoothstep( 0.5 - pWidth / 2.0, 0.5 + pWidth / 2.0, line );\n\t\t\t\tfloat result = value.x * value.y + ( 1.0 - value.x ) * ( 1.0 - value.y );\n\n\t\t\t\treturn result;\n\n\t\t\t}\n\n\t\t\tfloat getGrid( vec2 p, float scale, float thickness ) {\n\n\t\t\t\tp /= 0.5 * scale;\n\n\t\t\t\tvec2 stride = mod( p, 2.0 ) - vec2( 1.0 );\n\t\t\t\tstride = abs( stride );\n\n\t\t\t\tvec2 pWidth = fwidth( p );\n\t\t\t\tvec2 line = smoothstep( 1.0 - pWidth / 2.0, 1.0 + pWidth / 2.0, stride + thickness * pWidth );\n\n\t\t\t\treturn max( line.x, line.y );\n\n\t\t\t}\n\n\t\t\tvec3 getFaceColor( vec2 p, vec3 color ) {\n\n\t\t\t\tfloat checkLarge = getCheckerboard( p, 1.0 );\n\t\t\t\tfloat checkSmall = abs( getCheckerboard( p, 0.1 ) );\n\t\t\t\tfloat lines = getGrid( p, 10.0, 1.0 );\n\n\t\t\t\tvec3 checkColor = mix(\n\t\t\t\t\tvec3( 0.7 ) * color,\n\t\t\t\t\tvec3( 1.0 ) * color,\n\t\t\t\t\tcheckSmall * 0.4 + checkLarge * 0.6\n\t\t\t\t);\n\n\t\t\t\tvec3 gridColor = vec3( 1.0 );\n\n\t\t\t\treturn mix( checkColor, gridColor, lines );\n\n\t\t\t}\n\n\t\t\tfloat angleBetween( vec3 a, vec3 b ) {\n\n\t\t\t\treturn acos( abs( dot( a, b ) ) );\n\n\t\t\t}\n\n\t\t\tvec3 planeProject( vec3 norm, vec3 other ) {\n\n\t\t\t\tfloat d = dot( norm, other );\n\t\t\t\treturn normalize( other - norm * d );\n\n\t\t\t}\n\n\t\t\tvec3 getBlendFactors( vec3 norm ) {\n\n\t\t\t\tvec3 xVec = vec3( 1.0, 0.0, 0.0 );\n\t\t\t\tvec3 yVec = vec3( 0.0, 1.0, 0.0 );\n\t\t\t\tvec3 zVec = vec3( 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 projX = planeProject( xVec, norm );\n\t\t\t\tvec3 projY = planeProject( yVec, norm );\n\t\t\t\tvec3 projZ = planeProject( zVec, norm );\n\n\t\t\t\tfloat xAngle = max(\n\t\t\t\t\tangleBetween( xVec, projY ),\n\t\t\t\t\tangleBetween( xVec, projZ )\n\t\t\t\t);\n\n\t\t\t\tfloat yAngle = max(\n\t\t\t\t\tangleBetween( yVec, projX ),\n\t\t\t\t\tangleBetween( yVec, projZ )\n\t\t\t\t);\n\n\t\t\t\tfloat zAngle = max(\n\t\t\t\t\tangleBetween( zVec, projX ),\n\t\t\t\t\tangleBetween( zVec, projY )\n\t\t\t\t);\n\n\t\t\t\treturn vec3( xAngle, yAngle, zAngle ) / ( 0.5 * PI );\n\n\t\t\t}\n\t\t` ).replace(\n\t\t/#include <normal_fragment_maps>/,\n\t\tv =>\n\t\t/* glsl */`${v}\n\t\t\t\t#if CSG_GRID\n\t\t\t\t{\n\n\t\t\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n\t\t\t\t\tfloat yCont = abs( dot( vec3( 0.0, 1.0, 0.0 ), worldNormal ) );\n\t\t\t\t\tfloat zCont = abs( dot( vec3( 0.0, 0.0, 1.0 ), worldNormal ) );\n\t\t\t\t\tfloat xCont = abs( dot( vec3( 1.0, 0.0, 0.0 ), worldNormal ) );\n\n\t\t\t\t\tvec3 factors = getBlendFactors( worldNormal );\n\t\t\t\t\tfactors = smoothstep( vec3( 0.475 ), vec3( 0.525 ), vec3( 1.0 ) - factors );\n\n\t\t\t\t\tfloat weight = factors.x + factors.y + factors.z;\n\t\t\t\t\tfactors /= weight;\n\n\t\t\t\t\tvec3 color =\n\t\t\t\t\t\tgetFaceColor( wPosition.yz, diffuseColor.rgb ) * factors.x +\n\t\t\t\t\t\tgetFaceColor( wPosition.xz, diffuseColor.rgb ) * factors.y +\n\t\t\t\t\t\tgetFaceColor( wPosition.xy, diffuseColor.rgb ) * factors.z;\n\n\t\t\t\t\tdiffuseColor.rgb = color;\n\n\t\t\t\t}\n\t\t\t\t#endif\n\t\t\t\t`,\n\t);\n\n\treturn shader;\n\n}\n","import { MeshPhongMaterial } from 'three';\nimport { csgGridShaderMixin } from './shaderUtils.js';\n\nexport class GridMaterial extends MeshPhongMaterial {\n\n\tget enableGrid() {\n\n\t\treturn Boolean( this._enableGrid );\n\n\t}\n\n\tset enableGrid( v ) {\n\n\t\tif ( this._enableGrid !== v ) {\n\n\t\t\tthis._enableGrid = v;\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\t\tthis.enableGrid = true;\n\n\t}\n\n\tonBeforeCompile( shader ) {\n\n\t\tcsgGridShaderMixin( shader );\n\t\tshader.defines.CSG_GRID = Number( this.enableGrid );\n\n\t}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.enableGrid.toString();\n\n\t}\n\n}\n","import { BufferAttribute, Color, MathUtils } from 'three';\n\nexport function getTriangleDefinitions( ...triangles ) {\n\n\tfunction getVectorDefinition( v ) {\n\n\t\treturn /* js */`new THREE.Vector3( ${ v.x }, ${ v.y }, ${ v.z } )`;\n\n\t}\n\n\treturn triangles.map( t => {\n\n\t\treturn /* js */`\nnew THREE.Triangle(\n\t${ getVectorDefinition( t.a ) },\n\t${ getVectorDefinition( t.b ) },\n\t${ getVectorDefinition( t.c ) },\n)\n\t\t`.trim();\n\n\t} );\n\n}\n\nexport function logTriangleDefinitions( ...triangles ) {\n\n\tconsole.log( getTriangleDefinitions( ...triangles ).join( ',\\n' ) );\n\n}\n\nexport function generateRandomTriangleColors( geometry ) {\n\n\tconst position = geometry.attributes.position;\n\tconst array = new Float32Array( position.count * 3 );\n\n\tconst color = new Color();\n\tfor ( let i = 0, l = array.length; i < l; i += 9 ) {\n\n\t\tcolor.setHSL(\n\t\t\tMath.random(),\n\t\t\tMathUtils.lerp( 0.5, 1.0, Math.random() ),\n\t\t\tMathUtils.lerp( 0.5, 0.75, Math.random() ),\n\t\t);\n\n\t\tarray[ i + 0 ] = color.r;\n\t\tarray[ i + 1 ] = color.g;\n\t\tarray[ i + 2 ] = color.b;\n\n\t\tarray[ i + 3 ] = color.r;\n\t\tarray[ i + 4 ] = color.g;\n\t\tarray[ i + 5 ] = color.b;\n\n\t\tarray[ i + 6 ] = color.r;\n\t\tarray[ i + 7 ] = color.g;\n\t\tarray[ i + 8 ] = color.b;\n\n\t}\n\n\tgeometry.setAttribute( 'color', new BufferAttribute( array, 3 ) );\n\n}\n","import { Group, Mesh, LineSegments, LineBasicMaterial, MeshPhongMaterial, BufferGeometry, BufferAttribute } from 'three';\n\nexport class TriangleSetHelper extends Group {\n\n\tget color() {\n\n\t\treturn this._mesh.material.color;\n\n\t}\n\n\tget side() {\n\n\t\treturn this._mesh.material.side;\n\n\t}\n\n\tset side( v ) {\n\n\t\tthis._mesh.material.side = v;\n\n\t}\n\n\tconstructor( triangles = [] ) {\n\n\t\tsuper();\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst lineGeom = new BufferGeometry();\n\t\tthis._mesh = new Mesh( geometry, new MeshPhongMaterial( {\n\t\t\tflatShading: true,\n\t\t\ttransparent: true,\n\t\t\topacity: 0.25,\n\t\t\tdepthWrite: false,\n\t\t} ) );\n\t\tthis._lines = new LineSegments( lineGeom, new LineBasicMaterial() );\n\t\tthis._mesh.material.color = this._lines.material.color;\n\n\t\tthis._lines.frustumCulled = false;\n\t\tthis._mesh.frustumCulled = false;\n\n\t\tthis.add( this._lines, this._mesh );\n\n\t\tthis.setTriangles( triangles );\n\n\t}\n\n\tsetTriangles( triangles ) {\n\n\t\tconst triPositions = new Float32Array( 3 * 3 * triangles.length );\n\t\tconst linePositions = new Float32Array( 6 * 3 * triangles.length );\n\t\tfor ( let i = 0, l = triangles.length; i < l; i ++ ) {\n\n\t\t\tconst i9 = 9 * i;\n\t\t\tconst i18 = 18 * i;\n\t\t\tconst tri = triangles[ i ];\n\n\t\t\ttri.a.toArray( triPositions, i9 + 0 );\n\t\t\ttri.b.toArray( triPositions, i9 + 3 );\n\t\t\ttri.c.toArray( triPositions, i9 + 6 );\n\n\n\t\t\ttri.a.toArray( linePositions, i18 + 0 );\n\t\t\ttri.b.toArray( linePositions, i18 + 3 );\n\n\t\t\ttri.b.toArray( linePositions, i18 + 6 );\n\t\t\ttri.c.toArray( linePositions, i18 + 9 );\n\n\t\t\ttri.c.toArray( linePositions, i18 + 12 );\n\t\t\ttri.a.toArray( linePositions, i18 + 15 );\n\n\t\t}\n\n\t\tthis._mesh.geometry.dispose();\n\t\tthis._mesh.geometry.setAttribute( 'position', new BufferAttribute( triPositions, 3 ) );\n\n\t\tthis._lines.geometry.dispose();\n\t\tthis._lines.geometry.setAttribute( 'position', new BufferAttribute( linePositions, 3 ) );\n\n\t}\n\n}\n","import { LineSegments } from 'three';\n\nexport class EdgesHelper extends LineSegments {\n\n\tget color() {\n\n\t\treturn this.material.color;\n\n\t}\n\n\tconstructor( edges = [] ) {\n\n\t\tsuper();\n\t\tthis.frustumCulled = false;\n\t\tthis.setEdges( edges );\n\n\t}\n\n\tsetEdges( edges ) {\n\n\t\tconst { geometry } = this;\n\t\tconst points = edges.flatMap( e => [ e.start, e.end ] );\n\t\tgeometry.dispose();\n\t\tgeometry.setFromPoints( points );\n\n\t}\n\n}\n","import { InstancedMesh, SphereGeometry, MeshBasicMaterial, Matrix4 } from 'three';\n\nconst _matrix = new Matrix4();\nexport class PointsHelper extends InstancedMesh {\n\n\tget color() {\n\n\t\treturn this.material.color;\n\n\t}\n\n\tconstructor( count = 1000, points = [] ) {\n\n\t\tsuper( new SphereGeometry( 0.025 ), new MeshBasicMaterial(), count );\n\t\tthis.frustumCulled = false;\n\t\tthis.setPoints( points );\n\n\t}\n\n\tsetPoints( points ) {\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\t_matrix.makeTranslation( point.x, point.y, point.z );\n\t\t\tthis.setMatrixAt( i, _matrix );\n\n\t\t}\n\n\t\tthis.count = points.length;\n\n\t}\n\n}\n","import { Line3, Triangle, Vector3, Plane, Ray } from 'three';\nimport { EdgesHelper } from './EdgesHelper.js';\nimport { getTriCount } from '../core/utils/geometryUtils.js';\nimport { toNormalizedRay } from '../core/utils/hashUtils.js';\n\nconst vertKeys = [ 'a', 'b', 'c' ];\nconst _tri1 = new Triangle();\nconst _tri2 = new Triangle();\nconst _center = new Vector3();\nconst _center2 = new Vector3();\nconst _projected = new Vector3();\nconst _projected2 = new Vector3();\nconst _projectedDir = new Vector3();\nconst _projectedDir2 = new Vector3();\nconst _edgeDir = new Vector3();\nconst _edgeDir2 = new Vector3();\nconst _vec = new Vector3();\nconst _vec2 = new Vector3();\nconst _finalPoint = new Vector3();\nconst _finalPoint2 = new Vector3();\nconst _plane = new Plane();\nconst _plane2 = new Plane();\nconst _centerPoint = new Vector3();\nconst _ray = new Ray();\nconst _edge = new Line3();\n\nfunction getTriangle( geometry, triIndex, target ) {\n\n\tconst i3 = 3 * triIndex;\n\tlet i0 = i3 + 0;\n\tlet i1 = i3 + 1;\n\tlet i2 = i3 + 2;\n\n\tconst indexAttr = geometry.index;\n\tconst posAttr = geometry.attributes.position;\n\tif ( indexAttr ) {\n\n\t\ti0 = indexAttr.getX( i0 );\n\t\ti1 = indexAttr.getX( i1 );\n\t\ti2 = indexAttr.getX( i2 );\n\n\t}\n\n\ttarget.a.fromBufferAttribute( posAttr, i0 );\n\ttarget.b.fromBufferAttribute( posAttr, i1 );\n\ttarget.c.fromBufferAttribute( posAttr, i2 );\n\n\treturn target;\n\n}\n\nfunction getOverlapEdge( tri1, e1, tri2, e2, target ) {\n\n\t// get the two edges\n\tconst nextE_0 = ( e1 + 1 ) % 3;\n\tconst v0_1 = tri1[ vertKeys[ e1 ] ];\n\tconst v1_1 = tri1[ vertKeys[ nextE_0 ] ];\n\n\tconst nextE_1 = ( e2 + 1 ) % 3;\n\tconst v0_2 = tri2[ vertKeys[ e2 ] ];\n\tconst v1_2 = tri2[ vertKeys[ nextE_1 ] ];\n\n\t// get the ray defined by the edges\n\ttoNormalizedRay( v0_1, v1_1, _ray );\n\n\t// get the min and max stride across the rays\n\tlet d0_1 = _vec.subVectors( v0_1, _ray.origin ).dot( _ray.direction );\n\tlet d1_1 = _vec.subVectors( v1_1, _ray.origin ).dot( _ray.direction );\n\tif ( d0_1 > d1_1 ) [ d0_1, d1_1 ] = [ d1_1, d0_1 ];\n\n\tlet d0_2 = _vec.subVectors( v0_2, _ray.origin ).dot( _ray.direction );\n\tlet d1_2 = _vec.subVectors( v1_2, _ray.origin ).dot( _ray.direction );\n\tif ( d0_2 > d1_2 ) [ d0_2, d1_2 ] = [ d1_2, d0_2 ];\n\n\t// get the range of overlap\n\tconst final_0 = Math.max( d0_1, d0_2 );\n\tconst final_1 = Math.min( d1_1, d1_2 );\n\t_ray.at( final_0, target.start );\n\t_ray.at( final_1, target.end );\n\n}\n\n\nexport class HalfEdgeHelper extends EdgesHelper {\n\n\tconstructor( geometry = null, halfEdges = null ) {\n\n\t\tsuper();\n\t\tthis.straightEdges = false;\n\t\tthis.displayDisconnectedEdges = false;\n\n\t\tif ( geometry && halfEdges ) {\n\n\t\t\tthis.setHalfEdges( geometry, halfEdges );\n\n\t\t}\n\n\t}\n\n\tsetHalfEdges( geometry, halfEdges ) {\n\n\t\tconst { straightEdges, displayDisconnectedEdges } = this;\n\t\tconst edges = [];\n\t\tconst offset = geometry.drawRange.start;\n\t\tlet triCount = getTriCount( geometry );\n\t\tif ( geometry.drawRange.count !== Infinity ) {\n\n\t\t\ttriCount = ~ ~ ( geometry.drawRange.count / 3 );\n\n\t\t}\n\n\t\tif ( displayDisconnectedEdges ) {\n\n\t\t\tif ( halfEdges.unmatchedDisjointEdges ) {\n\n\t\t\t\thalfEdges\n\t\t\t\t\t.unmatchedDisjointEdges\n\t\t\t\t\t.forEach( ( { forward, reverse, ray } ) => {\n\n\t\t\t\t\t\t[ ...forward, ...reverse ]\n\t\t\t\t\t\t\t.forEach( ( { start, end } ) => {\n\n\t\t\t\t\t\t\t\tconst edge = new Line3();\n\t\t\t\t\t\t\t\tray.at( start, edge.start );\n\t\t\t\t\t\t\t\tray.at( end, edge.end );\n\t\t\t\t\t\t\t\tedges.push( edge );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t} );\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let triIndex = offset; triIndex < triCount; triIndex ++ ) {\n\n\t\t\t\t\tgetTriangle( geometry, triIndex, _tri1 );\n\t\t\t\t\tfor ( let e = 0; e < 3; e ++ ) {\n\n\t\t\t\t\t\tconst otherTriIndex = halfEdges.getSiblingTriangleIndex( triIndex, e );\n\t\t\t\t\t\tif ( otherTriIndex === - 1 ) {\n\n\t\t\t\t\t\t\tconst nextE = ( e + 1 ) % 3;\n\t\t\t\t\t\t\tconst v0 = _tri1[ vertKeys[ e ] ];\n\t\t\t\t\t\t\tconst v1 = _tri1[ vertKeys[ nextE ] ];\n\t\t\t\t\t\t\tconst edge = new Line3();\n\t\t\t\t\t\t\tedge.start.copy( v0 );\n\t\t\t\t\t\t\tedge.end.copy( v1 );\n\t\t\t\t\t\t\tedges.push( edge );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( let triIndex = offset; triIndex < triCount; triIndex ++ ) {\n\n\t\t\t\tgetTriangle( geometry, triIndex, _tri1 );\n\t\t\t\tfor ( let e = 0; e < 3; e ++ ) {\n\n\t\t\t\t\tconst otherTriIndex = halfEdges.getSiblingTriangleIndex( triIndex, e );\n\t\t\t\t\tif ( otherTriIndex === - 1 ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// get other triangle\n\t\t\t\t\tgetTriangle( geometry, otherTriIndex, _tri2 );\n\n\t\t\t\t\t// get edge centers\n\t\t\t\t\tconst nextE = ( e + 1 ) % 3;\n\t\t\t\t\tconst v0 = _tri1[ vertKeys[ e ] ];\n\t\t\t\t\tconst v1 = _tri1[ vertKeys[ nextE ] ];\n\t\t\t\t\t_centerPoint.lerpVectors( v0, v1, 0.5 );\n\t\t\t\t\taddConnectionEdge( _tri1, _tri2, _centerPoint );\n\n\t\t\t\t}\n\n\t\t\t\tif ( halfEdges.disjointConnections ) {\n\n\t\t\t\t\tfor ( let e = 0; e < 3; e ++ ) {\n\n\t\t\t\t\t\tconst disjointTriIndices = halfEdges.getDisjointSiblingTriangleIndices( triIndex, e );\n\t\t\t\t\t\tconst disjointEdgeIndices = halfEdges.getDisjointSiblingEdgeIndices( triIndex, e );\n\n\t\t\t\t\t\tfor ( let i = 0; i < disjointTriIndices.length; i ++ ) {\n\n\t\t\t\t\t\t\tconst ti = disjointTriIndices[ i ];\n\t\t\t\t\t\t\tconst ei = disjointEdgeIndices[ i ];\n\n\t\t\t\t\t\t\t// get other triangle\n\t\t\t\t\t\t\tgetTriangle( geometry, ti, _tri2 );\n\n\t\t\t\t\t\t\tgetOverlapEdge( _tri1, e, _tri2, ei, _edge );\n\n\t\t\t\t\t\t\t_centerPoint.lerpVectors( _edge.start, _edge.end, 0.5 );\n\t\t\t\t\t\t\taddConnectionEdge( _tri1, _tri2, _centerPoint );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tsuper.setEdges( edges );\n\n\t\tfunction addConnectionEdge( tri1, tri2, centerPoint ) {\n\n\t\t\ttri1.getMidpoint( _center );\n\t\t\ttri2.getMidpoint( _center2 );\n\n\t\t\ttri1.getPlane( _plane );\n\t\t\ttri2.getPlane( _plane2 );\n\n\t\t\tconst edge = new Line3();\n\t\t\tedge.start.copy( _center );\n\n\t\t\tif ( straightEdges ) {\n\n\t\t\t\t// get the projected centers\n\t\t\t\t_plane.projectPoint( _center2, _projected );\n\t\t\t\t_plane2.projectPoint( _center, _projected2 );\n\n\t\t\t\t// get the directions so we can flip them if needed\n\t\t\t\t_projectedDir.subVectors( _projected, _center );\n\t\t\t\t_projectedDir2.subVectors( _projected2, _center2 );\n\n\t\t\t\t// get the directions so we can flip them if needed\n\t\t\t\t_edgeDir.subVectors( centerPoint, _center );\n\t\t\t\t_edgeDir2.subVectors( centerPoint, _center2 );\n\n\t\t\t\tif ( _projectedDir.dot( _edgeDir ) < 0 ) {\n\n\t\t\t\t\t_projectedDir.multiplyScalar( - 1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( _projectedDir2.dot( _edgeDir2 ) < 0 ) {\n\n\t\t\t\t\t_projectedDir2.multiplyScalar( - 1 );\n\n\t\t\t\t}\n\n\t\t\t\t// find the new points after inversion\n\t\t\t\t_vec.addVectors( _center, _projectedDir );\n\t\t\t\t_vec2.addVectors( _center2, _projectedDir2 );\n\n\t\t\t\t// project the points onto the triangle edge. This would be better\n\t\t\t\t// if we clipped instead of chose the closest point\n\t\t\t\ttri1.closestPointToPoint( _vec, _finalPoint );\n\t\t\t\ttri2.closestPointToPoint( _vec2, _finalPoint2 );\n\n\t\t\t\tedge.end.lerpVectors( _finalPoint, _finalPoint2, 0.5 );\n\n\t\t\t} else {\n\n\t\t\t\tedge.end.copy( centerPoint );\n\n\t\t\t}\n\n\t\t\tedges.push( edge );\n\n\t\t}\n\n\t}\n\n}\n","import { Vector3 } from 'three';\nimport { Triangle } from 'three';\nimport { getTriCount } from '../core/utils/geometryUtils.js';\n\n// https://stackoverflow.com/questions/1406029/how-to-calculate-the-volume-of-a-3d-mesh-object-the-surface-of-which-is-made-up\nconst _tri = new Triangle();\nconst _normal = new Vector3();\nconst _relPoint = new Vector3();\nexport function computeMeshVolume( mesh ) {\n\n\t// grab the matrix and the geometry\n\tlet geometry;\n\tlet matrix;\n\tif ( mesh.isBufferGeometry ) {\n\n\t\tgeometry = mesh;\n\t\tmatrix = null;\n\n\t} else {\n\n\t\tgeometry = mesh.geometry;\n\t\tmatrix = Math.abs( mesh.matrixWorld.determinant() - 1.0 ) < 1e-15 ? null : mesh.matrixWorld;\n\n\t}\n\n\t// determine the number of relevant draw range elements to use\n\tconst index = geometry.index;\n\tconst pos = geometry.attributes.position;\n\tconst drawRange = geometry.drawRange;\n\tconst triCount = Math.min( getTriCount( geometry ), drawRange.count / 3 );\n\n\t// get a point relative to the position of the geometry to avoid floating point error\n\t_tri.setFromAttributeAndIndices( pos, 0, 1, 2 );\n\tapplyMatrix4ToTri( _tri, matrix );\n\t_tri.getNormal( _normal );\n\t_tri.getMidpoint( _relPoint ).add( _normal );\n\n\t// iterate over all triangles\n\tlet volume = 0;\n\tconst startIndex = drawRange.start / 3;\n\tfor ( let i = startIndex, l = startIndex + triCount; i < l; i ++ ) {\n\n\t\tlet i0 = 3 * i + 0;\n\t\tlet i1 = 3 * i + 1;\n\t\tlet i2 = 3 * i + 2;\n\t\tif ( index ) {\n\n\t\t\ti0 = index.getX( i0 );\n\t\t\ti1 = index.getX( i1 );\n\t\t\ti2 = index.getX( i2 );\n\n\t\t}\n\n\t\t// get the triangle\n\t\t_tri.setFromAttributeAndIndices( pos, i0, i1, i2 );\n\t\tapplyMatrix4ToTri( _tri, matrix );\n\t\tsubVectorFromTri( _tri, _relPoint );\n\n\t\t// add the signed volume\n\t\tvolume += signedVolumeOfTriangle( _tri.a, _tri.b, _tri.c );\n\n\t}\n\n\treturn Math.abs( volume );\n\n}\n\nfunction signedVolumeOfTriangle( p1, p2, p3 ) {\n\n\tconst v321 = p3.x * p2.y * p1.z;\n\tconst v231 = p2.x * p3.y * p1.z;\n\tconst v312 = p3.x * p1.y * p2.z;\n\tconst v132 = p1.x * p3.y * p2.z;\n\tconst v213 = p2.x * p1.y * p3.z;\n\tconst v123 = p1.x * p2.y * p3.z;\n\treturn ( 1 / 6 ) * ( - v321 + v231 + v312 - v132 - v213 + v123 );\n\n}\n\nfunction subVectorFromTri( tri, pos ) {\n\n\ttri.a.sub( pos );\n\ttri.b.sub( pos );\n\ttri.c.sub( pos );\n\n}\n\nfunction applyMatrix4ToTri( tri, mat = null ) {\n\n\tif ( mat !== null ) {\n\n\t\ttri.a.applyMatrix4( mat );\n\t\ttri.b.applyMatrix4( mat );\n\t\ttri.c.applyMatrix4( mat );\n\n\t}\n\n}\n"],"names":["BufferAttribute","Vector3","_ray","Ray","_vec2","Vector2","_vec3","Vector4","Mesh","Matrix4","MeshBVH","EPSILON","_edge","Line3","_vec","_plane","Plane","ExtendedTriangle","Triangle","_matrix","_tri","_normal","DoubleSide","Matrix3","BufferGeometry","Group","Color","MeshPhongMaterial","MathUtils","LineSegments","LineBasicMaterial","InstancedMesh","SphereGeometry","MeshBasicMaterial"],"mappings":"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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,EAAE,CAAC,OAAO;CACb,EAAE,iCAAiC;CACnC,EAAE,CAAC;CACH,YAAY,CAAC,EAAE,CAAC,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;CACL,EAAE,CAAC;AACH;CACA,CAAC,OAAO,MAAM,CAAC;AACf;CACA;;CCnKO,MAAM,YAAY,SAASC,uBAAiB,CAAC;AACpD;CACA,CAAC,IAAI,UAAU,GAAG;AAClB;CACA,EAAE,OAAO,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;AACrC;CACA,EAAE;AACF;CACA,CAAC,IAAI,UAAU,EAAE,CAAC,GAAG;AACrB;CACA,EAAE,KAAK,IAAI,CAAC,WAAW,KAAK,CAAC,GAAG;AAChC;CACA,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;CACxB,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC3B;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA,CAAC,WAAW,EAAE,GAAG,IAAI,GAAG;AACxB;CACA,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC;CACnB,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACzB;CACA,EAAE;AACF;CACA,CAAC,eAAe,EAAE,MAAM,GAAG;AAC3B;CACA,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC/B,EAAE,MAAM,CAAC,OAAO,C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"}