def testLineProfile(self): """Test ScatterProfileToolBar line profile""" nPoints = 8 self.profile.setNPoints(nPoints) self.assertEqual(self.profile.getNPoints(), nPoints) # Activate line profile lineAction = self.profile.actions()[2] lineAction.trigger() self.qapp.processEvents() # Add a scatter plot self.plot.addScatter(x=(0., 1., 1., 0.), y=(0., 0., 1., 1.), value=(0., 1., 2., 3.)) self.plot.resetZoom(dataMargins=(.1, .1, .1, .1)) self.qapp.processEvents() # Set a ROI profile roi = roi_items.LineROI() roi.setEndPoints(numpy.array([0., 0.]), numpy.array([1., 1.])) self.profile._getRoiManager().addRoi(roi) # Wait for async interpolator init for _ in range(10): self.qWait(200) if not self.profile.hasPendingOperations(): break self.assertIsNotNone(self.profile.getProfileValues()) points = self.profile.getProfilePoints() self.assertEqual(len(points), nPoints)
def testLine_geometry(self): item = roi_items.LineROI() startPoint = numpy.array([1, 2]) endPoint = numpy.array([3, 4]) item.setEndPoints(startPoint, endPoint) numpy.testing.assert_allclose(item.getEndPoints()[0], startPoint) numpy.testing.assert_allclose(item.getEndPoints()[1], endPoint)
def testPlotWhenRoiRemoved(self): """Make sure there is no remaining items in the plot when a ROI is removed""" manager = roi.RegionOfInterestManager(self.plot) item = roi_items.LineROI() item.setEndPoints((0, 0), (1, 1)) item.setEditable(True) manager.addRoi(item) self.qWait() try: # Make sure the test setup is fine self.assertNotEqual(len(manager.getRois()), 0) self.assertNotEqual(len(self.plot.getItems()), 0) # Call clear and test the expected state manager.removeRoi(item) self.assertEqual(len(manager.getRois()), 0) self.assertEqual(len(self.plot.getItems()), 0) finally: # Clean up manager.clear()
def testPlotWhenCleared(self): """PlotWidget.clear should clean up the available ROIs""" manager = roi.RegionOfInterestManager(self.plot) item = roi_items.LineROI() item.setEndPoints((0, 0), (1, 1)) item.setEditable(True) manager.addRoi(item) self.qWait() try: # Make sure the test setup is fine self.assertNotEqual(len(manager.getRois()), 0) self.assertNotEqual(len(self.plot.getItems()), 0) # Call clear and test the expected state self.plot.clear() self.assertEqual(len(manager.getRois()), 0) self.assertEqual(len(self.plot.getItems()), 0) finally: # Clean up manager.clear()
def testLineInteraction(self): """This test make sure that a ROI based on handles can be edited with the mouse.""" xlimit = self.plot.getXAxis().getLimits() ylimit = self.plot.getYAxis().getLimits() points = numpy.array([xlimit, ylimit]).T center = numpy.mean(points, axis=0) # Create the line manager = roi.RegionOfInterestManager(self.plot) item = roi_items.LineROI() item.setEndPoints(points[0], points[1]) item.setEditable(True) manager.addRoi(item) self.qapp.processEvents() # Drag the center widget = self.plot.getWidgetHandle() mx, my = self.plot.dataToPixel(*center) self.mouseMove(widget, pos=(mx, my)) self.mousePress(widget, qt.Qt.LeftButton, pos=(mx, my)) self.mouseMove(widget, pos=(mx, my + 25)) self.mouseMove(widget, pos=(mx, my + 50)) self.mouseRelease(widget, qt.Qt.LeftButton, pos=(mx, my + 50)) result = numpy.array(item.getEndPoints()) # x location is still the same numpy.testing.assert_allclose(points[:, 0], result[:, 0], atol=0.5) # size is still the same numpy.testing.assert_allclose(points[1] - points[0], result[1] - result[0], atol=0.5) # But Y is not the same self.assertNotEqual(points[0, 1], result[0, 1]) self.assertNotEqual(points[1, 1], result[1, 1]) item = None manager.clear() self.qapp.processEvents()
def testRoiDisplay(self): rois = [] # Line item = roi_items.LineROI() startPoint = numpy.array([1, 2]) endPoint = numpy.array([3, 4]) item.setEndPoints(startPoint, endPoint) rois.append(item) # Horizontal line item = roi_items.HorizontalLineROI() item.setPosition(15) rois.append(item) # Vertical line item = roi_items.VerticalLineROI() item.setPosition(15) rois.append(item) # Point item = roi_items.PointROI() point = numpy.array([1, 2]) item.setPosition(point) rois.append(item) # Rectangle item = roi_items.RectangleROI() origin = numpy.array([0, 0]) size = numpy.array([10, 20]) item.setGeometry(origin=origin, size=size) rois.append(item) # Polygon item = roi_items.PolygonROI() points = numpy.array([[10, 10], [12, 10], [50, 1]]) item.setPoints(points) rois.append(item) # Degenerated polygon: No points item = roi_items.PolygonROI() points = numpy.empty((0, 2)) item.setPoints(points) rois.append(item) # Degenerated polygon: A single point item = roi_items.PolygonROI() points = numpy.array([[5, 10]]) item.setPoints(points) rois.append(item) # Degenerated arc: it's a point item = roi_items.ArcROI() center = numpy.array([10, 20]) innerRadius, outerRadius, startAngle, endAngle = 0, 0, 0, 0 item.setGeometry(center, innerRadius, outerRadius, startAngle, endAngle) rois.append(item) # Degenerated arc: it's a line item = roi_items.ArcROI() center = numpy.array([10, 20]) innerRadius, outerRadius, startAngle, endAngle = 0, 100, numpy.pi, numpy.pi item.setGeometry(center, innerRadius, outerRadius, startAngle, endAngle) rois.append(item) # Special arc: it's a donut item = roi_items.ArcROI() center = numpy.array([10, 20]) innerRadius, outerRadius, startAngle, endAngle = 1, 100, numpy.pi, 3 * numpy.pi item.setGeometry(center, innerRadius, outerRadius, startAngle, endAngle) rois.append(item) # Arc item = roi_items.ArcROI() center = numpy.array([10, 20]) innerRadius, outerRadius, startAngle, endAngle = 1, 100, numpy.pi * 0.5, numpy.pi item.setGeometry(center, innerRadius, outerRadius, startAngle, endAngle) rois.append(item) # Horizontal Range item = roi_items.HorizontalRangeROI() item.setRange(-1, 3) rois.append(item) manager = roi.RegionOfInterestManager(self.plot) self.roiTableWidget.setRegionOfInterestManager(manager) for item in rois: with self.subTest(roi=str(item)): manager.addRoi(item) self.qapp.processEvents() item.setEditable(True) self.qapp.processEvents() item.setEditable(False) self.qapp.processEvents() manager.removeRoi(item) self.qapp.processEvents()