diff --git a/app/src/App.tsx b/app/src/App.tsx
index 605394f8..e102ab11 100644
--- a/app/src/App.tsx
+++ b/app/src/App.tsx
@@ -513,6 +513,7 @@ export default function App() {
visibleIndices={undefined}
setFrame={setCurrentFrame}
pathTracingSettings={roomConfig.PathTracer}
+ roomLock={roomLock}
/>
{!roomConfig.PathTracer.enabled && (
<>
@@ -528,6 +529,7 @@ export default function App() {
visibleIndices={hoveredId}
highlight={"backside"}
setFrame={setCurrentFrame}
+ roomLock={roomLock}
/>
void;
@@ -173,6 +174,7 @@ export const ParticleInstances = ({
visibleIndices: Set | undefined | number;
highlight: string;
pathTracingSettings: any;
+ roomLock: boolean;
}) => {
const meshRef = useRef(null);
@@ -342,6 +344,7 @@ export const ParticleInstances = ({
frame={frame}
selectedIds={selectedIds}
setFrame={setFrame}
+ roomLock={roomLock}
/>
)}
{
}, [frame.positions, selectedIds]);
};
-export const ParticleControls = ({ frame, selectedIds, setFrame }) => {
+interface ParticleControlsProps {
+ frame: any;
+ selectedIds: Set;
+ setFrame: (frame: any) => void;
+ roomLock: boolean;
+}
+
+export const ParticleControls: React.FC = ({
+ frame,
+ selectedIds,
+ setFrame,
+ roomLock,
+}: ParticleControlsProps) => {
const controls = useRef(null);
const controlsPostRef = useRef(new Vector3());
const controlsRotationRef = useRef(new Vector3());
@@ -37,6 +50,12 @@ export const ParticleControls = ({ frame, selectedIds, setFrame }) => {
// State for the edit mode: "None", "translate", or "rotate"
const [mode, setMode] = useState("None");
+ useEffect(() => {
+ if (roomLock) {
+ setMode("None");
+ }
+ }, [roomLock]);
+
// Efficiently calculate centroid and attach control to it when `selectedIds` changes
const centroid = useCentroid({ frame, selectedIds });
@@ -108,6 +127,9 @@ export const ParticleControls = ({ frame, selectedIds, setFrame }) => {
if (document.activeElement !== document.body) {
return;
}
+ if (roomLock) {
+ return;
+ }
if (event.key.toLowerCase() === "e") {
socket.emit("room:copy");
setMode((prevMode) => {
@@ -129,7 +151,7 @@ export const ParticleControls = ({ frame, selectedIds, setFrame }) => {
return () => {
window.removeEventListener("keydown", toggleMode);
};
- }, []);
+ }, [roomLock]);
// Apply mode to TransformControls whenever it changes
useEffect(() => {
diff --git a/zndraw/tasks/__init__.py b/zndraw/tasks/__init__.py
index a500afe2..eb912e1f 100644
--- a/zndraw/tasks/__init__.py
+++ b/zndraw/tasks/__init__.py
@@ -338,6 +338,12 @@ def run_room_worker(room):
url=current_app.config["SERVER_URL"],
token=room,
)
+ locked = vis.locked
+ if locked:
+ vis.log("Room is locked. Can not modify the room.")
+ vis.socket.sleep(1)
+ vis.socket.disconnect()
+ return
geometry_queue = znsocket.Dict(
r=current_app.extensions["redis"],