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)
|