Browse Source

Move "is_initialized" flag for 3D scene from server to client (#3452)

* add is_initialized to js

* remove "is_initialized" from scene.py

* minor refactor for consistency

* remove "is_initialized" from scene_view.py

* cleanup

---------

Co-authored-by: Falko Schindler <falko@zauberzeug.com>
Aaron Fuller 9 months ago
parent
commit
7081253a76
3 changed files with 3 additions and 16 deletions
  1. 3 0
      nicegui/elements/scene.js
  2. 0 8
      nicegui/elements/scene.py
  3. 0 8
      nicegui/elements/scene_view.py

+ 3 - 0
nicegui/elements/scene.js

@@ -62,6 +62,7 @@ export default {
     this.objects = new Map();
     this.objects.set("scene", this.scene);
     this.draggable_objects = [];
+    this.is_initialized = false;
 
     window["scene_" + this.$el.id] = this.scene; // NOTE: for selenium tests only
 
@@ -214,6 +215,7 @@ export default {
 
   methods: {
     create(type, id, parent_id, ...args) {
+      if (!this.is_initialized) return;
       let mesh;
       if (type == "group") {
         mesh = new THREE.Group();
@@ -459,6 +461,7 @@ export default {
       this.camera.updateProjectionMatrix();
     },
     init_objects(data) {
+      this.is_initialized = true;
       for (const [
         type,
         id,

+ 0 - 8
nicegui/elements/scene.py

@@ -5,7 +5,6 @@ from typing import Any, Callable, Dict, List, Literal, Optional, Tuple, Union
 from typing_extensions import Self
 
 from .. import binding
-from ..awaitable_response import AwaitableResponse, NullResponse
 from ..dataclasses import KWONLY_SLOTS
 from ..element import Element
 from ..events import (
@@ -113,7 +112,6 @@ class Scene(Element,
         self._props['click_events'] = click_events
         self._drag_start_handlers = [on_drag_start] if on_drag_start else []
         self._drag_end_handlers = [on_drag_end] if on_drag_end else []
-        self.is_initialized = False
         self.on('init', self._handle_init)
         self.on('click3d', self._handle_click)
         self.on('dragstart', self._handle_drag)
@@ -170,7 +168,6 @@ class Scene(Element,
         return attribute
 
     def _handle_init(self, e: GenericEventArguments) -> None:
-        self.is_initialized = True
         with self.client.individual_target(e.args['socket_id']):
             self.move_camera(duration=0)
             self.run_method('init_objects', [obj.data for obj in self.objects.values()])
@@ -182,11 +179,6 @@ class Scene(Element,
         await self.client.connected()
         await event.wait()
 
-    def run_method(self, name: str, *args: Any, timeout: float = 1, check_interval: float = 0.01) -> AwaitableResponse:
-        if not self.is_initialized:
-            return NullResponse()
-        return super().run_method(name, *args, timeout=timeout, check_interval=check_interval)
-
     def _handle_click(self, e: GenericEventArguments) -> None:
         arguments = SceneClickEventArguments(
             sender=self,

+ 0 - 8
nicegui/elements/scene_view.py

@@ -3,7 +3,6 @@ from typing import Any, Callable, Optional
 
 from typing_extensions import Self
 
-from ..awaitable_response import AwaitableResponse, NullResponse
 from ..element import Element
 from ..events import GenericEventArguments, SceneClickEventArguments, SceneClickHit, handle_event
 from .scene import Scene, SceneCamera
@@ -43,7 +42,6 @@ class SceneView(Element,
         self._props['camera_type'] = self.camera.type
         self._props['camera_params'] = self.camera.params
         self._click_handlers = [on_click] if on_click else []
-        self.is_initialized = False
         self.on('init', self._handle_init)
         self.on('click3d', self._handle_click)
 
@@ -53,7 +51,6 @@ class SceneView(Element,
         return self
 
     def _handle_init(self, e: GenericEventArguments) -> None:
-        self.is_initialized = True
         with self.client.individual_target(e.args['socket_id']):
             self.move_camera(duration=0)
 
@@ -64,11 +61,6 @@ class SceneView(Element,
         await self.client.connected()
         await event.wait()
 
-    def run_method(self, name: str, *args: Any, timeout: float = 1, check_interval: float = 0.01) -> AwaitableResponse:
-        if not self.is_initialized:
-            return NullResponse()
-        return super().run_method(name, *args, timeout=timeout, check_interval=check_interval)
-
     def _handle_click(self, e: GenericEventArguments) -> None:
         arguments = SceneClickEventArguments(
             sender=self,