Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -71,8 +71,8 @@ def load_aframe_and_extras():
|
|
| 71 |
var gw = 8, gh = 8;
|
| 72 |
var center = {x: 0, y: 0, z: 0};
|
| 73 |
var height = Math.max(gw, gh) * 1.5; // y=12 for center view
|
| 74 |
-
var lowHeight =
|
| 75 |
-
var
|
| 76 |
var pos, rot;
|
| 77 |
|
| 78 |
rot = {x: -90, y: 0, z: 0}; // Always top-down view
|
|
@@ -82,28 +82,28 @@ def load_aframe_and_extras():
|
|
| 82 |
pos = {x: center.x, y: height, z: center.z};
|
| 83 |
break;
|
| 84 |
case 'left':
|
| 85 |
-
pos = {x: -
|
| 86 |
break;
|
| 87 |
case 'right':
|
| 88 |
-
pos = {x:
|
| 89 |
break;
|
| 90 |
case 'front':
|
| 91 |
-
pos = {x: center.x, y: lowHeight, z: -
|
| 92 |
break;
|
| 93 |
case 'back':
|
| 94 |
-
pos = {x: center.x, y: lowHeight, z:
|
| 95 |
break;
|
| 96 |
case 'angle1':
|
| 97 |
-
pos = {x: -
|
| 98 |
break;
|
| 99 |
case 'angle2':
|
| 100 |
-
pos = {x:
|
| 101 |
break;
|
| 102 |
case 'angle3':
|
| 103 |
-
pos = {x: -
|
| 104 |
break;
|
| 105 |
case 'angle4':
|
| 106 |
-
pos = {x:
|
| 107 |
break;
|
| 108 |
}
|
| 109 |
rig.setAttribute('position', pos);
|
|
@@ -117,13 +117,21 @@ def load_aframe_and_extras():
|
|
| 117 |
|
| 118 |
switch(action) {
|
| 119 |
case 'forward':
|
| 120 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
break;
|
| 122 |
case 'backward':
|
| 123 |
velocity.z = Math.min(velocity.z + accel, maxSpeed);
|
| 124 |
break;
|
| 125 |
case 'stop':
|
| 126 |
velocity = {x: 0, y: 0, z: 0};
|
|
|
|
| 127 |
break;
|
| 128 |
case 'rollCCW':
|
| 129 |
rot.z += rSpeed;
|
|
@@ -131,10 +139,6 @@ def load_aframe_and_extras():
|
|
| 131 |
case 'rollCW':
|
| 132 |
rot.z -= rSpeed;
|
| 133 |
break;
|
| 134 |
-
case 'reset':
|
| 135 |
-
moveCamera('center');
|
| 136 |
-
velocity = {x: 0, y: 0, z: 0};
|
| 137 |
-
return;
|
| 138 |
}
|
| 139 |
rig.setAttribute('rotation', rot);
|
| 140 |
}
|
|
@@ -259,19 +263,19 @@ def main():
|
|
| 259 |
st.set_page_config(layout="wide")
|
| 260 |
with st.sidebar:
|
| 261 |
st.markdown("### 🧭 Camera Views")
|
| 262 |
-
st.markdown("**Select
|
| 263 |
cols = st.columns(3)
|
| 264 |
-
cols[0].button("
|
| 265 |
-
cols[1].button("
|
| 266 |
-
cols[2].button("
|
| 267 |
cols = st.columns(3)
|
| 268 |
-
cols[0].button("
|
| 269 |
-
cols[1].button("
|
| 270 |
-
cols[2].button("
|
| 271 |
cols = st.columns(3)
|
| 272 |
-
cols[0].button("
|
| 273 |
-
cols[1].button("
|
| 274 |
-
cols[2].button("↘️
|
| 275 |
|
| 276 |
st.markdown("### ➕ Add Media Files")
|
| 277 |
ups = st.file_uploader("Add files (png, jpeg, obj, glb, mp4, etc.):", accept_multiple_files=True)
|
|
|
|
| 71 |
var gw = 8, gh = 8;
|
| 72 |
var center = {x: 0, y: 0, z: 0};
|
| 73 |
var height = Math.max(gw, gh) * 1.5; // y=12 for center view
|
| 74 |
+
var lowHeight = 3; // y=3 for closer views
|
| 75 |
+
var quadrantOffset = Math.max(gw, gh) / 4; // 2 units to center on quadrants
|
| 76 |
var pos, rot;
|
| 77 |
|
| 78 |
rot = {x: -90, y: 0, z: 0}; // Always top-down view
|
|
|
|
| 82 |
pos = {x: center.x, y: height, z: center.z};
|
| 83 |
break;
|
| 84 |
case 'left':
|
| 85 |
+
pos = {x: -quadrantOffset, y: lowHeight, z: center.z}; // Center on left side
|
| 86 |
break;
|
| 87 |
case 'right':
|
| 88 |
+
pos = {x: quadrantOffset, y: lowHeight, z: center.z}; // Center on right side
|
| 89 |
break;
|
| 90 |
case 'front':
|
| 91 |
+
pos = {x: center.x, y: lowHeight, z: -quadrantOffset}; // Center on top side
|
| 92 |
break;
|
| 93 |
case 'back':
|
| 94 |
+
pos = {x: center.x, y: lowHeight, z: quadrantOffset}; // Center on bottom side
|
| 95 |
break;
|
| 96 |
case 'angle1':
|
| 97 |
+
pos = {x: -quadrantOffset, y: lowHeight, z: -quadrantOffset}; // Top-left quadrant
|
| 98 |
break;
|
| 99 |
case 'angle2':
|
| 100 |
+
pos = {x: quadrantOffset, y: lowHeight, z: -quadrantOffset}; // Top-right quadrant
|
| 101 |
break;
|
| 102 |
case 'angle3':
|
| 103 |
+
pos = {x: -quadrantOffset, y: lowHeight, z: quadrantOffset}; // Bottom-left quadrant
|
| 104 |
break;
|
| 105 |
case 'angle4':
|
| 106 |
+
pos = {x: quadrantOffset, y: lowHeight, z: quadrantOffset}; // Bottom-right quadrant
|
| 107 |
break;
|
| 108 |
}
|
| 109 |
rig.setAttribute('position', pos);
|
|
|
|
| 117 |
|
| 118 |
switch(action) {
|
| 119 |
case 'forward':
|
| 120 |
+
var cam = document.querySelector('[camera]');
|
| 121 |
+
var dir = new THREE.Vector3();
|
| 122 |
+
cam.object3D.getWorldDirection(dir); // Raycast direction (downward for top-down view)
|
| 123 |
+
var pos = rig.getAttribute('position');
|
| 124 |
+
pos.x += dir.x * 0.1;
|
| 125 |
+
pos.y += dir.y * 0.1;
|
| 126 |
+
pos.z += dir.z * 0.1;
|
| 127 |
+
rig.setAttribute('position', pos);
|
| 128 |
break;
|
| 129 |
case 'backward':
|
| 130 |
velocity.z = Math.min(velocity.z + accel, maxSpeed);
|
| 131 |
break;
|
| 132 |
case 'stop':
|
| 133 |
velocity = {x: 0, y: 0, z: 0};
|
| 134 |
+
moveCamera('center');
|
| 135 |
break;
|
| 136 |
case 'rollCCW':
|
| 137 |
rot.z += rSpeed;
|
|
|
|
| 139 |
case 'rollCW':
|
| 140 |
rot.z -= rSpeed;
|
| 141 |
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
| 142 |
}
|
| 143 |
rig.setAttribute('rotation', rot);
|
| 144 |
}
|
|
|
|
| 263 |
st.set_page_config(layout="wide")
|
| 264 |
with st.sidebar:
|
| 265 |
st.markdown("### 🧭 Camera Views")
|
| 266 |
+
st.markdown("**Select Quadrant** 📷")
|
| 267 |
cols = st.columns(3)
|
| 268 |
+
cols[0].button("↖️ Top-Left", on_click=lambda: st.session_state.update({'camera_view': 'angle1'}))
|
| 269 |
+
cols[1].button("⬆️ Top", on_click=lambda: st.session_state.update({'camera_view': 'front'}))
|
| 270 |
+
cols[2].button("↗️ Top-Right", on_click=lambda: st.session_state.update({'camera_view': 'angle2'}))
|
| 271 |
cols = st.columns(3)
|
| 272 |
+
cols[0].button("⬅️ Left", on_click=lambda: st.session_state.update({'camera_view': 'left'}))
|
| 273 |
+
cols[1].button("🔳 Center", on_click=lambda: st.session_state.update({'camera_view': 'center'}))
|
| 274 |
+
cols[2].button("➡️ Right", on_click=lambda: st.session_state.update({'camera_view': 'right'}))
|
| 275 |
cols = st.columns(3)
|
| 276 |
+
cols[0].button("↙️ Bottom-Left", on_click=lambda: st.session_state.update({'camera_view': 'angle3'}))
|
| 277 |
+
cols[1].button("⬇️ Bottom", on_click=lambda: st.session_state.update({'camera_view': 'back'}))
|
| 278 |
+
cols[2].button("↘️ Bottom-Right", on_click=lambda: st.session_state.update({'camera_view': 'angle4'}))
|
| 279 |
|
| 280 |
st.markdown("### ➕ Add Media Files")
|
| 281 |
ups = st.file_uploader("Add files (png, jpeg, obj, glb, mp4, etc.):", accept_multiple_files=True)
|