34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
|
|
xrf.frag.q = function(v, opts){
|
||
|
|
let { frag, mesh, model, camera, scene, renderer, THREE} = opts
|
||
|
|
console.log(" └ running query ")
|
||
|
|
let qobjs = Object.keys(v.query)
|
||
|
|
|
||
|
|
v.scene = new THREE.Group()
|
||
|
|
for ( let i in v.query ) {
|
||
|
|
let target = v.query[i]
|
||
|
|
if( !scene.getObjectByName(i) && i != '*' ) return console.log(` └ mesh not found: ${i}`)
|
||
|
|
if( i == '*' ){
|
||
|
|
let cloneScene = scene.clone()
|
||
|
|
cloneScene.children.forEach( (child) => v.scene.getObjectByName(child.name) ? null : v.scene.add(child) )
|
||
|
|
target.mesh = v.scene
|
||
|
|
}else{
|
||
|
|
console.log(` └ query-ing mesh: ${i}`)
|
||
|
|
if( !v.scene.getObjectByName(i) && target.id === true ){
|
||
|
|
v.scene.add( target.mesh = scene.getObjectByName(i).clone() )
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if( target.id != undefined && target.mesh ){
|
||
|
|
target.mesh.position.set(0,0,0)
|
||
|
|
target.mesh.rotation.set(0,0,0)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
// remove negative selectors
|
||
|
|
let remove = []
|
||
|
|
v.scene.traverse( (mesh) => {
|
||
|
|
for ( let i in v.query ) {
|
||
|
|
if( mesh.name == i && v.query[i].id === false ) remove.push(mesh)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
remove.map( (mesh) => mesh.parent.remove( mesh ) )
|
||
|
|
}
|