def _test_applyCommandLine(panel, overlayList, displayCtx): displayCtx = panel.displayCtx panel.sceneOpts.layout = 'horizontal' with tempdir(): img = fslimage.Image(np.random.randint(1, 255, (20, 20, 20))) img.save('image.nii.gz') applycommandline.applyCommandLineArgs( overlayList, panel.displayCtx, ['-lo', 'vertical', 'image.nii.gz', '-b', '75', '-c', '25', '-g', '-0.5'], panel=panel, blocking=True) # scene args are applied asynchronously waitUntilIdle() assert len(overlayList) == 1 assert np.all(overlayList[0][:] == img[:]) img = overlayList[0] assert displayCtx.getDisplay(img).brightness == 75 assert displayCtx.getDisplay(img).contrast == 25 assert displayCtx.getOpts( img).gamma == -0.5 assert panel.sceneOpts.layout == 'vertical'
def _test_complex_image(panel, overlayList, displayCtx): with tempdir.tempdir(): data = np.random.randint(1, 255, (10, 10, 10)) + \ 1j * np.random.randint(1, 255, (10, 10, 10)) data = np.array(data, dtype=np.complex64) img = fslimage.Image(data, xform=np.eye(4)) img.save('complex.nii') args = ['complex.nii', '-cmr', '25', '-g', '0.5'] applycommandline.applyCommandLineArgs( overlayList, displayCtx, args) realYield(50) assert len(overlayList) == 2 real, imag = overlayList # make sure CLI args were applied to both overlays assert displayCtx.getOpts(real).cmapResolution == 25 assert displayCtx.getOpts(imag).cmapResolution == 25 assert displayCtx.getOpts(real).gamma == 0.5 assert displayCtx.getOpts(imag).gamma == 0.5 assert np.all(real[:] == np.real(img[:])) assert np.all(imag[:] == np.imag(img[:]))
def _test_applyCommandLine_baseDir(panel, overlayList, displayCtx): displayCtx = panel.displayCtx with tempdir(): basedir = op.join(*'sub/dir/to/test/base/dir/'.split('/')) os.makedirs(basedir) img = fslimage.Image(np.random.randint(1, 255, (20, 20, 20))) img.save(op.join(basedir, 'image.nii.gz')) applycommandline.applyCommandLineArgs( overlayList, panel.displayCtx, [ '-lo', 'vertical', 'image.nii.gz', '-b', '75', '-c', '25', '-g', '-0.5' ], baseDir=basedir, panel=panel, blocking=True) # scene args are applied asynchronously waitUntilIdle() assert len(overlayList) == 1 assert np.all(overlayList[0][:] == img[:]) img = overlayList[0] assert displayCtx.getDisplay(img).brightness == 75 assert displayCtx.getDisplay(img).contrast == 25 assert displayCtx.getOpts(img).gamma == -0.5 assert panel.sceneOpts.layout == 'vertical'
def callback(line): # first arg is the directory that # the client was executed from, # which is used by applyCLIArgs # in case overlays were specified # with relative paths args = shlex.split(line) baseDir = args[0] args = args[1:] applycli.applyCommandLineArgs(overlayList, displayCtx, args, baseDir=baseDir)
def MacOpenURL(self, url): """On OSX, support opening files via a ``fsleyes://`` url. """ if self.__overlayList is None: return import fsleyes_widgets.utils.status as status import fsleyes.strings as strings import fsleyes.parseargs as parseargs import fsleyes.actions.applycommandline as applycommandline errTitle = strings.titles[self, 'openURLError'] errMsg = strings.messages[self, 'openURLError'] with status.reportIfError(errTitle, errMsg): applycommandline.applyCommandLineArgs( self.__overlayList, self.__displayCtx, parseargs.fsleyesUrlToArgs(url))
def setState(frame, state): """Set the state of FSLeyes from the given ``state`` string. .. warning:: This function will remove all view panels, and remove all overlays, before loading the new state. :arg frame: The :class:`.FSLeyesFrame` :arg state: A FSLeyes state string, generated by :func:`getState`. """ displayCtx = frame.displayCtx overlayList = frame.overlayList bits = state.split(SEP) layout = bits[0] cli = bits[1:] cli = [c.split(CLISEP) for c in cli] # First clear the current state frame.removeAllViewPanels() overlayList.clear() # Then load all new overlays applycommandline.applyCommandLineArgs(overlayList, displayCtx, cli[0], blocking=True) # After overlays have been loaded, # apply the new layout, and apply # view-specific overlay arguments. layouts.applyLayout(frame, 'state', layout) panels = [ p for p in frame.viewPanels if isinstance(p, canvaspanel.CanvasPanel) ] for i, panel in enumerate(panels, 1): applycommandline.applyCommandLineArgs(overlayList, panel.displayCtx, cli[i], panel, loadOverlays=False)
def _test_applyCommandLine_sceneOnly(panel, overlayList, displayCtx): panel.sceneOpts.layout = 'horizontal' with tempdir(): img = fslimage.Image(np.random.randint(1, 255, (20, 20, 20))) img.save('image.nii.gz') applycommandline.applyCommandLineArgs( overlayList, panel.displayCtx, ['-lo', 'vertical', 'image.nii.gz', '-b', '75', '-c', '25', '-g', '-0.5'], panel=panel, applyOverlayArgs=False) # scene args are applied asynchronously waitUntilIdle() assert len(overlayList) == 0 assert panel.sceneOpts.layout == 'vertical'
def _test_melodic_IC(frame, overlayList, displayCtx): loaded = [False] def onLoad(*_): loaded[0] = True with tempdir(): mdir = op.abspath(create_melodic_dir()) mean = op.join(mdir, 'mean.nii.gz') mic = op.join(mdir, 'melodic_IC.nii.gz') applyCommandLineArgs(overlayList, displayCtx, ['-ad', mdir], onLoad=onLoad) while not loaded[0]: realYield() assert len(overlayList) == 2 assert overlayList[0].dataSource == mean assert overlayList[1].dataSource == mic assert displayCtx.getSelectedOverlay() is overlayList[1]