You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
3.4 KiB
86 lines
3.4 KiB
function filterTapestryJSON( contentFilename ){
|
|
let file = filesWithMetadata[contentFilename]
|
|
if (!file) return
|
|
|
|
let contentType = file.contentType
|
|
|
|
// TODO support zipped version directly, cf e.g. mapvisualmeta.jsons.zip.js
|
|
|
|
/*
|
|
// example of zip support
|
|
fetch( contentFilename ).then( r => r.blob(r) ).then( file => zip.loadAsync(file) ).then( f => {
|
|
console.log(f.files)
|
|
let filenameFromZip = Object.entries( f.files ).filter( i => i[0].includes("partialfilename.ext") ).map( i => i[0] )[0]
|
|
f.files[filenameFromZip].async("string").then( dyn_content => {
|
|
json = JSON.parse( dyn_content )
|
|
})
|
|
})
|
|
*/
|
|
|
|
if ( contentType.includes("json") && contentFilename.startsWith("tapestry/") && contentFilename.endsWith("root.json")) {
|
|
console.log('it is a tapestry export file', contentFilename)
|
|
fetch( contentFilename ).then( r => r.json() ).then( json => {
|
|
// console.log( json )
|
|
let thumbnailPath = json.thumbnail.replace("file:/","/tapestry/")
|
|
let el = document.createElement("a-image")
|
|
el.setAttribute("position", "0 1.5 0.7")
|
|
el.setAttribute("rotation", "0 180 0")
|
|
el.setAttribute("src", thumbnailPath)
|
|
el.setAttribute("width", json.startView.size.width/10000)
|
|
el.setAttribute("height", json.startView.size.height/10000)
|
|
AFRAME.scenes[0].appendChild(el)
|
|
|
|
let positioned = {}
|
|
json.items.map( i => {
|
|
let x = 1-i.position.x/1000
|
|
let y = 2-i.position.y/1000
|
|
|
|
let el = null
|
|
if (i.type == "text") {
|
|
el = addNewNoteAsPostItNote( i.text, x + " " + y + " 1", ".1 .1 .1", "tapestry_"+i.id, "tapestry_text", true, "0 180 0")
|
|
// addNewNoteAsPostItNote( text, position=`-0.2 1.1 -0.1`, scale= "0.1 0.1 0.1", id=null, classes="notes", visible="true", rotation="0 0 0" ){
|
|
}
|
|
|
|
if (i.thumbnail) {
|
|
let thumbnailPath = i.thumbnail.source.replace("file:/","/tapestry/")
|
|
el = document.createElement("a-image")
|
|
el.setAttribute("position", x + " " + y + " 1")
|
|
el.setAttribute("rotation", "0 180 0")
|
|
el.setAttribute("src", thumbnailPath)
|
|
el.setAttribute("width", i.size.width/1000)
|
|
el.setAttribute("height", i.size.height/1000)
|
|
AFRAME.scenes[0].appendChild(el)
|
|
}
|
|
positioned[i.id] = el
|
|
if ( el ) el.setAttribute("target", "")
|
|
})
|
|
|
|
setTimeout( _ => {
|
|
// must be done after the items are positioned
|
|
json.rels.map( i => {
|
|
let el = document.createElement("a-tube")
|
|
console.log( i.from.itemId, i.to.itemId )
|
|
let start = positioned[i.from.itemId].getAttribute("position")
|
|
let end = positioned[i.to.itemId].getAttribute("position")
|
|
let mid = new THREE.Vector3()
|
|
mid.copy ( start )
|
|
mid.add ( end )
|
|
mid.divideScalar(2)
|
|
mid.z += 0.3
|
|
let path = [start, mid, end].map( p => AFRAME.utils.coordinates.stringify( p ) ).join(", ")
|
|
|
|
el.setAttribute("radius", 0.01)
|
|
el.setAttribute("path", path)
|
|
AFRAME.scenes[0].appendChild(el)
|
|
})
|
|
}, 1000 )
|
|
|
|
AFRAME.scenes[0].emit('tapestryjsonloaded', contentFilename)
|
|
// to use the event consider :
|
|
//AFRAME.scenes[0].addEventListener("visualmetajsonloaded", e => console.log(e))
|
|
})
|
|
}
|
|
applyNextFilter( contentFilename )
|
|
}
|
|
|
|
sequentialFilters.push( filterTapestryJSON )
|
|
|