def cameraParamsChanged(self, changes): # camera parameters changed; update ui to match if 'exposure' in changes: with pg.SignalBlock(self.ui.spinExposure.valueChanged, self.setExposure): self.ui.spinExposure.setValue(changes['exposure']) if 'binningX' in changes: self.setUiBinning(changes['binningX'], updateCamera=False) elif 'binning' in changes: self.setUiBinning(changes['binning'][0], updateCamera=False) if 'region' in changes: with pg.SignalBlock(self.roi.sigRegionChangeFinished, self.regionWidgetChanged): rgn = changes['region'] self.roi.setPos([rgn[0], rgn[1]]) self.roi.setSize([rgn[2], rgn[3]]) if 'regionX' in changes or 'regionY' in changes: with pg.SignalBlock(self.roi.sigRegionChangeFinished, self.regionWidgetChanged): x = changes.get('regionX', self.roi.pos().x()) y = changes.get('regionY', self.roi.pos().y()) self.roi.setPos([x, y]) if 'regionW' in changes or 'regionH' in changes: with pg.SignalBlock(self.roi.sigRegionChangeFinished, self.regionWidgetChanged): w = changes.get('regionW', self.roi.state['size'][0]) h = changes.get('regionH', self.roi.state['size'][1]) self.roi.setSize([w, h])
def transformChanged(self): # manipulator's global transform has changed; update the center arrow and orientation axis dev = self.getDevice() pos = dev.mapToGlobal([0, 0, 0]) x = dev.mapToGlobal([1, 0, 0]) p1 = pg.Point(x[:2]) p2 = pg.Point(pos[:2]) p3 = pg.Point(1, 0) angle = (p1 - p2).angle(p3) if angle is None: angle = 0 self.centerArrow.setPos(pos[0], pos[1]) self.centerArrow.setStyle(angle=180 - angle) # self.depthLine.setValue(pos[2]) self.depthArrow.setPos(0, pos[2]) self.target.setLabelAngle(dev.getYawAngle()) if self.ui.setOrientationBtn.isChecked(): return with pg.SignalBlock(self.calibrateAxis.sigRegionChangeFinished, self.calibrateAxisChanged): self.calibrateAxis.setPos(pos[:2]) self.calibrateAxis.setAngle(angle) ys = self.calibrateAxis.size()[1]
def _paramsChanged(self, root, changes): for param, change, args in changes: if change == 'value' and isinstance(param, PointParameter): target = param.parent().target with pg.SignalBlock(target.sigDragged, self._targetMoved): target.setPos(*param.value()[:2]) elif change == 'name' and param in self.params.children(): param.target.setLabel(param.name())
def _treeStateChanged(self, root, changes): # child parameter value changed; update this value to match for param, change, args in changes: if change != 'value': continue if param is self: self._updateChildren() else: with pg.SignalBlock(self.sigTreeStateChanged, self._treeStateChanged): self.setValue((self['x'], self['y'], self['z']))
def transformChanged(self): focus = self.getDevice().getFocusDepth() self.focusLine.setValue(focus) # Compute the target focal plane. # This is a little tricky because the objective might have an offset+scale relative # to the focus device. fd = self.getDevice().focusDevice() if fd is None: return tpos = fd.globalTargetPosition() fpos = fd.globalPosition() dif = tpos[2] - fpos[2] with pg.SignalBlock(self.movableFocusLine.sigPositionChangeFinished, self.focusDragged): self.movableFocusLine.setValue(focus + dif) depth = fpos[2] - self.getDevice().getSurfaceDepth() self.depthLabel.setValue(depth)
def _updateChildren(self): with pg.SignalBlock(self.sigTreeStateChanged, self._treeStateChanged): self['x'], self['y'], self['z'] = self.value()
def updateCalibrateAxis(self): pos, angle = self.analyzeTransform() with pg.SignalBlock(self.calibrateAxis.sigRegionChangeFinished, self.calibrateAxisChanged): self.calibrateAxis.setPos(pos[:2]) self.calibrateAxis.setAngle(angle)