xrfragment-haxe/src/3rd/js/three/xrf/q.js

49 lines
1.6 KiB
JavaScript
Raw Normal View History

2023-06-07 17:42:21 +02:00
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)
const instanceScene = () => {
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)
2023-06-07 17:42:21 +02:00
}
}
// 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 ) )
2023-06-07 17:42:21 +02:00
}
const showHide = () => {
let q = frag.q.query
scene.traverse( (mesh) => {
for ( let i in q ) {
if( i == mesh.name && q[i].id != undefined ) mesh.visible = q[i].id
if( i == mesh.userData.class && q[i].class != undefined ) mesh.visible = q[i].class
}
})
}
if( opts.embedded && opts.embedded.fragment == "src" ) instanceScene()
else showHide() // href
2023-06-07 17:42:21 +02:00
}