Skip to content

Commit a5c0fd6

Browse files
committed
add observer method
1 parent b3b0118 commit a5c0fd6

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

src/compas_viewer/observer.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from PySide6.QtCore import QTimer
2+
3+
from compas_viewer.base import Base
4+
5+
6+
class Observer(Base):
7+
def __init__(self):
8+
self._observers = set(
9+
(
10+
self.viewer.renderer,
11+
self.viewer.ui.sidebar,
12+
)
13+
)
14+
15+
self._time = None
16+
self.update_timer = QTimer()
17+
self.update_timer.setSingleShot(True)
18+
self.update_timer.timeout.connect(self.update_observers)
19+
self.debounce_interval = 100
20+
21+
def add_observer(self, observer):
22+
if observer not in self._observers:
23+
self._observers.add(observer)
24+
25+
def remove_observer(self, observer):
26+
if observer in self._observers:
27+
self._observers.remove(observer)
28+
29+
def request_update(self):
30+
if not self.update_timer.isActive():
31+
self.update_timer.start(self.debounce_interval)
32+
33+
def update_observers(self):
34+
for observer in self._observers:
35+
observer.update()

src/compas_viewer/scene/sceneobject.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from compas_viewer.gl import make_vertex_buffer
1717
from compas_viewer.gl import update_index_buffer
1818
from compas_viewer.gl import update_vertex_buffer
19+
from compas_viewer.observer import Observer
1920
from compas_viewer.renderer.shaders import Shader
2021

2122
# Type template of point/line/face data for generating the buffers.
@@ -101,6 +102,9 @@ def __init__(
101102
):
102103
# Basic
103104
super().__init__(**kwargs)
105+
106+
self.observer = Observer()
107+
104108
self.show = show
105109
self.show_points = show_points if show_points is not None else False
106110
self.show_lines = show_lines if show_lines is not None else True
@@ -111,7 +115,7 @@ def __init__(
111115

112116
# Selection
113117
self._is_locked = is_locked
114-
self.is_selected = not is_locked and is_selected
118+
self._is_selected = False
115119

116120
# Visual
117121
self.background: bool = False
@@ -135,6 +139,16 @@ def __init__(
135139

136140
self._inited = False
137141

142+
@property
143+
def is_selected(self):
144+
return self._is_selected
145+
146+
@is_selected.setter
147+
def is_selected(self, value):
148+
if self._is_selected != value:
149+
self._is_selected = value
150+
self.observer.request_update()
151+
138152
@property
139153
def is_locked(self):
140154
return self._is_locked

0 commit comments

Comments
 (0)