Skip to content

Commit 45c40d5

Browse files
committed
Merge pull request #1099 from chaosphere2112/2d_widget_not_on_3d
Detach 2D UI when plotting 3D charts
2 parents 33a751c + abe13df commit 45c40d5

File tree

2 files changed

+32
-8
lines changed

2 files changed

+32
-8
lines changed

Packages/vcs/Lib/Canvas.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,8 @@ def start(self,*args,**kargs):
468468
self.interact(*args,**kargs)
469469

470470
def interact(self,*args,**kargs):
471-
self.configurator.show()
471+
if self.configurator is not None:
472+
self.configurator.show()
472473
self.backend.interact(*args,**kargs)
473474

474475
def _datawc_tv(self, tv, arglist):
@@ -3730,8 +3731,12 @@ def set_convert_labels(copy_mthd,test=0):
37303731
setattr(arglist[0],p,tmp)
37313732
if dn is not None:
37323733
self.display_names.append(result.name)
3733-
if self.backend.bg == False:
3734+
if result.g_type in ("3d_scalar", "3d_vector") and self.configurator is not None:
3735+
self.configurator.detach()
3736+
self.configurator = None
3737+
if self.backend.bg == False and self.configurator is not None:
37343738
self.configurator.update(self.display_names)
3739+
37353740
# Commented out as agreed we shouldn't use warnings in these contexts.
37363741
#if not hasattr(__main__,"__file__") and not bg:
37373742
# warnings.warn("VCS Behaviour changed, in order to interact with window, start the interaction mode with:\n x.interact()")

Packages/vcs/Lib/configurator.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ def __init__(self, canvas, show_on_update=False):
162162
self.initialized = False
163163
self.animation_speed = 250
164164
self.animation_timer = None
165+
self.listeners = []
165166
self.animation_last_frame_time = datetime.datetime.now()
166167
# Map custom templates to their source template
167168
self.templates = {}
@@ -175,10 +176,10 @@ def shift(self):
175176
def update(self, displays):
176177
if self.backend.renWin and self.interactor is None:
177178
self.interactor = self.backend.renWin.GetInteractor()
178-
self.interactor.AddObserver("TimerEvent", self.animate)
179-
self.interactor.AddObserver("LeftButtonPressEvent", self.click)
180-
self.interactor.AddObserver("MouseMoveEvent", self.hover)
181-
self.interactor.AddObserver("LeftButtonReleaseEvent", self.release)
179+
self.listeners.append(self.interactor.AddObserver("TimerEvent", self.animate))
180+
self.listeners.append(self.interactor.AddObserver("LeftButtonPressEvent", self.click))
181+
self.listeners.append(self.interactor.AddObserver("MouseMoveEvent", self.hover))
182+
self.listeners.append(self.interactor.AddObserver("LeftButtonReleaseEvent", self.release))
182183
self.init_buttons()
183184
self.init_toolbar()
184185

@@ -201,12 +202,30 @@ def update(self, displays):
201202
self.show()
202203
self.show_on_update = False
203204

205+
def detach(self):
206+
if self.toolbar is not None:
207+
self.toolbar.detach()
208+
self.toolbar = None
209+
if self.fill_button is not None:
210+
self.fill_button.detach()
211+
self.fill_button = None
212+
if self.text_button is not None:
213+
self.text_button.detach()
214+
self.text_button = None
215+
if self.line_button is not None:
216+
self.line_button.detach()
217+
self.line_button = None
218+
if self.marker_button is not None:
219+
self.marker_button.detach()
220+
self.marker_button = None
221+
222+
for listener in self.listeners:
223+
self.interactor.RemoveObserver(listener)
224+
204225
def release(self, object, event):
205226
if self.clicking is None:
206227
return
207228

208-
209-
210229
if datetime.datetime.now() - self.clicking[1] < datetime.timedelta(0, .5):
211230

212231
point = self.clicking[0]

0 commit comments

Comments
 (0)