def test_roa_select_overlay_va(self): sem = simsem.SimSEM(**CONFIG_SEM) for child in sem.children.value: if child.name == CONFIG_SCANNER["name"]: ebeam = child # Simulate a stage move ebeam.updateMetadata({model.MD_POS: (1e-3, -0.2e-3)}) # but it should be a simple miccanvas cnvs = miccanvas.DblMicroscopeCanvas(self.panel) self.add_control(cnvs, wx.EXPAND, proportion=1, clear=True) roa = model.TupleVA(UNDEFINED_ROI) rsol = wol.RepetitionSelectOverlay(cnvs, roa=roa, scanner=ebeam) rsol.activate() cnvs.add_world_overlay(rsol) cnvs.scale = 100000 cnvs.update_drawing() # Undefined ROA => sel = None roi_back = rsol.get_physical_sel() self.assertEqual(roi_back, None) # Full FoV roa.value = (0, 0, 1, 1) test.gui_loop(0.1) # Expect the whole SEM FoV fov = compute_scanner_fov(ebeam) ebeam_rect = get_fov_rect(ebeam, fov) roi_back = rsol.get_physical_sel() for o, b in zip(ebeam_rect, roi_back): self.assertAlmostEqual(o, b, msg="ebeam FoV (%s) != ROI (%s)" % (ebeam_rect, roi_back)) # Hald the FoV roa.value = (0.25, 0.25, 0.75, 0.75) test.gui_loop(0.1) # Expect the whole SEM FoV fov = compute_scanner_fov(ebeam) fov = (fov[0] / 2, fov[1] / 2) ebeam_rect = get_fov_rect(ebeam, fov) roi_back = rsol.get_physical_sel() for o, b in zip(ebeam_rect, roi_back): self.assertAlmostEqual(o, b, msg="ebeam FoV (%s) != ROI (%s)" % (ebeam_rect, roi_back)) test.gui_loop() sem.terminate()
def test_roa_select_overlay(self): # but it should be a simple miccanvas cnvs = miccanvas.DblMicroscopeCanvas(self.panel) self.add_control(cnvs, wx.EXPAND, proportion=1, clear=True) rsol = wol.RepetitionSelectOverlay(cnvs) rsol.activate() cnvs.add_world_overlay(rsol) cnvs.scale = 400 test.gui_loop() wroi = [-0.1, 0.3, 0.2, 0.4] # in m rsol.set_physical_sel(wroi) test.gui_loop() wroi_back = rsol.get_physical_sel() for o, b in zip(wroi, wroi_back): self.assertAlmostEqual(o, b, msg="wroi (%s) != bak (%s)" % (wroi, wroi_back)) rsol.repetition = (3, 2) rsol.fill = wol.RepetitionSelectOverlay.FILL_POINT pos = cnvs.margins[0] + 10, cnvs.margins[1] + 10 rsol.add_label("Repetition fill will change in 3 seconds.", pos, colour=(0.8, 0.2, 0.1)) cnvs.update_drawing() test.gui_loop() tol = vol.TextViewOverlay(cnvs) tol.add_label("Right click to toggle tool") cnvs.add_view_overlay(tol) def toggle(evt): if rsol.active: rsol.deactivate() else: rsol.activate() evt.Skip() cnvs.Bind(wx.EVT_RIGHT_UP, toggle) test.gui_loop()