Commit 054fa427fe2d24b952266c9142e163309fbc8db7
Committed by
GitHub
1 parent
3cdb23d0
Exists in
master
Allow setting markers remotely by using 'Set markers' event (#289)
* ADD: 'Set markers' event to set all markers directly Not used by InVesalius, but useful when controlling InVesalius remotely and wanting to override InVesalius's own markers. * MOD: Allow updating target with 'Set markers' event * MOD: Remove target in 'Set markers' event if no target is selected * MOD: Enable target button when setting target remotely Co-authored-by: Olli-Pekka Kahilakoski <olli-pekka.kahilakoski@aalto.fi>
Showing
3 changed files
with
49 additions
and
11 deletions
Show diff stats
invesalius/data/viewer_volume.py
... | ... | @@ -288,6 +288,7 @@ class Viewer(wx.Panel): |
288 | 288 | Publisher.subscribe(self.BlinkMarker, 'Blink Marker') |
289 | 289 | Publisher.subscribe(self.StopBlinkMarker, 'Stop Blink Marker') |
290 | 290 | Publisher.subscribe(self.SetNewColor, 'Set new color') |
291 | + Publisher.subscribe(self.SetMarkers, 'Set markers') | |
291 | 292 | |
292 | 293 | # Related to object tracking during neuronavigation |
293 | 294 | Publisher.subscribe(self.OnNavigationStatus, 'Navigation status') |
... | ... | @@ -298,7 +299,7 @@ class Viewer(wx.Panel): |
298 | 299 | Publisher.subscribe(self.ActivateTargetMode, 'Target navigation mode') |
299 | 300 | Publisher.subscribe(self.OnUpdateObjectTargetGuide, 'Update object matrix') |
300 | 301 | Publisher.subscribe(self.OnUpdateTargetCoordinates, 'Update target') |
301 | - Publisher.subscribe(self.OnRemoveTarget, 'Disable or enable coil tracker') | |
302 | + Publisher.subscribe(self.OnDisableOrEnableCoilTracker, 'Disable or enable coil tracker') | |
302 | 303 | Publisher.subscribe(self.OnTargetMarkerTransparency, 'Set target transparency') |
303 | 304 | Publisher.subscribe(self.OnUpdateAngleThreshold, 'Update angle threshold') |
304 | 305 | Publisher.subscribe(self.OnUpdateDistThreshold, 'Update dist threshold') |
... | ... | @@ -563,6 +564,38 @@ class Viewer(wx.Panel): |
563 | 564 | actor = self.points_reference.pop(point) |
564 | 565 | self.ren.RemoveActor(actor) |
565 | 566 | |
567 | + def SetMarkers(self, markers): | |
568 | + """ | |
569 | + Set all markers, overwriting the previous markers. | |
570 | + """ | |
571 | + self.RemoveAllMarkers(len(self.staticballs)) | |
572 | + | |
573 | + target_selected = False | |
574 | + for marker in markers: | |
575 | + | |
576 | + ball_id = marker["ball_id"] | |
577 | + size = marker["size"] | |
578 | + colour = marker["colour"] | |
579 | + position = marker["position"] | |
580 | + direction = marker["direction"] | |
581 | + target = marker["target"] | |
582 | + | |
583 | + self.AddMarker( | |
584 | + ball_id=ball_id, | |
585 | + size=size, | |
586 | + colour=colour, | |
587 | + coord=position, | |
588 | + ) | |
589 | + | |
590 | + if target: | |
591 | + Publisher.sendMessage('Update target', coord=position + direction) | |
592 | + target_selected = True | |
593 | + | |
594 | + if not target_selected: | |
595 | + self.RemoveTarget() | |
596 | + | |
597 | + self.UpdateRender() | |
598 | + | |
566 | 599 | def AddMarker(self, ball_id, size, colour, coord): |
567 | 600 | """ |
568 | 601 | Markers created by navigation tools and rendered in volume viewer. |
... | ... | @@ -928,12 +961,18 @@ class Viewer(wx.Panel): |
928 | 961 | self.target_coord = coord |
929 | 962 | self.target_coord[1] = -self.target_coord[1] |
930 | 963 | self.CreateTargetAim() |
964 | + Publisher.sendMessage('Target selected', status=True) | |
965 | + print("Target updated to coordinates {}".format(coord)) | |
931 | 966 | |
932 | - def OnRemoveTarget(self, status): | |
967 | + def RemoveTarget(self): | |
968 | + self.target_mode = None | |
969 | + self.target_coord = None | |
970 | + self.RemoveTargetAim() | |
971 | + Publisher.sendMessage('Target selected', status=False) | |
972 | + | |
973 | + def OnDisableOrEnableCoilTracker(self, status): | |
933 | 974 | if not status: |
934 | - self.target_mode = None | |
935 | - self.target_coord = None | |
936 | - self.RemoveTargetAim() | |
975 | + self.RemoveTarget() | |
937 | 976 | self.DisableCoilTracker() |
938 | 977 | |
939 | 978 | def CreateTargetAim(self): | ... | ... |
invesalius/gui/default_viewers.py
... | ... | @@ -388,7 +388,7 @@ class VolumeToolPanel(wx.Panel): |
388 | 388 | # sizer.Add(self.button_3d_mask, 0, wx.TOP | wx.BOTTOM, 1) |
389 | 389 | |
390 | 390 | self.navigation_status = False |
391 | - self.status_target_select = False | |
391 | + self.status_target_selected = False | |
392 | 392 | self.status_obj_tracker = False |
393 | 393 | |
394 | 394 | sizer.Fit(self) |
... | ... | @@ -408,7 +408,7 @@ class VolumeToolPanel(wx.Panel): |
408 | 408 | Publisher.subscribe(self.DisablePreset, 'Close project data') |
409 | 409 | Publisher.subscribe(self.Uncheck, 'Uncheck image plane menu') |
410 | 410 | Publisher.subscribe(self.DisableVolumeCutMenu, 'Disable volume cut menu') |
411 | - Publisher.subscribe(self.StatusTargetSelect, 'Disable or enable coil tracker') | |
411 | + Publisher.subscribe(self.StatusTargetSelected, 'Target selected') | |
412 | 412 | Publisher.subscribe(self.StatusObjTracker, 'Status target button') |
413 | 413 | Publisher.subscribe(self.ActiveTarget, 'Active target button') |
414 | 414 | Publisher.subscribe(self.DeactiveTarget, 'Deactive target button') |
... | ... | @@ -442,8 +442,8 @@ class VolumeToolPanel(wx.Panel): |
442 | 442 | self.status_obj_tracker = status |
443 | 443 | self.StatusNavigation() |
444 | 444 | |
445 | - def StatusTargetSelect(self, status): | |
446 | - self.status_target_select = status | |
445 | + def StatusTargetSelected(self, status): | |
446 | + self.status_target_selected = status | |
447 | 447 | self.StatusNavigation() |
448 | 448 | |
449 | 449 | def ActiveTarget(self): |
... | ... | @@ -453,7 +453,7 @@ class VolumeToolPanel(wx.Panel): |
453 | 453 | self.button_target.Hide() |
454 | 454 | |
455 | 455 | def StatusNavigation(self): |
456 | - if self.status_target_select and self.status_obj_tracker: | |
456 | + if self.status_target_selected and self.status_obj_tracker: | |
457 | 457 | self.button_target.Enable(1) |
458 | 458 | else: |
459 | 459 | self.OnButtonTarget(False) | ... | ... |
invesalius/gui/task_navigator.py
... | ... | @@ -1389,7 +1389,6 @@ class MarkersPanel(wx.Panel): |
1389 | 1389 | |
1390 | 1390 | Publisher.sendMessage('Update target', coord=self.list_coord[self.tgt_index][:6]) |
1391 | 1391 | Publisher.sendMessage('Set target transparency', status=True, index=self.tgt_index) |
1392 | - Publisher.sendMessage('Disable or enable coil tracker', status=True) | |
1393 | 1392 | self.OnMenuEditMarkerId('TARGET') |
1394 | 1393 | self.tgt_flag = True |
1395 | 1394 | wx.MessageBox(_("New target selected."), _("InVesalius 3")) | ... | ... |