diff --git a/elever/main.js b/elever/main.js index 3a93b5aade3a40d37e7d9eaf544a18e89dd02c72..ef57995d73f699f14a9f2c1c25efc11f7f36059b 100644 --- a/elever/main.js +++ b/elever/main.js @@ -5,7 +5,6 @@ const app = electron.app // Module to create native browser window. const BrowserWindow = electron.BrowserWindow - const path = require('path') const url = require('url') const {ipcMain} = require('electron'); @@ -24,7 +23,9 @@ function createWindow () // Create the browser window. mainWindow = new BrowserWindow({width: 800, height: 600, icon:path.join(__dirname,'..','leverjs/leverjs.ico'), webPreferences: { - nodeIntegration: true + nodeIntegration: true, + contextIsolation: false, + enableRemoteModule: true } }); diff --git a/leverjs/ImageWindowBuilder.js b/leverjs/ImageWindowBuilder.js index 823c266807047dcf949c9f4622482c09da2aa191..2c9cf23767bde48a14b6f0323001cf42f86edeb2 100644 --- a/leverjs/ImageWindowBuilder.js +++ b/leverjs/ImageWindowBuilder.js @@ -41,7 +41,8 @@ var miniMapmousedrag = false; // database is read only var gbReadOnlyDB=false; -const IS_NODE = typeof module !== 'undefined' && module.exports; +// const IS_NODE = typeof module !== 'undefined' && module.exports; +var IS_NODE = navigator.userAgent.indexOf('Electron') >= 0 // set to tell render.js (reDraw) not to kick off a multires if we're in the experiment window var gbExperimentRender=false; @@ -171,7 +172,7 @@ window.onload = function () { ROOT=params[1].slice('ROOT='.length) title=params[2].slice('TITLE='.length) - console.log('lever figure window found :: port='+port+" :: root="+root) + console.log('lever figure window found :: port='+port+" :: root="+ROOT) uiServer.init(port,window) document.title='leversc '+title setLeverscUI() diff --git a/leversc/src/MATLAB/@leversc/show.m b/leversc/src/MATLAB/@leversc/show.m index e6a01af93108cc582559f8e6e017a0793bcaf918..2ad1d3bec242fb393e668cc2f3708f2d0a6cd036 100644 --- a/leversc/src/MATLAB/@leversc/show.m +++ b/leversc/src/MATLAB/@leversc/show.m @@ -106,9 +106,19 @@ end function launch_electron_posix(port,fignum,workdir, leverpath,strDB) elec_cmd = 'leverjs'; +px = getenv('PATH'); if ( ~isempty(leverpath) ) - elec_path = fullfile(leverpath,'node_modules','.bin','electron'); - elec_cmd = [elec_path ' ' fullfile(leverpath,'elever','main.js')]; + % first try NVM + nvm_path = getenv('NVM_DIR'); + if ~isempty(nvm_path) + [ret,elec_path] = system('source ~/.nvm/nvm.sh;which electron'); + elec_path = replace(elec_path,newline,''); + nodePath = fileparts(elec_path); + px = [px ':' nodePath]; + else + elec_path = fullfile(leverpath,'node_modules','.bin','electron'); + end + elec_cmd = [elec_path ' ' fullfile(leverpath,'elever','main.js')]; else [status,~] = system(['which ' elec_cmd]); if ( status ~= 0 ) @@ -118,8 +128,8 @@ end if exist('strDB','var') && ~isempty(strDB) elec_cmd = [elec_cmd ' --leverFile=' strDB ' ']; end -cmd = [elec_cmd ' --port=' num2str(port) ' --title="figure ' num2str(fignum) '"' ' &']; -system(cmd); +cmd = [elec_cmd ' --port=' num2str(port) ' --title="figure ' num2str(fignum) '"' ' &'] +system(cmd,'PATH',px); end function launch_electron_windows(port,fignum,workdir, leverpath, strDB) diff --git a/matlab/+Helpers/scaleBar.m b/matlab/+Helpers/scaleBar.m index e002b8d3c5e13eeafd017c20dc6295ab1b10c4b1..83aab422f44cfc28b7b5545dc16f4c4672ccff1e 100644 --- a/matlab/+Helpers/scaleBar.m +++ b/matlab/+Helpers/scaleBar.m @@ -1,4 +1,4 @@ -function [nPixels,microns] = scaleBar(CONSTANTS,targetPixels) +function [nPixels,microns] = scaleBar(CONSTANTS,targetPixels,szim) if ~exist('targetPixels','var') targetPixels = 100; @@ -9,7 +9,10 @@ microns = targetPixels .* microns_per_pixel; microns = 5 * round(microns/5); nPixels = round(microns / microns_per_pixel); -rectangle('Position',[2*size(im,2)-100,25,nPixels,10],'facecolor','w') -text(2*size(im,2)-100+nPixels/2,25,'30um','color','w','HorizontalAlignment','center', ... - 'VerticalAlignment','bottom') +% rectangle('Position',[szim(2)-100,25,nPixels,10],'facecolor','w') +% text(szim(2)-100+nPixels/2,25,'30um','color','w','HorizontalAlignment','center', ... +% 'VerticalAlignment','bottom') +rectangle('Position',[szim(2)-30-nPixels,40,nPixels,15],'FaceColor','w'); +% text(szim(2)-30-nPixels,15,[num2str(microns) '\mum'],'color','w','VerticalAlignment','top','fontsize',12) +text(szim(2)-30-nPixels,5,[num2str(microns) '\mum'],'color','w','VerticalAlignment','top','fontsize',12) diff --git a/matlab/+MovieMaker/goFigureAnimation.m b/matlab/+MovieMaker/goFigureAnimation.m new file mode 100644 index 0000000000000000000000000000000000000000..cdf3798843e633a891c9d5badf6a6c94d5c25a7e --- /dev/null +++ b/matlab/+MovieMaker/goFigureAnimation.m @@ -0,0 +1,49 @@ +% this code can be functionalized +% can also add features: +% periodicity toggle? if true remove final frame +% changing number of inbetweens to speed up or slow down the animation + +fileName = 'ssfClustering'; % name of movie generated +frameRate = 30; % desired frame rate +duration = 30; % desired length of movie in seconds +azimuthList = [-20,-110,-190,-290,-380]; % camera pan angle at key frames +elevationList = [10,10,10,10,10]; % camera tilt angle at key frames + +v = VideoWriter(fileName,'MPEG-4'); +v.FrameRate = frameRate; +open(v); + +% interpolate viewing angles between key frames to match the specified duration + +keyFrameList = [azimuthList;elevationList]'; +numFrames = round(duration * frameRate); +intervalLength = (numFrames - 1) / (size(keyFrameList,1) - 1); + +% initialize the angleList +angleList = zeros(numFrames,2); + +for numKeyFrame = 1:size(keyFrameList,1) - 1 + + firstRow = round(intervalLength * (numKeyFrame - 1) + 1); % first row of the interval between key frames + lastRow = round(intervalLength * numKeyFrame + 1); % last row of the interval between key frames + + a = keyFrameList(numKeyFrame,1); % initial key frame azimuth angle + b = keyFrameList(numKeyFrame + 1,1); % ending key frame azimuth angle + + c = keyFrameList(numKeyFrame,2); % initial key frame elevation angle + d = keyFrameList(numKeyFrame + 1,2); % ending key frame elevation angle + + n = round(intervalLength * numKeyFrame) - round(intervalLength * (numKeyFrame - 1)) + 1; % number of angles to add + + angleList(firstRow:lastRow,:) = [linspace(a,b,n).' , linspace(c,d,n).']; + +end + +% capture frames and write to the movie file +for frame = 1:size(angleList,1) + view(angleList(frame,:)); + drawnow; + writeVideo(v,getframe(gcf)); +end + +close(v);