diff --git a/app/templates/ldd/ldd.html.j2 b/app/templates/ldd/ldd.html.j2
index 3a07942..f1c85c6 100644
--- a/app/templates/ldd/ldd.html.j2
+++ b/app/templates/ldd/ldd.html.j2
@@ -277,7 +277,9 @@
this.xmldata = ''
}
- AddScene(file){
+ // placement: optional THREE.Matrix4 that places this model in the property. DLU stores player-built
+ // (UGC) models normalized around their own origin, with the position and rotation in properties_contents.
+ AddScene(file, placement = null){
let lxfmlfile = new DBURLFile(file,file)
this.xmldata = lxfmlfile.read()
@@ -305,7 +307,9 @@
for (let j = 0; j < childnodes.length ;j++) {
let childnode = childnodes[j]
if (childnode.nodeName == 'Brick'){
- this.Bricks.push(new Brick(childnode))
+ let brick = new Brick(childnode)
+ brick.placement = placement
+ this.Bricks.push(brick)
}
}
}
@@ -531,9 +535,9 @@
}
}
- LoadScene(filename){
+ LoadScene(filename, placement = null){
if(this.database.initok){
- this.scene.AddScene(filename)
+ this.scene.AddScene(filename, placement)
}
}
@@ -608,6 +612,11 @@
n14, n24 ,n34, n44);
}
+ // Move the brick from model space to its place on the property
+ if (bri.placement){
+ m.premultiply(bri.placement)
+ }
+
let decoCount = 0
for (const [partindex, part] of geo.Parts.entries()){
@@ -1033,10 +1042,14 @@
//Start
+ // Player-built models with the position and rotation stored for them in properties_contents
let lxfml_file_list = [
{% for model in content %}
{% if model.lot == 14 %}
- "{{url_for('properties.get_model', id=model.id, file_format='lxfml', lod=lod)}}"{{ ", " if not loop.last else "" }}
+ {
+ "url": "{{url_for('properties.get_model', id=model.id, file_format='lxfml', lod=lod)}}",
+ "pos": {{ model.pos[0]|tojson }}
+ }{{ ", " if not loop.last else "" }}
{% endif %}
{% endfor %}
]
@@ -1047,7 +1060,13 @@
let converter = new Converter()
converter.LoadDBURL(ldddburl)
for (let i = 0; i < lxfml_file_list.length; i++) {
- converter.LoadScene(lxfml_file_list[i])
+ let pos = lxfml_file_list[i].pos
+ let placement = new THREE.Matrix4().compose(
+ new THREE.Vector3(pos.x, pos.y, pos.z),
+ new THREE.Quaternion(pos.rx, pos.ry, pos.rz, pos.rw),
+ new THREE.Vector3(1, 1, 1)
+ )
+ converter.LoadScene(lxfml_file_list[i].url, placement)
}
converter.Export('test.webgl')