function varargout = BrainNet(varargin)
%BrainNet Viewer, a graph-based brain network mapping tool, by Mingrui Xia
%-----------------------------------------------------------
% Copyright(c) 2019
% Beijing Normal University
% Written by Mingrui Xia
% Mail to Author: Mingrui Xia
% Version 1.63;
% Create Date 20110906;
% Last edited 20190329
%-----------------------------------------------------------
%
% BrainNet MATLAB code for BrainNet.fig
% BrainNet, by itself, creates a new BrainNet or raises the existing
% singleton*.
%
% H = BrainNet returns the handle to a new BrainNet or the handle to
% the existing singleton*.
%
% BrainNet('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in BrainNet.M with the given input arguments.
%
% BrainNet('Property','Value',...) creates a new BrainNet or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before BrainNet_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to BrainNet_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help BrainNet
% Last Modified by GUIDE v2.5 21-Jun-2019 10:08:41
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @BrainNet_OpeningFcn, ...
'gui_OutputFcn', @BrainNet_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before BrainNet is made visible.
function BrainNet_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to BrainNet (see VARARGIN)
warning off
fprintf('Please cite:\nXia M, Wang J, He Y (2013) BrainNet Viewer: A Network Visualization Tool for Human Brain Connectomics. PLoS ONE 8: e68910.\nAn example:\n''The brain networks were visualized with the BrainNet Viewer (http://www.nitrc.org/projects/bnv/) (Xia et al., 2013)''.\n');
% Choose default command line output for BrainNet
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% if exist('BrainNet_Icon.png','file')==2
% newIcon = javax.swing.ImageIcon('BrainNet_Icon.png');
% figFrame = get(handles.NV_fig,'JavaFrame');
% figFrame.setFigureIcon(newIcon);
% end
% movegui(handles.NV_fig,'center');
movegui(hObject,'center');
%opengl software; %% Add by Mingrui, 20140815 enable to fix upside-down text
global FLAG
FLAG.Loadfile=0;
FLAG.EC=0;
FLAG.Rotate=0;
FLAG.EC_change=0;
FLAG.axial=0;
FLAG.sagittal=0;
FLAG.coronal=0;
FLAG.LF=0;
FLAG.MAP=0;
FLAG.IsCalledByCMD = 0;
global EC
EC=[];
EC.bak.color=[1,1,1];
EC.msh.color_type = 1; %Added by Mingrui, 20190521, load color for each vertex; 1 for same; 2 for defined
EC.msh.color=[0.95,0.95,0.95];
EC.msh.color_table = EC.msh.color;
EC.msh.color_table_tmp = EC.msh.color;
EC.msh.alpha=0.3;
EC.msh.doublebrain = 0; %%% Added by Mingrui Xia, 20120717, show two brains in one figure, 0 for one brain, 1 for two brains.
% Added by Mingrui, 20190327, parameters for boundary
EC.msh.boundary = 1;
% 1 for none, 2 for auto, 3 for threshold, and 4 for file
EC.msh.boundary_value = 0;
EC.msh.boundary_color = [0 0 0];
EC.nod.draw=1;
EC.nod.draw_threshold_type=1;
EC.nod.draw_threshold=0;
EC.nod.size=2;
EC.nod.size_size=3;
EC.nod.size_value=1;
EC.nod.size_threshold=0;
EC.nod.size_ratio=1;
EC.nod.color=1;
EC.nod.CM = [[37,89,152]/255;zeros(63,3)];
% Add by Mingrui, 20170317, custom colormap for node
EC.nod.CMt = EC.nod.CM;
EC.nod.cmstring = 'jet(64);';
EC.nod.color_map=1;
% Add by Mingrui, 20170303, fixed range of color mapping
EC.nod.color_map_type = 1; % 1 for auto, 2 for fix
EC.nod.color_map_low = 0;
EC.nod.color_map_high = 1;
EC.nod.color_threshold=0;
EC.nod.CMm=[0.956862745098039,1,0.545098039215686,0,0.247058823529412,0.913725490196078,1,0.803921568627451,0,0.129411764705882,0.611764705882353,1,1,0.298039215686275,0.0117647058823529,0.403921568627451,0.474509803921569,0.376470588235294,0.619607843137255,0,1;
0.262745098039216,0.756862745098039,0.764705882352941,0.737254901960784,0.317647058823529,0.117647058823529,0.596078431372549,0.862745098039216,0.588235294117647,0.588235294117647,0.152941176470588,0.341176470588235,0.921568627450980,0.686274509803922,0.662745098039216,0.227450980392157,0.333333333333333,0.490196078431373,0.619607843137255,0,1;
0.211764705882353,0.0274509803921569,0.290196078431373,0.831372549019608,0.709803921568628,0.388235294117647,0,0.223529411764706,0.533333333333333,0.952941176470588,0.690196078431373,0.133333333333333,0.231372549019608,0.313725490196078,0.956862745098039,0.717647058823529,0.282352941176471,0.545098039215686,0.619607843137255,0,1]';
EC.nod.ModularNumber = [];
% EC.nod.CMm = hsv(64);
% tmp = [];
% for i = 1:8
% tmp = vertcat(tmp,EC.nod.CMm(i:8:64,:));
% % tmp = [tmp,EC.nod.CMm(i:8:256,:)'];
% end
% EC.nod.CMm = tmp;
% clear tmp
EC.lbl=2;
EC.lbl_threshold=0;
EC.lbl_threshold_type=1;
EC.edg.draw=1;
EC.edg.draw_threshold=0;
EC.edg.draw_abs=1;
EC.edg.size=2;
% EC.edg.size_size=0.3;
EC.edg.size_size = 1;
EC.edg.size_value=1;
EC.edg.size_threshold=0;
EC.edg.size_ratio=1;
EC.edg.size_abs=1;
EC.edg.color=1;
% 1 for same
% 2 for colormap
% 3 for threshold
% 4 for distance
% 5 for nodal module
% 6 for custom definition
% Add by Mingrui, 20170303, fixed range of color mapping
EC.edg.color_map_type = 1; % 1 for auto, 2 for fix
EC.edg.color_map_low = 0;
EC.edg.color_map_high = 1;
EC.edg.CM = [[1,0.9,0.73];ones(63,3)*0.38];
% Add by Mingrui 20170317, custom colormap for edge
EC.edg.CMt = EC.edg.CM;
EC.edg.cmstring = 'jet(64);';
EC.edg.color_map=1;
EC.edg.color_threshold=0;
EC.edg.color_distance=0;
EC.edg.color_abs=1;
% Add by Mingrui, 20150120, using custom matrix to define edge color.
EC.edg.CM_custom = [0.956862745098039,1,0.545098039215686,0,0.247058823529412,0.913725490196078,1,0.803921568627451,0,0.129411764705882,0.611764705882353,1,1,0.298039215686275,0.0117647058823529,0.403921568627451,0.474509803921569,0.376470588235294,0.619607843137255,0,1;
0.262745098039216,0.756862745098039,0.764705882352941,0.737254901960784,0.317647058823529,0.117647058823529,0.596078431372549,0.862745098039216,0.588235294117647,0.588235294117647,0.152941176470588,0.341176470588235,0.921568627450980,0.686274509803922,0.662745098039216,0.227450980392157,0.333333333333333,0.490196078431373,0.619607843137255,0,1;
0.211764705882353,0.0274509803921569,0.290196078431373,0.831372549019608,0.709803921568628,0.388235294117647,0,0.223529411764706,0.533333333333333,0.952941176470588,0.690196078431373,0.133333333333333,0.231372549019608,0.313725490196078,0.956862745098039,0.717647058823529,0.282352941176471,0.545098039215686,0.619607843137255,0,1]';
EC.edg.color_custom_matrix = [];
EC.edg.color_custom_index = [];
EC.edg.interhemiedges = 0; % Add by Mingrui Xia, 20120109, draw inter hemisphere edges.
EC.edg.directed = 0; % Add by Mingrui Xia, 20120621, draw directed network.
% Add by Mingrui, 20140925, dispaly edge by opacity
EC.edg.opacity = 1; % 1 for same opacity, 2 for value mapping
EC.edg.opacity_same = 0.7; % default 0.7 for same
EC.edg.opacity_max = 0.9;
EC.edg.opacity_min = 0.1;
EC.edg.opacity_abs = 1;
EC.img.width=2000;
EC.img.height=1500;
EC.img.dpi=300;
EC.lbl_font.FontName='Arial';
EC.lbl_font.FontWeight='bold';
EC.lbl_font.FontAngle='normal';
EC.lbl_font.FontSize=11;
EC.lbl_font.FontUnits='points';
% Added by Mingrui Xia, 20170919, add option to show label in front.
EC.lbl_front = 0;
EC.lot.view=1;
% 1 for single view
% 2 for full view
% 3 for lateral and medial view
% 4 for lateral, medial and ventral view
% 5 for lateral, medial and dorsal view
EC.lot.view_direction=1;
% Added by Mingrui Xia, 20120806, add custom view for single brain.
EC.lot.view_az = -90;
EC.lot.view_el = 0;
EC.vol.display = [];
EC.vol.pn = [];
EC.vol.px = [];
EC.vol.nn = [];
EC.vol.nx = [];
EC.vol.null=[0.95,0.95,0.95];
EC.vol.CM=ones(1000,3)*0.75;
EC.vol.color_map = 13;
EC.vol.cmstring = 'jet(1000);';
EC.vol.adjustCM = 1;
% Added by Mingrui Xia, 20160407, support annot format
EC.vol.CM_annot = rand(64,3);
% Added by Mingrui Xia, 20140916, add statistic for volume mapping
EC.vol.threshold = 0;
EC.vol.p = 0.05;
EC.vol.clustersize = 0;
EC.vol.rmm = 18;
% Added by Mingrui Xia, 20120726, selection for different mapping algorithm.
% 1 for Nearest Voxel
% 2 for Average Vertex
% 3 for Average Voxel
% 4 for Gaussian
% 5 for Interpolated (default)
% 6 for Maximum Voxel
% 7 for Minimum Voxel
% 8 for Extremum Voxel
% 9 for Most Neighbour Voxel, Added by Mingrui Xia, 20130104
EC.vol.mapalgorithm = 5;
EC.glb.material = 'dull';% Added by Mingrui Xia, 20120316, modify object material, shading, light.
EC.glb.material_ka = '0.5';
EC.glb.material_kd = '0.5';
EC.glb.material_ks = '0.5';
EC.glb.shading = 'interp';
EC.glb.lighting = 'phong';
EC.glb.lightdirection = 'right';
EC.glb.render = 'OpenGL'; % Added by Mingrui Xia, 20120413, selection for rendering methods
EC.glb.detail = 3; % Add by Mingrui Xia, 20120413, adjust graph detail
% Add by Mingrui, 20170309, display LR
EC.glb.lr = 1; % 1 for display, 0 for not display
% Added by Mingrui, 20120528, for ROI draw
EC.vol.type = 1; % 1 for volume to surface, 2 for ROI
EC.vol.roi.drawall = 1;
EC.vol.roi.draw = [];
EC.vol.roi.color = hsv(100);
EC.vol.roi.color = [EC.vol.roi.color(1:10:91,:)',EC.vol.roi.color(2:10:92,:)',EC.vol.roi.color(3:10:93,:)',EC.vol.roi.color(4:10:94,:)',EC.vol.roi.color(5:10:95,:)',EC.vol.roi.color(6:10:96,:)',EC.vol.roi.color(7:10:97,:)',EC.vol.roi.color(8:10:98,:)',EC.vol.roi.color(9:10:99,:)',EC.vol.roi.color(10:10:100,:)']';
EC.vol.roi.color = repmat(EC.vol.roi.color,11,1);
EC.vol.roi.colort = EC.vol.roi.color;
% EC.vol.roi.color = ones(2000,3)*0.7;
% EC.vol.roi.colort = EC.vol.roi.color;
EC.vol.roi.smooth = 1;
EC.vol.roi.drawcus = '';
EC.vol.roi.drawt = [];
% Added by Mingrui, 20170317, choice for smooth kernal
EC.vol.roi.smooth_kernal = 1;
% 1 for box
% 2 for Gaussian
global a
if ~isempty(a) && mean(ishandle(a))==1
delete(a);
end
a=[];
global File
File.MF=[];
File.NI=[];
File.NT=[];
File.VF=[];
% if exist('BrainNet_Background.tif','file')==2
% imshow(imread('BrainNet_Background.tif'));
% end
% Modified according to Chris Rorden's suggestion to avoid using addtional image toolbox.
if exist('BrainNet_Background.tif','file')==2 && exist('imshow','file')
imshow(imread('BrainNet_Background.tif'));
end
global OutputText %%% Added by Mingrui Xia, 20120413, give out aal information for selected vertex.
if exist('BrainNet_AAL_Label.mat','file')==2
OutputText.AAL = load('BrainNet_AAL_Label.mat');
else
OutputText.AAL = [];
end
if exist('BrainNet_Brodmann_Label.mat','file')==2 %%% Added by Mingrui Xia, 20120417, give out brodmann information for selected vertex.
OutputText.Brodmann = load('BrainNet_Brodmann_Label.mat');
else
OutputText.Brodmann = [];
end
dcm_obj = datacursormode(hObject);
set(dcm_obj,'UpdateFcn',@BrainNet_Output_txt)
% set(hObject,'toolbar','figure')
% set(gcf,'Renderer','OpenGL');
%set(handles.NV_fig,'position',get(0,'screensize'));
% UIWAIT makes BrainNet wait for user response (see UIRESUME)
% uiwait(handles.NV_fig);
% --- Outputs from this function are returned to the command line.
function varargout = BrainNet_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
%set(handles.NV_axes,'Position',get(handles.NV_fig,'Position'))
% --------------------------------------------------------------------
function NV_m_file_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_file (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function NV_m_exit_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_exit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global a
if ~isempty(a)
delete(a);
a=[];
end
close(findobj('Tag','NV_fig'));
% --------------------------------------------------------------------
function NV_m_nm_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_nm (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global FLAG
if (isfield(FLAG,'IsCalledByREST') && FLAG.IsCalledByREST==1) || ...
(isfield(FLAG,'IsCalledByCMD') && FLAG.IsCalledByCMD==1)
% YAN Chao-Gan 111023. For calling from outside. Edited Mingrui Xia,
% 20121031 add call from commandline
handles.NV_axes=gca(hObject);
end
axes(handles.NV_axes);
cla
global a
if FLAG.Loadfile==0
if exist('BrainNet_background.tif','file')==2
imshow(imread('BrainNet_background.tif'));
end
else
if ~isempty(a) && mean(ishandle(a))==1
delete(a);
end
a=FileView;
end
FLAG.IsCalledByREST = 0;
function NetPrepare
global surf
global EC
switch EC.edg.draw
case 1
[surf.ncyl,surf.cylinder]=Nettrans(surf.net);
% cylinder(:,1:3): node index and value
% cylinder(:,4): size
% cylinder(:,5): color
% cylinder(:,6): opacity
case 2
[surf.ncyl,surf.cylinder]=Nettrans(surf.net,EC.edg.draw_threshold);
end
surf.cylinder(:,4) = surf.cylinder(:,3);
surf.cylinder(:,5) = surf.cylinder(:,3);
surf.cylinder(:,6) = surf.cylinder(:,3);
if EC.edg.size_abs == 1
surf.cylinder(:,4) = abs(surf.cylinder(:,4));
end
switch EC.edg.size
case 1
surf.cylinder(:,4) = EC.edg.size_size;
case 2
switch EC.edg.size_value
case 1
if max(surf.cylinder(:,4)) ~=min(surf.cylinder(:,4))
k = 5.6 /(max(surf.cylinder(:,4))-min(surf.cylinder(:,4)));
b = 6 - k*max(surf.cylinder(:,4));
else
k = 0;
b = 2;
end
surf.cylinder(:,4) = surf.cylinder(:,4) * k + b;
case 2
tmp = surf.cylinder(:,4);
tmp(tmp<0.2) = 0.2;
tmp(tmp>6) = 6;
surf.cylinder(:,4) = tmp;
end
case 3
if EC.edg.size_value == 1
indu = surf.cylinder(:,4) >= EC.edg.size_threshold;
tmp = surf.cylinder(:,4);
tmp2 = tmp(indu);
if max(tmp2) ~= min(tmp2)
k = 5.6 /(max(tmp2)-min(tmp2));
b = 6 - k*max(tmp2);
else
k = 0;
b = 2;
end
tmp2 = tmp2 * k + b;
tmp(indu) = tmp2;
tmp(surf.cylinder(:,4) < EC.edg.size_threshold) = 0.4;
surf.cylinder(:,4) = tmp;
elseif EC.edg.size_value == 2
tmp = surf.cylinder(:,4);
tmp(tmp6) = 6;
surf.cylinder(:,4) = tmp;
end
end
if EC.edg.color_abs == 1
surf.cylinder(:,5) = abs(surf.cylinder(:,5));
end
switch EC.edg.color
case 1
surf.cylinder(:,5) = 1;
case 2
tmp = surf.cylinder(:,5);
if EC.edg.color_map_type == 1
lowend = min(tmp);
highend = max(tmp);
else
lowend = EC.edg.color_map_low;
highend = EC.edg.color_map_high;
end
if highend~=lowend
k = 63 / (highend - lowend);
b = 64 - k*highend;
else
k = 0;
b = 64;
end
tmp = round(tmp * k + b);
tmp(tmp < 1) = 1;
tmp(tmp > 64) = 64;
surf.cylinder(:,5) = tmp;
case 3
tmp = surf.cylinder(:,5);
tmp2 = tmp;
tmp(tmp2 <= EC.edg.color_threshold) = 64;
tmp(tmp2 > EC.edg.color_threshold) = 1;
surf.cylinder(:,5) = tmp;
case 4
n1 = surf.sphere(surf.cylinder(:,1),1:3);
n2 = surf.sphere(surf.cylinder(:,2),1:3);
length_cyl = sqrt(sum((n1 - n2) .* (n1 - n2), 2));
tmp = length_cyl;
tmp(length_cyl >= EC.edg.color_distance) = 1;
tmp(length_cyl < EC.edg.color_distance) = 64;
surf.cylinder(:,5) = tmp;
case 5
edg_mod = surf.sphere(surf.cylinder(:,1),4);
tmp = surf.sphere(surf.cylinder(:,1),4) - surf.sphere(surf.cylinder(:,2),4);
edg_mod(tmp~=0) = 21;
% Edited by Mingrui, 20150310, fix a bug when module index were not
% noncontinuous.
tmp = unique(surf.sphere(:,4));
edg_mod2 = ones(size(edg_mod))*21;
for i = 1:length(tmp)
edg_mod2(edg_mod == tmp(i)) = i;
end
surf.cylinder(:,5) = edg_mod2;
case 6
index = sub2ind(size(surf.net),surf.cylinder(:,1),surf.cylinder(:,2));
tmp = EC.edg.color_custom_matrix(index);
tmp2 = zeros(size(tmp));
for i = 1:length(EC.edg.color_custom_index)
tmp2(tmp == EC.edg.color_custom_index(i)) = i;
end
surf.cylinder(:,5) = tmp2;
% if max(tmp) ~=min(tmp)
% k = 63 /(max(tmp)-min(tmp));
% b = 64 - k*max(tmp);
% else
% k = 0;
% b = 64;
% end
% tmp = round(tmp * k + b);
% tmp(tmp < 1) = 1;
% tmp(tmp > 64) = 64;
% surf.cylinder(:,5) = tmp;
end
if EC.edg.opacity_abs == 1
surf.cylinder(:,6) = abs(surf.cylinder(:,6));
end
switch EC.edg.opacity
case 1
surf.cylinder(:,6) = EC.edg.opacity_same;
case 2
tmp = surf.cylinder(:,6);
k = (EC.edg.opacity_max - EC.edg.opacity_min)/(max(tmp)-min(tmp));
b = EC.edg.opacity_max - k*max(tmp);
tmp = tmp * k + b;
tmp(tmp < EC.edg.opacity_min) = EC.edg.opacity_min;
tmp(tmp > EC.edg.opacity_max) = EC.edg.opacity_max;
surf.cylinder(:,6) = tmp;
end
function NodePrepare
global surf
global EC
if EC.nod.color==2
surf.sphere(:,6)=surf.sphere(:,4);
% Modified by Mingrui, 20170303, use only linear mapping, add fixed
% colormap range
% if min(surf.sphere(:,6))<0
% surf.sphere(:,6)=surf.sphere(:,6)-min(surf.sphere(:,6));
% end
% if min(surf.sphere(:,6))<1
% surf.sphere(:,6)=surf.sphere(:,6)+1;
% end
% while max(surf.sphere(:,6))/min(surf.sphere(:,6))>10
% surf.sphere(:,6)=log(surf.sphere(:,6));
% if min(surf.sphere(:,6))<1
% surf.sphere(:,6)=surf.sphere(:,6)+1;
% end
% end
if EC.nod.color_map_type == 1
lowend = min(surf.sphere(:,6));
highend = max(surf.sphere(:,6));
else
lowend = EC.nod.color_map_low;
highend = EC.nod.color_map_high;
end
%Editied by Mingrui, 20181123, fix a bug when the length for inputed
%colormap is not 64
colormap_length = length(EC.nod.CM);
if highend~=lowend
EC.nod.k = (colormap_length-1)/(highend-lowend);
EC.nod.b = colormap_length-EC.nod.k*highend;
else
EC.nod.k=0;
EC.nod.b=1;
end
surf.sphere(:,6)=surf.sphere(:,6)*EC.nod.k+EC.nod.b;
else
surf.sphere(:,6)=surf.sphere(:,4);
end
surf.sphere(:,7) = surf.sphere(:,5); % Edited by Mingrui Xia, 20120702, fix edge length when using fix node size.
switch EC.nod.size
case 1
surf.sphere(:,7) = EC.nod.size_size;
case {2,3}
if EC.nod.size_value == 1
if min(surf.sphere(:,7))<0
surf.sphere(:,7)=surf.sphere(:,7)-min(surf.sphere(:,7));
end
if min(surf.sphere(:,7))<1
surf.sphere(:,7)=surf.sphere(:,7)+1;
end
while max(surf.sphere(:,7))/min(surf.sphere(:,7))>10
surf.sphere(:,7)=log(surf.sphere(:,7));
if min(surf.sphere(:,7))<1
surf.sphere(:,7)=surf.sphere(:,7)+1;
end
end
if max(surf.sphere(:,7))~=min(surf.sphere(:,7))
EC.nod.k=5/(max(surf.sphere(:,7))-min(surf.sphere(:,7)));
EC.nod.b=7-EC.nod.k*max(surf.sphere(:,7));
else
EC.nod.k=0;
EC.nod.b=4;
end
surf.sphere(:,7)=surf.sphere(:,7)*EC.nod.k+EC.nod.b;
end
if EC.nod.size == 3
tmp = surf.sphere(:,7);
tmp(tmp < EC.nod.size_threshold) = 1;
surf.sphere(:,7) = tmp;
end
end
surf.sphere(:,7) = surf.sphere(:,7) * EC.nod.size_ratio;
function fv = ROIPrepare
global EC
global surf
% Added by Mingrui 20140925, draw cluster in statistical files
if ~strcmp(surf.test,'No')
vol_tmp = surf.vol;
vol_tmp(vol_tmp < EC.vol.threshold & vol_tmp > -EC.vol.threshold) = 0;
[L, num] = bwlabeln(vol_tmp,EC.vol.rmm);
vol_tmp2 = zeros(size(vol_tmp));
n = 0;
for x = 1:num
theCurrentCluster = L == x;
if length(find(theCurrentCluster)) >= EC.vol.clustersize
n = n + 1;
vol_tmp2(logical(theCurrentCluster)) = n;
end
end
else
vol_tmp2 = surf.vol;
end
fv = cell(length(EC.vol.roi.draw),1);
for i = 1:length(fv)
vol = vol_tmp2;
vol(vol ~= EC.vol.roi.draw(i)) = 0;
vol(vol == EC.vol.roi.draw(i)) = 1;
if EC.vol.roi.smooth == 1
% vol = smooth3(vol,'gaussian');
if EC.vol.roi.smooth_kernal == 1
vol = smooth3(vol);
else
vol = smooth3(vol,'gaussian');
end
% vol = smooth3(vol);
end
fv{i,1} = isosurface(vol);
while size(fv{i,1}.vertices,1) == 0 %% Added by Mingrui Xia, expand ROI while it is too small
if EC.vol.roi.smooth_kernal == 1
vol = smooth3(vol);
else
vol = smooth3(vol,'gaussian');
end% Modified by Mingrui Xia 20160921, using Gaussian kernel instead of the 'box' kernel
vol(vol>0) = 1;
fv{i,1} = isosurface(vol);
end
coord = fv{i,1}.vertices(:,1);
fv{i,1}.vertices(:,1) = fv{i,1}.vertices(:,2);
fv{i,1}.vertices(:,2) = coord;
fv{i,1}.vertices = fv{i,1}.vertices';
fv{i,1}.vertices(4,:) = 1;
fv{i,1}.vertices = surf.hdr.mat * fv{i,1}.vertices;
fv{i,1}.vertices(4,:) = [];
fv{i,1}.vertices = fv{i,1}.vertices';
clear coord
% if length(find(fv{i,1}.vertices(:,1) < 0)) > length(fv{i,1}.vertices(:,1))/2
% Edited by Mingrui Xia, 20160324, modify the methods for judging if
% the ROI belongs to left or right side.
if (min(fv{i,1}.vertices(:,1)) + max(fv{i,1}.vertices(:,1))) < 0
fv{i,1}.side = 1;
else
fv{i,1}.side = 2;
end
end
function [ncyl,cylinder]=Nettrans(net,t)
% Modified by Mingrui, 20170309, draw two edges for bidirected edges
global EC
global surf
switch EC.edg.draw_abs
case 0
temp=net;
case 1
temp=abs(net);
end
temp = temp - diag(diag(temp));
if nargin == 2
temp(temp < t) = 0;
end
if EC.edg.directed == 0
index = find(triu(temp) ~= 0); % Eddited by Mingrui Xia, 20120702, fix a drawall bug.
% cylinder(:,7) = 1;
else % Add by Mingrui Xia, 20120621, draw directed network.
index = find(temp ~= 0);
%
% temp(temp < t) = 0;
% net_up = triu(temp);
% net_low = tril(temp);
% net_conj = net_low';
% net_conj(net_up == 0) = 0;
% net_conj(net_conj ~= 0) = (net_up(net_conj ~= 0) + net_conj(net_conj ~= 0)) / 2;
% ind = find(net_conj ~= 0);
% cylinder1 = zeros(length(ind),4);
% [cylinder1(:,1),cylinder1(:,2)]=ind2sub(size(net),ind);
% cylinder1(:,3) = net(ind);
% cylinder1(:,7) = 2;
%
% net_conj = net_conj + net_conj';
% temp(net_conj ~= 0) = 0;
% ind = find(temp ~= 0);
% cylinder2 = zeros(length(ind),4);
% [cylinder2(:,2),cylinder2(:,1)]=ind2sub(size(net),ind);
% cylinder2(:,3) = net(ind);
% cylinder2(:,7) = 1;
%
% cylinder = [cylinder1',cylinder2']';
% ncyl = size(cylinder,1);
end
ncyl = length(index);
cylinder = zeros(ncyl,6);
[cylinder(:,1),cylinder(:,2)]=ind2sub(size(net),index);
cylinder(:,3) = net(index);
% Add by Mingrui Xia, 20120109, draw inter hemisphere edges.
if EC.edg.interhemiedges == 1
index = surf.sphere(cylinder(:,1)).*surf.sphere(cylinder(:,2))>0;
cylinder(index,:) = [];
ncyl=size(cylinder,1);
end
function [t,tl,tr,vl,vr,h1,w1,cut,cuv]=CutMesh(surf)
t=size(surf.tri,1);
v=size(surf.coord,2);
tmax=max(surf.tri,[],2);
tmin=min(surf.tri,[],2);
if min(tmin(t/2+1:t))-max(tmax(1:ceil(t/2)))==1
cut=t/2;
cuv=v/2;
else
for i=1:t-1
tmax(i+1)=max(tmax(i+1),tmax(i));
tmin(t-i)=min(tmin(t-i),tmin(t-i+1));
end
cut=min([find((tmin(2:t)-tmax(1:t-1))==1, 1 ) t]); %%% Edited by Mingrui, 20120320, fix a bug.
cuv=tmax(cut);
end
tl=1:cut;
tr=(cut+1):t;
vl=1:cuv;
vr=(cuv+1):v;
h=0.39;
r=max(surf.coord,[],2)-min(surf.coord,[],2);
w1=h/r(2)*r(1)*3/4;
h1=h/r(2)*r(1);
function w1=NoMeshPage(surf)
h=0.39;
r=max(surf.sphere,[],1)-min(surf.sphere,[],1)*2;
w1=h/r(2)*r(1)*3/4;
function Viewer=GenerateView8(h1,w1)
Viewer(1,:)=[0.055,0.62,0.2925,0.4,-90,0];
Viewer(2,:)=[0.3,0.58,0.4,0.39,0,90];
Viewer(3,:)=[0.6525,0.62,0.2925,0.4,90,0];
Viewer(4,:)=[0.055,0.29,0.2925,0.4,90,0];
Viewer(5,:)=[0.3,0.18,0.4,0.39,0,-90];
Viewer(6,:)=[0.6525,0.29,0.2925,0.4,-90,0];
Viewer(7,:)=[0.055,0.02,w1,h1,180,0];
Viewer(8,:)=[0.945-w1,0.02,w1,h1,0,0];
function Viewer=GenerateView6(w1)
% Viewer(1,:)=[0.05,0.58,0.34,0.4,-90,0];
% Viewer(2,:)=[0.4,0.58,0.2,0.39,0,90];
% Viewer(3,:)=[0.61,0.58,0.34,0.4,180,0];
% Viewer(4,:)=[0.05,0.15,0.34,0.4,90,0];
% Viewer(5,:)=[0.4,0.15,0.2,0.39,0,-90];
% Viewer(6,:)=[0.61,0.15,0.34,0.4,0,0];
Viewer(1,:)=[0.055,0.58,0.2925,0.4,-90,0];
Viewer(2,:)=[0.35,0.58,0.3,0.39,0,90];
Viewer(3,:)=[0.6525,0.58,0.2925,0.4,90,0];
Viewer(4,:)=[0.055,0.15,0.2925,0.4,90,0];
Viewer(5,:)=[0.35,0.15,0.3,0.39,0,-90];
Viewer(6,:)=[0.6525,0.15,0.2925,0.4,-90,0];
function Viewer=GenerateView4
% YAN Chao-Gan 111023 Added. For Medium View (4 views)
Viewer(1,:)=[0.045,0.45,0.4387,0.6,-90,0];
Viewer(2,:)=[0.52,0.45,0.4387,0.6,90,0];
Viewer(3,:)=[0.045,-0.01,0.4387,0.6,90,0];
Viewer(4,:)=[0.52,-0.01,0.4387,0.6,-90,0];
function Viewer=GenerateView4v
% Lijie Huang 130221 Added. For Medium View (4 views) and 2 Ventral Views
Viewer(1,:)=[0.045,0.6,0.4387,0.36,-90,0];
Viewer(2,:)=[0.52,0.6,0.4387,0.36,90,0];
Viewer(3,:)=[0.045,0.23,0.4387,0.36,90,0];
Viewer(4,:)=[0.52,0.23,0.4387,0.36,-90,0];
Viewer(5,:)=[0.045,0.03,0.4387,0.18,-90,-90];
Viewer(6,:)=[0.52,0.03,0.4387,0.18,90,-90];
function Viewer = GenerateView5
% Added by Mingrui, 20170309, add layout for lateral, medial and dorsal view
Viewer(1,:) = [0.055,0.5,0.2925,0.4,-90,0];
Viewer(2,:) = [0.3,0.29,0.4,0.39,0,90];
Viewer(3,:) = [0.6525,0.5,0.2925,0.4,90,0];
Viewer(4,:) = [0.055,0.145,0.2925,0.4,90,0];
Viewer(5,:) = [0.6525,0.145,0.2925,0.4,-90,0];
function Surfmatrix=GenertateSurfM8(surf,tl,tr,vl,vr,cuv)
global EC
Surfmatrix.tri{1}=surf.tri(tl,:);
Surfmatrix.tri{2}=surf.tri;
Surfmatrix.tri{3}=surf.tri(tr,:)-cuv;
Surfmatrix.tri{4}=surf.tri(tl,:);
Surfmatrix.tri{5}=surf.tri;
Surfmatrix.tri{6}=surf.tri(tr,:)-cuv;
Surfmatrix.tri{7}=surf.tri;
Surfmatrix.tri{8}=surf.tri;
Surfmatrix.coord{1}=[surf.coord(1,vl)',surf.coord(2,vl)',surf.coord(3,vl)'];
Surfmatrix.coord{2}=[surf.coord(1,:)',surf.coord(2,:)',surf.coord(3,:)'];
Surfmatrix.coord{3}=[surf.coord(1,vr)',surf.coord(2,vr)',surf.coord(3,vr)'];
Surfmatrix.coord{4}=[surf.coord(1,vl)',surf.coord(2,vl)',surf.coord(3,vl)'];
Surfmatrix.coord{5}=[surf.coord(1,:)',surf.coord(2,:)',surf.coord(3,:)'];
Surfmatrix.coord{6}=[surf.coord(1,vr)',surf.coord(2,vr)',surf.coord(3,vr)'];
Surfmatrix.coord{7}=[surf.coord(1,:)',surf.coord(2,:)',surf.coord(3,:)'];
Surfmatrix.coord{8}=[surf.coord(1,:)',surf.coord(2,:)',surf.coord(3,:)'];
if isfield(surf,'T')
Surfmatrix.T{1}=surf.T(vl);
Surfmatrix.T{2}=surf.T;
Surfmatrix.T{3}=surf.T(vr);
Surfmatrix.T{4}=surf.T(vl);
Surfmatrix.T{5}=surf.T;
Surfmatrix.T{6}=surf.T(vr);
Surfmatrix.T{7}=surf.T;
Surfmatrix.T{8}=surf.T;
end
if isfield(surf,'boundary_value')
Surfmatrix.boundary_value{1}=surf.boundary_value(vl);
Surfmatrix.boundary_value{2}=surf.boundary_value;
Surfmatrix.boundary_value{3}=surf.boundary_value(vr);
Surfmatrix.boundary_value{4}=surf.boundary_value(vl);
Surfmatrix.boundary_value{5}=surf.boundary_value;
Surfmatrix.boundary_value{6}=surf.boundary_value(vr);
Surfmatrix.boundary_value{7}=surf.boundary_value;
Surfmatrix.boundary_value{8}=surf.boundary_value;
end
if EC.msh.color_type == 2
Surfmatrix.color_table{1} = EC.msh.color_table(vl,:);
Surfmatrix.color_table{2} = EC.msh.color_table;
Surfmatrix.color_table{3} = EC.msh.color_table(vr,:);
Surfmatrix.color_table{4} = EC.msh.color_table(vl,:);
Surfmatrix.color_table{5} = EC.msh.color_table;
Surfmatrix.color_table{6} = EC.msh.color_table(vr,:);
Surfmatrix.color_table{7} = EC.msh.color_table;
Surfmatrix.color_table{8} = EC.msh.color_table;
end
function Surfmatrix=GenertateSurfM4(surf,tl,tr,vl,vr,cuv)
% YAN Chao-Gan 111023 Added. For Medium View (4 views)
global EC
Surfmatrix.tri{1}=surf.tri(tl,:);
Surfmatrix.tri{2}=surf.tri(tr,:)-cuv;
Surfmatrix.tri{3}=surf.tri(tl,:);
Surfmatrix.tri{4}=surf.tri(tr,:)-cuv;
Surfmatrix.coord{1}=[surf.coord(1,vl)',surf.coord(2,vl)',surf.coord(3,vl)'];
Surfmatrix.coord{2}=[surf.coord(1,vr)',surf.coord(2,vr)',surf.coord(3,vr)'];
Surfmatrix.coord{3}=[surf.coord(1,vl)',surf.coord(2,vl)',surf.coord(3,vl)'];
Surfmatrix.coord{4}=[surf.coord(1,vr)',surf.coord(2,vr)',surf.coord(3,vr)'];
if isfield(surf,'T')
Surfmatrix.T{1}=surf.T(vl);
Surfmatrix.T{2}=surf.T(vr);
Surfmatrix.T{3}=surf.T(vl);
Surfmatrix.T{4}=surf.T(vr);
end
if isfield(surf,'boundary_value')
Surfmatrix.boundary_value{1}=surf.boundary_value(vl);
Surfmatrix.boundary_value{2}=surf.boundary_value(vr);
Surfmatrix.boundary_value{3}=surf.boundary_value(vl);
Surfmatrix.boundary_value{4}=surf.boundary_value(vr);
end
if EC.msh.color_type == 2
Surfmatrix.color_table{1} = EC.msh.color_table(vl,:);
Surfmatrix.color_table{2} = EC.msh.color_table(vr,:);
Surfmatrix.color_table{3} = EC.msh.color_table(vl,:);
Surfmatrix.color_table{4} = EC.msh.color_table(vr,:);
end
function Surfmatrix=GenertateSurfM4v(surf,tl,tr,vl,vr,cuv)
% Lijie Huang 130221 Added. For Medium View (4 views) and 2 ventral views
global EC
Surfmatrix.tri{1}=surf.tri(tl,:);
Surfmatrix.tri{2}=surf.tri(tr,:)-cuv;
Surfmatrix.tri{3}=surf.tri(tl,:);
Surfmatrix.tri{4}=surf.tri(tr,:)-cuv;
Surfmatrix.tri{5}=surf.tri(tl,:);
Surfmatrix.tri{6}=surf.tri(tr,:)-cuv;
Surfmatrix.coord{1}=[surf.coord(1,vl)',surf.coord(2,vl)',surf.coord(3,vl)'];
Surfmatrix.coord{2}=[surf.coord(1,vr)',surf.coord(2,vr)',surf.coord(3,vr)'];
Surfmatrix.coord{3}=[surf.coord(1,vl)',surf.coord(2,vl)',surf.coord(3,vl)'];
Surfmatrix.coord{4}=[surf.coord(1,vr)',surf.coord(2,vr)',surf.coord(3,vr)'];
Surfmatrix.coord{5}=[surf.coord(1,vl)',surf.coord(2,vl)',surf.coord(3,vl)'];
Surfmatrix.coord{6}=[surf.coord(1,vr)',surf.coord(2,vr)',surf.coord(3,vr)'];
if isfield(surf,'T')
Surfmatrix.T{1}=surf.T(vl);
Surfmatrix.T{2}=surf.T(vr);
Surfmatrix.T{3}=surf.T(vl);
Surfmatrix.T{4}=surf.T(vr);
Surfmatrix.T{5}=surf.T(vl);
Surfmatrix.T{6}=surf.T(vr);
end
if isfield(surf,'boundary_value')
Surfmatrix.boundary_value{1}=surf.boundary_value(vl);
Surfmatrix.boundary_value{2}=surf.boundary_value(vr);
Surfmatrix.boundary_value{3}=surf.boundary_value(vl);
Surfmatrix.boundary_value{4}=surf.boundary_value(vr);
Surfmatrix.boundary_value{5}=surf.boundary_value(vl);
Surfmatrix.boundary_value{6}=surf.boundary_value(vr);
end
if EC.msh.color_type == 2
Surfmatrix.color_table{1} = EC.msh.color_table(vl,:);
Surfmatrix.color_table{2} = EC.msh.color_table(vr,:);
Surfmatrix.color_table{3} = EC.msh.color_table(vl,:);
Surfmatrix.color_table{4} = EC.msh.color_table(vr,:);
Surfmatrix.color_table{5} = EC.msh.color_table(vl,:);
Surfmatrix.color_table{6} = EC.msh.color_table(vr,:);
end
function Surfmatrix = GenertateSurfM5(surf,tl,tr,vl,vr,cuv)
% Added by Mingrui, 20170309, add layout for lateral, medial and dorsal view
global EC
Surfmatrix.tri{1} = surf.tri(tl,:);
Surfmatrix.tri{2} = surf.tri;
Surfmatrix.tri{3} = surf.tri(tr,:)-cuv;
Surfmatrix.tri{4} = surf.tri(tl,:);
Surfmatrix.tri{5} = surf.tri(tr,:)-cuv;
Surfmatrix.coord{1} = [surf.coord(1,vl)',surf.coord(2,vl)',surf.coord(3,vl)'];
Surfmatrix.coord{2} = [surf.coord(1,:)',surf.coord(2,:)',surf.coord(3,:)'];
Surfmatrix.coord{3} = [surf.coord(1,vr)',surf.coord(2,vr)',surf.coord(3,vr)'];
Surfmatrix.coord{4} = [surf.coord(1,vl)',surf.coord(2,vl)',surf.coord(3,vl)'];
Surfmatrix.coord{5} = [surf.coord(1,vr)',surf.coord(2,vr)',surf.coord(3,vr)'];
if isfield(surf,'T')
Surfmatrix.T{1} = surf.T(vl);
Surfmatrix.T{2} = surf.T;
Surfmatrix.T{3} = surf.T(vr);
Surfmatrix.T{4} = surf.T(vl);
Surfmatrix.T{5} = surf.T(vr);
end
if isfield(surf,'boundary_value')
Surfmatrix.boundary_value{1}=surf.boundary_value(vl);
Surfmatrix.boundary_value{2}=surf.boundary_value;
Surfmatrix.boundary_value{3}=surf.boundary_value(vr);
Surfmatrix.boundary_value{4}=surf.boundary_value(vl);
Surfmatrix.boundary_value{5}=surf.boundary_value(vr);
end
if EC.msh.color_type == 2
Surfmatrix.color_table{1} = EC.msh.color_table(vl,:);
Surfmatrix.color_table{2} = EC.msh.color_table;
Surfmatrix.color_table{3} = EC.msh.color_table(vr,:);
Surfmatrix.color_table{4} = EC.msh.color_table(vl,:);
Surfmatrix.color_table{5} = EC.msh.color_table(vr,:);
end
function a=PlotMesh4(Viewer,Surfmatrix,alpha)
% Mingrui Xia 111026 Added. For Medium View (4 views)
global EC
global cam
a=zeros(1,4);
for i=1:4
a(i)=axes('position',Viewer(i,1:4));
Brain=trisurf(Surfmatrix.tri{i},Surfmatrix.coord{i}(:,1),Surfmatrix.coord{i}(:,2),Surfmatrix.coord{i}(:,3),'EdgeColor','none');
view(Viewer(i,5:6));
daspect([1 1 1]);
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
eval(['lighting ',EC.glb.lighting,';']); eval(['material ',EC.glb.material,';']);eval(['shading ',EC.glb.shading,';']);axis off
set(Brain,'FaceColor',EC.msh.color);
set(Brain,'FaceAlpha',EC.msh.alpha);
if EC.msh.color_type == 2
Brain.FaceColor = 'flat';
Brain.FaceVertexCData = Surfmatrix.color_table{i};
end
if EC.msh.boundary == 4
Brain.FaceColor = 'flat';
if EC.msh.color_type == 1
Brain.FaceVertexCData = repmat(EC.msh.color,length(Surfmatrix.boundary_value{i}),1);
else
Brain.FaceVertexCData = Surfmatrix.color_table{i};
end
Brain.FaceVertexCData(Surfmatrix.boundary_value{i} == 1,:) = repmat(EC.msh.boundary_color,sum(Surfmatrix.boundary_value{i}),1);
end
if alpha~=1
eval(['lighting ',EC.glb.lighting,';']);axis tight; axis vis3d off;
cam(i) = camlight(EC.glb.lightdirection);
end
if EC.glb.lr == 1
switch i
case 1
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'L','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
case 2
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'R','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
end
end
end
function a=PlotMesh4v(Viewer,Surfmatrix,alpha)
% Mingrui Xia 111026 Added. For Medium View (4 views)
global EC
global cam
a=zeros(1,6);
for i=1:6
a(i)=axes('position',Viewer(i,1:4));
Brain=trisurf(Surfmatrix.tri{i},Surfmatrix.coord{i}(:,1),Surfmatrix.coord{i}(:,2),Surfmatrix.coord{i}(:,3),'EdgeColor','none');
view(Viewer(i,5:6));
daspect([1 1 1]);
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
eval(['lighting ',EC.glb.lighting,';']); eval(['material ',EC.glb.material,';']);eval(['shading ',EC.glb.shading,';']);axis off
set(Brain,'FaceColor',EC.msh.color);
set(Brain,'FaceAlpha',EC.msh.alpha);
if EC.msh.color_type == 2
Brain.FaceColor = 'flat';
Brain.FaceVertexCData = Surfmatrix.color_table{i};
end
if EC.msh.boundary == 4
Brain.FaceColor = 'flat';
if EC.msh.color_type == 1
Brain.FaceVertexCData = repmat(EC.msh.color,length(Surfmatrix.boundary_value{i}),1);
else
Brain.FaceVertexCData = Surfmatrix.color_table{i};
end
Brain.FaceVertexCData(Surfmatrix.boundary_value{i} == 1,:) = repmat(EC.msh.boundary_color,sum(Surfmatrix.boundary_value{i}),1);
end
if alpha~=1
eval(['lighting ',EC.glb.lighting,';']);axis tight; axis vis3d off;
cam(i) = camlight(EC.glb.lightdirection);
end
if EC.glb.lr == 1
switch i
case 1
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'L','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
case 2
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'R','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
end
end
end
function a=PlotMesh8(Viewer,Surfmatrix,alpha)
global EC
global cam
a=zeros(1,8);
for i=1:8
a(i)=axes('position',Viewer(i,1:4));
Brain=trisurf(Surfmatrix.tri{i},Surfmatrix.coord{i}(:,1),Surfmatrix.coord{i}(:,2),Surfmatrix.coord{i}(:,3),'EdgeColor','none');
view(Viewer(i,5:6));
daspect([1 1 1]);
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
eval(['lighting ',EC.glb.lighting,';']); eval(['material ',EC.glb.material,';']); eval(['shading ',EC.glb.shading,';']);axis off
set(Brain,'FaceColor',EC.msh.color);
set(Brain,'FaceAlpha',EC.msh.alpha);
if EC.msh.color_type == 2
Brain.FaceColor = 'flat';
Brain.FaceVertexCData = Surfmatrix.color_table{i};
end
if EC.msh.boundary == 4
Brain.FaceColor = 'flat';
if EC.msh.color_type == 1
Brain.FaceVertexCData = repmat(EC.msh.color,length(Surfmatrix.boundary_value{i}),1);
else
Brain.FaceVertexCData = Surfmatrix.color_table{i};
end
Brain.FaceVertexCData(Surfmatrix.boundary_value{i} == 1,:) = repmat(EC.msh.boundary_color,sum(Surfmatrix.boundary_value{i}),1);
end
if alpha~=1
eval(['lighting ',EC.glb.lighting,';']);axis tight; axis vis3d off;
cam(i) = camlight(EC.glb.lightdirection);
end
if EC.glb.lr == 1
switch i
case 1
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'L','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
case 3
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'R','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
end
end
end
function a=PlotMesh6(Viewer,surf,alpha)
global EC
global cam
a=zeros(1,6);
for i=1:6
a(i)=axes('position',Viewer(i,1:4));
Brain=trisurf(surf.tri,surf.coord(1,:),surf.coord(2,:),surf.coord(3,:),'EdgeColor','none');
view(Viewer(i,5:6));
daspect([1 1 1]);
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
eval(['lighting ',EC.glb.lighting,';']);eval(['material ',EC.glb.material,';']); eval(['shading ',EC.glb.shading,';']);axis off
set(Brain,'FaceColor',EC.msh.color);
set(Brain,'FaceAlpha',EC.msh.alpha);
if EC.msh.color_type == 2
Brain.FaceColor = 'flat';
Brain.FaceVertexCData = EC.msh.color_table;
end
if EC.msh.boundary == 4
Brain.FaceColor = 'flat';
if EC.msh.color_type == 1
Brain.FaceVertexCData = repmat(EC.msh.color,surf.vertex_number,1);
else
Brain.FaceVertexCData = EC.msh.color_table;
end
Brain.FaceVertexCData(surf.boundary_value == 1,:) = repmat(EC.msh.boundary_color,sum(surf.boundary_value),1);
end
if alpha~=1
axis tight; eval(['lighting ',EC.glb.lighting,';']);axis vis3d off;
cam(i) = camlight(EC.glb.lightdirection);
end
end
function a=PlotMesh1(surf,alpha)
global EC
global cam
% a = axes('position',[0.03,0.03,0.94,0.94]);
a = axes;
Brain=trisurf(surf.tri,surf.coord(1,:),surf.coord(2,:),surf.coord(3,:),'EdgeColor','none');
if EC.msh.doublebrain == 1 % Added by Mingrui Xia, 20120717, show two brains in one figure
hold on
Brain2 = trisurf(surf.tri,surf.coord2(1,:),surf.coord2(2,:),surf.coord2(3,:),'EdgeColor','none');
hold off
end
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
eval(['material ',EC.glb.material,';']);
% material([0.1 0.9 0.2 23,0.1]);
eval(['shading ',EC.glb.shading,';']);axis off
set(Brain,'FaceColor',EC.msh.color);
set(Brain,'FaceAlpha',EC.msh.alpha);
if EC.msh.color_type == 2
Brain.FaceColor = 'flat';
Brain.FaceVertexCData = EC.msh.color_table;
end
if EC.msh.boundary == 4
Brain.FaceColor = 'flat';
if EC.msh.color_type == 1
Brain.FaceVertexCData = repmat(EC.msh.color,surf.vertex_number,1);
else
Brain.FaceVertexCData = EC.msh.color_table;
end
Brain.FaceVertexCData(surf.boundary_value == 1,:) = repmat(EC.msh.boundary_color,sum(surf.boundary_value),1);
end
if EC.msh.doublebrain == 1 % Added by Mingrui Xia, 20120717, show two brains in one figure
set(Brain2,'FaceColor',EC.msh.color);
set(Brain2,'FaceAlpha',EC.msh.alpha);
if EC.msh.boundary == 4
Brain2.FaceColor = 'flat';
Brain2.FaceVertexCData = repmat(EC.msh.color,surf.vertex_number,1);
Brain2.FaceVertexCData(surf.boundary_value == 1,:) = repmat(EC.msh.boundary_color,sum(surf.boundary_value),1);
end
end
daspect([1 1 1])
% Edited by Mingrui Xia, 20120806, add custom view for single brain.
switch EC.lot.view_direction
case 1
view(-90,0);
case 2
view(0,90);
case 3
view(180,0);
case 4
view(EC.lot.view_az,EC.lot.view_el);
end
if alpha~=1
axis tight; axis vis3d off;eval(['lighting ',EC.glb.lighting,';']);
cam = camlight(EC.glb.lightdirection);
end
function a = PlotMesh5(Viewer,Surfmatrix,alpha)
% Added by Mingrui, 20170309, add layout for lateral, medial and dorsal view
global EC
global cam
a = zeros(1,5);
for i = 1:5
a(i) = axes('position',Viewer(i,1:4));
Brain = trisurf(Surfmatrix.tri{i},Surfmatrix.coord{i}(:,1),Surfmatrix.coord{i}(:,2),Surfmatrix.coord{i}(:,3),'EdgeColor','none');
view(Viewer(i,5:6));
daspect([1 1 1]);
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
eval(['lighting ',EC.glb.lighting,';']); eval(['material ',EC.glb.material,';']); eval(['shading ',EC.glb.shading,';']);axis off
set(Brain,'FaceColor',EC.msh.color);
set(Brain,'FaceAlpha',EC.msh.alpha);
if EC.msh.boundary == 4
Brain.FaceColor = 'flat';
Brain.FaceVertexCData = repmat(EC.msh.color,length(Surfmatrix.boundary_value{i}),1);
Brain.FaceVertexCData(Surfmatrix.boundary_value{i} == 1,:) = repmat(EC.msh.boundary_color,sum(Surfmatrix.boundary_value{i}),1);
end
if alpha~=1
eval(['lighting ',EC.glb.lighting,';']);axis tight; axis vis3d off;
cam(i) = camlight(EC.glb.lightdirection);
end
if EC.glb.lr == 1
switch i
case 1
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'L','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
case 3
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'R','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
end
end
end
function a = PlotROI1(fv,a,alpha)
% Added by Mingrui, 20120529, DrawROI
global EC
global cam
hold on
% axis manual
for i = 1:length(fv)
roi = trisurf(fv{i,1}.faces,fv{i,1}.vertices(:,1),fv{i,1}.vertices(:,2),fv{i,1}.vertices(:,3),'EdgeColor','none');
set(roi,'FaceColor',EC.vol.roi.color(i,:));
% set(roi,'FaceAlpha',20);
end
hold off
if alpha ~= 1
axis tight;
axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam = camlight(EC.glb.lightdirection);
end
function a = PlotROI8(fv,a,alpha)
% Added by Mingrui, 20120529, DrawROI
global EC
global cam
for j = 1:8
axes(a(j));
switch j
case {1,4}
hold on
for i = 1:length(fv)
if fv{i,1}.side == 1
roi = trisurf(fv{i,1}.faces,fv{i,1}.vertices(:,1),fv{i,1}.vertices(:,2),fv{i,1}.vertices(:,3),'EdgeColor','none');
set(roi,'FaceColor',EC.vol.roi.color(i,:));
end
end
hold off
case {2,5,7,8}
hold on
for i = 1:length(fv)
roi = trisurf(fv{i,1}.faces,fv{i,1}.vertices(:,1),fv{i,1}.vertices(:,2),fv{i,1}.vertices(:,3),'EdgeColor','none');
set(roi,'FaceColor',EC.vol.roi.color(i,:));
end
hold off
case{3,6}
hold on
for i = 1:length(fv)
if fv{i,1}.side == 2
roi = trisurf(fv{i,1}.faces,fv{i,1}.vertices(:,1),fv{i,1}.vertices(:,2),fv{i,1}.vertices(:,3),'EdgeColor','none');
set(roi,'FaceColor',EC.vol.roi.color(i,:));
end
end
hold off
end
if alpha ~= 1
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(j) = camlight(EC.glb.lightdirection);
end
end
function a = PlotROI6(fv,a,alpha)
% Added by Mingrui, 20120529, DrawROI
global EC
global cam
for j = 1:6
axes(a(j));
hold on
for i = 1:length(fv)
roi = trisurf(fv{i,1}.faces,fv{i,1}.vertices(:,1),fv{i,1}.vertices(:,2),fv{i,1}.vertices(:,3),'EdgeColor','none');
set(roi,'FaceColor',EC.vol.roi.color(i,:));
end
hold off
if alpha ~= 1
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(j) = camlight(EC.glb.lightdirection);
end
end
function a = PlotROI4(fv,a,alpha)
global EC
global cam
for j = 1:4
axes(a(j));
switch j
case {1,3}
hold on
for i = 1:length(fv)
if fv{i,1}.side == 1
roi = trisurf(fv{i,1}.faces,fv{i,1}.vertices(:,1),fv{i,1}.vertices(:,2),fv{i,1}.vertices(:,3),'EdgeColor','none');
set(roi,'FaceColor',EC.vol.roi.color(i,:));
end
end
hold off
case{2,4}
hold on
for i = 1:length(fv)
if fv{i,1}.side == 2
roi = trisurf(fv{i,1}.faces,fv{i,1}.vertices(:,1),fv{i,1}.vertices(:,2),fv{i,1}.vertices(:,3),'EdgeColor','none');
set(roi,'FaceColor',EC.vol.roi.color(i,:));
end
end
hold off
end
if alpha ~= 1
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(j) = camlight(EC.glb.lightdirection);
end
end
function a = PlotROI4v(fv,a,alpha)
global EC
global cam
for j = 1:6
axes(a(j));
switch j
case {1,3, 5}
hold on
for i = 1:length(fv)
if fv{i,1}.side == 1
roi = trisurf(fv{i,1}.faces,fv{i,1}.vertices(:,1),fv{i,1}.vertices(:,2),fv{i,1}.vertices(:,3),'EdgeColor','none');
set(roi,'FaceColor',EC.vol.roi.color(i,:));
end
end
hold off
case{2,4, 6}
hold on
for i = 1:length(fv)
if fv{i,1}.side == 2
roi = trisurf(fv{i,1}.faces,fv{i,1}.vertices(:,1),fv{i,1}.vertices(:,2),fv{i,1}.vertices(:,3),'EdgeColor','none');
set(roi,'FaceColor',EC.vol.roi.color(i,:));
end
end
hold off
end
if alpha ~= 1
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(j) = camlight(EC.glb.lightdirection);
end
end
function a = PlotROI5(fv,a,alpha)
% Added by Mingrui, 20170309, add layout for lateral, medial and dorsal view
global EC
global cam
for j = 1:5
axes(a(j));
switch j
case {1,4}
hold on
for i = 1:length(fv)
if fv{i,1}.side == 1
roi = trisurf(fv{i,1}.faces,fv{i,1}.vertices(:,1),fv{i,1}.vertices(:,2),fv{i,1}.vertices(:,3),'EdgeColor','none');
set(roi,'FaceColor',EC.vol.roi.color(i,:));
end
end
hold off
case {2}
hold on
for i = 1:length(fv)
roi = trisurf(fv{i,1}.faces,fv{i,1}.vertices(:,1),fv{i,1}.vertices(:,2),fv{i,1}.vertices(:,3),'EdgeColor','none');
set(roi,'FaceColor',EC.vol.roi.color(i,:));
end
hold off
case{3,5}
hold on
for i = 1:length(fv)
if fv{i,1}.side == 2
roi = trisurf(fv{i,1}.faces,fv{i,1}.vertices(:,1),fv{i,1}.vertices(:,2),fv{i,1}.vertices(:,3),'EdgeColor','none');
set(roi,'FaceColor',EC.vol.roi.color(i,:));
end
end
hold off
end
if alpha ~= 1
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(j) = camlight(EC.glb.lightdirection);
end
end
function a=MapMesh1(surf,low,high,alpha)
global EC
global cam
a=axes('position',[0.07,0.1,0.8,0.8]);
Brain=trisurf(surf.tri,surf.coord(1,:),surf.coord(2,:),surf.coord(3,:),surf.T,'EdgeColor','none');
% Z = surf.T;
% save('Z.txt','Z','-ascii');
% Edited by Mingrui Xia, 20111116, add translucency show
set(Brain,'FaceAlpha',EC.msh.alpha);
colormap(EC.vol.CM);
caxis([low,high]);
if EC.msh.boundary ~= 1
index = fix((Brain.FaceVertexCData-low)/(high-low)*length(EC.vol.CM))+1;
RGB = squeeze(ind2rgb(index,EC.vol.CM));
RGB(surf.boundary_value == 1,:) = repmat(EC.msh.boundary_color,sum(surf.boundary_value),1);
Brain.FaceVertexCData = RGB;
end
switch EC.lot.view_direction
case 1
view(-90,0);
case 2
view(0,90);
case 3
view(180,0);
case 4
view(EC.lot.view_az,EC.lot.view_el);
end
daspect([1 1 1]);
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
eval(['material ',EC.glb.material,';']);
eval(['shading ',EC.glb.shading,';']);axis off
if alpha~=1
axis tight; eval(['lighting ',EC.glb.lighting,';']); axis vis3d off;
cam= camlight(EC.glb.lightdirection);
end
cb=colorbar('location','East');
set(cb,'Position',[0.9 0.1 0.03 0.3]);
% Modified by Mingrui, 20150115, support matlab 2014b
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'YAxisLocation','right');
set(cb,'YTick',get(cb,'YLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
function a=MapMesh8(Viewer,Surfmatrix,low,high,alpha)
%%% Edited by Mingrui Xia, 20111116, add translucency show
global EC
global cam
a=zeros(1,8);
for i=1:8
a(i)=axes('position',Viewer(i,1:4));
Brain=trisurf(Surfmatrix.tri{i},Surfmatrix.coord{i}(:,1),Surfmatrix.coord{i}(:,2),Surfmatrix.coord{i}(:,3),Surfmatrix.T{i},'EdgeColor','none');
colormap(EC.vol.CM);
set(Brain,'FaceAlpha',EC.msh.alpha);
caxis([low,high])
if EC.msh.boundary ~= 1
index = fix((Brain.FaceVertexCData-low)/(high-low)*length(EC.vol.CM))+1;
RGB = squeeze(ind2rgb(index,EC.vol.CM));
RGB(Surfmatrix.boundary_value{i} == 1,:) = repmat(EC.msh.boundary_color,sum(Surfmatrix.boundary_value{i}),1);
Brain.FaceVertexCData = RGB;
end
view(Viewer(i,5:6));
daspect([1 1 1]);
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
eval(['lighting ',EC.glb.lighting,';']); eval(['material ',EC.glb.material,';']); eval(['shading ',EC.glb.shading,';']);axis off
if alpha~=1
eval(['lighting ',EC.glb.lighting,';']);axis tight; axis vis3d off;
cam(i) = camlight(EC.glb.lightdirection);
end
if EC.glb.lr == 1
switch i
case 1
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'L','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
case 3
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'R','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
end
end
end
cb=colorbar('location','South');
set(cb,'Position',[0.35 0.085 0.3 0.03]);
% Modified by Mingrui, 20150115, support matlab 2014b
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
function a=MapMesh4(Viewer,Surfmatrix,low,high,alpha)
% YAN Chao-Gan 111023 Added. For Medium View (4 views)
%%% Edited by Mingrui Xia, 20111116, add translucency show
global EC
global cam
a=zeros(1,4);
for i=1:4
a(i)=axes('position',Viewer(i,1:4));
Brain=trisurf(Surfmatrix.tri{i},Surfmatrix.coord{i}(:,1),Surfmatrix.coord{i}(:,2),Surfmatrix.coord{i}(:,3),Surfmatrix.T{i},'EdgeColor','none');
set(Brain,'FaceAlpha',EC.msh.alpha);
colormap(EC.vol.CM);
caxis([low,high])
if EC.msh.boundary ~= 1
index = fix((Brain.FaceVertexCData-low)/(high-low)*length(EC.vol.CM))+1;
RGB = squeeze(ind2rgb(index,EC.vol.CM));
RGB(Surfmatrix.boundary_value{i} == 1,:) = repmat(EC.msh.boundary_color,sum(Surfmatrix.boundary_value{i}),1);
Brain.FaceVertexCData = RGB;
end
view(Viewer(i,5:6));
daspect([1 1 1]);
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
% eval(['lighting ',EC.glb.lighting,';']);
eval(['material ',EC.glb.material,';']);
eval(['shading ',EC.glb.shading,';']);
axis off
if alpha~=1
axis tight; eval(['lighting ',EC.glb.lighting,';']); axis vis3d off;
cam(i) = camlight(EC.glb.lightdirection);
end
if EC.glb.lr == 1
switch i
case 1
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'L','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
case 2
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'R','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
end
end
end
cb=colorbar('location','South');
set(cb,'Position',[0.4 0.055 0.2 0.03]);
% Modified by Mingrui, 20150115, support matlab 2014b
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
function a=MapMesh4v(Viewer,Surfmatrix,low,high,alpha)
% Lijie Huang 130221 Added. For Medium View (4 views) and 2 ventral views
%%% Edited by Mingrui Xia, 20111116, add translucency show
global EC
global cam
a=zeros(1,6);
for i=1:6
a(i)=axes('position',Viewer(i,1:4));
Brain=trisurf(Surfmatrix.tri{i},Surfmatrix.coord{i}(:,1),Surfmatrix.coord{i}(:,2),Surfmatrix.coord{i}(:,3),Surfmatrix.T{i},'EdgeColor','none');
set(Brain,'FaceAlpha',EC.msh.alpha);
colormap(EC.vol.CM);
caxis([low,high])
if EC.msh.boundary ~= 1
index = fix((Brain.FaceVertexCData-low)/(high-low)*length(EC.vol.CM))+1;
RGB = squeeze(ind2rgb(index,EC.vol.CM));
RGB(Surfmatrix.boundary_value{i} == 1,:) = repmat(EC.msh.boundary_color,sum(Surfmatrix.boundary_value{i}),1);
Brain.FaceVertexCData = RGB;
end
view(Viewer(i,5:6));
daspect([1 1 1]);
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
eval(['lighting ',EC.glb.lighting,';']); eval(['material ',EC.glb.material,';']); eval(['shading ',EC.glb.shading,';']);axis off
if alpha~=1
axis tight; eval(['lighting ',EC.glb.lighting,';']); axis vis3d off;
cam(i) = camlight(EC.glb.lightdirection);
end
if EC.glb.lr == 1
switch i
case 1
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'L','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
case 2
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'R','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
end
end
end
cb=colorbar('location','South');
set(cb,'Position',[0.4 0.6 0.2 0.03]);
% Modified by Mingrui, 20150115, support matlab 2014b
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
function a=MapMesh6(Viewer,surf,low,high,alpha)
%%% Edited by Mingrui Xia, 20111116, add translucency show
global EC
global cam
a=zeros(1,6);
for i=1:6
a(i)=axes('position',Viewer(i,1:4));
Brain=trisurf(surf.tri,surf.coord(1,:),surf.coord(2,:),surf.coord(3,:),surf.T,'EdgeColor','none');
set(Brain,'FaceAlpha',EC.msh.alpha);
view(Viewer(i,5:6));
daspect([1 1 1]);
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
eval(['material ',EC.glb.material,';']); eval(['shading ',EC.glb.shading,';']);axis off
colormap(EC.vol.CM);
caxis([low,high]);
if EC.msh.boundary ~= 1
index = fix((Brain.FaceVertexCData-low)/(high-low)*length(EC.vol.CM))+1;
RGB = squeeze(ind2rgb(index,EC.vol.CM));
RGB(Surfmatrix.boundary_value{i} == 1,:) = repmat(EC.msh.boundary_color,sum(Surfmatrix.boundary_value{i}),1);
Brain.FaceVertexCData = RGB;
end
if alpha~=1
axis tight; eval(['lighting ',EC.glb.lighting,';']); axis vis3d off;
cam(i) = camlight(EC.glb.lightdirection);
end
end
cb=colorbar('location','South');
set(cb,'Position',[0.35 0.085 0.3 0.03]);
% Modified by Mingrui, 20150115, support matlab 2014b
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
function a = MapMesh5(Viewer,Surfmatrix,low,high,alpha)
% Added by Mingrui, 20170309, add layout for lateral, medial and dorsal view
global EC
global cam
a = zeros(1,5);
for i = 1:5
a(i) = axes('position',Viewer(i,1:4));
Brain = trisurf(Surfmatrix.tri{i},Surfmatrix.coord{i}(:,1),Surfmatrix.coord{i}(:,2),Surfmatrix.coord{i}(:,3),Surfmatrix.T{i},'EdgeColor','none');
colormap(EC.vol.CM);
set(Brain,'FaceAlpha',EC.msh.alpha);
caxis([low,high])
if EC.msh.boundary ~= 1
index = fix((Brain.FaceVertexCData-low)/(high-low)*length(EC.vol.CM))+1;
RGB = squeeze(ind2rgb(index,EC.vol.CM));
RGB(Surfmatrix.boundary_value{i} == 1,:) = repmat(EC.msh.boundary_color,sum(Surfmatrix.boundary_value{i}),1);
Brain.FaceVertexCData = RGB;
end
view(Viewer(i,5:6));
daspect([1 1 1]);
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
eval(['lighting ',EC.glb.lighting,';']); eval(['material ',EC.glb.material,';']); eval(['shading ',EC.glb.shading,';']);axis off
if alpha~=1
eval(['lighting ',EC.glb.lighting,';']);axis tight; axis vis3d off;
cam(i) = camlight(EC.glb.lightdirection);
end
if EC.glb.lr == 1
switch i
case 1
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'L','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
case 3
text(0,max(Surfmatrix.coord{i}(:,2)),max(Surfmatrix.coord{i}(:,3)),'R','FontSize',20,'FontWeight','Bold','HorizontalAlignment','center');
end
end
end
cb = colorbar('location','South');
set(cb,'Position',[0.35 0.085 0.3 0.03]);
% Modified by Mingrui, 20150115, support matlab 2014b
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
function a=PlotNode6(Viewer,surf,a,n,EC)
global cam
global FLAG
if length(a)>1
for i=1:6
axes(a(i));
hold on
for j=1:surf.nsph
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,6,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5)>EC.nod.draw_threshold
DrawSphere(surf,j,i,6,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,6,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,6,EC);
end
end
end
if n>1
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(i) = camlight(EC.glb.lightdirection);
end
hold off
end
% Modified by Mingrui 20150603, Add colorbar for nodes
% Modified by Mingrui 20170303, Add fixed color map
% Modified by Mingrui 20170807, Add colorbar for nodes in modular option
% Modified by Mingrui 20181115, Fix a bug in display node color with volume
% mapping
if (EC.nod.color == 2||EC.nod.color == 3)&&(FLAG.Loadfile<4||EC.edg.color~=2)&&(FLAG.Loadfile<8||EC.vol.type~=1)
switch(EC.nod.color)
case 2
tmp = EC.nod.CM;
case 3
tmp = EC.nod.CM(1:length(EC.nod.ModularNumber),:);
end
colormap(tmp);
cb=colorbar('location','South');
if EC.nod.color_map_type == 1
caxis([min(surf.sphere(:,4)),max(surf.sphere(:,4))]);
else
caxis([EC.nod.color_map_low,EC.nod.color_map_high]);
end
set(cb,'Position',[0.35 0.085 0.3 0.03]);
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
end
else
a=zeros(1,6);
for i=1:6
a(i)=axes('position',Viewer(i,1:4));
hold on
view(Viewer(i,5:6));
daspect([1 1 1]);
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
eval(['lighting ',EC.glb.lighting,';']);
for j=1:surf.nsph
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,6,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5)>EC.nod.draw_threshold
DrawSphere(surf,j,i,6,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,6,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,6,EC);
end
end
end
if n>1
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(i) = camlight(EC.glb.lightdirection);
end
hold off
end
% Modified by Mingrui 20150603, Add colorbar for nodes
% Modified by Mingrui 20170807, Add colorbar for nodes in modular option
% Modified by Mingrui 20181115, Fix a bug in display node color with volume
% mapping
if (EC.nod.color == 2||EC.nod.color == 3)&&(FLAG.Loadfile<4||EC.edg.color~=2)&&(FLAG.Loadfile<8||EC.vol.type~=1)
switch(EC.nod.color)
case 2
tmp = EC.nod.CM;
case 3
tmp = EC.nod.CM(1:length(EC.nod.ModularNumber),:);
end
colormap(tmp);
cb=colorbar('location','South');
if EC.nod.color_map_type == 1
caxis([min(surf.sphere(:,4)),max(surf.sphere(:,4))]);
else
caxis([EC.nod.color_map_low,EC.nod.color_map_high]);
end
set(cb,'Position',[0.35 0.085 0.3 0.03]);
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
end
end
function a=PlotNode4(surf, a, flag, centerX, n, EC)
% Mingrui Xia 111026 Added. For Medium View (4 views)
global cam
global FLAG
for i=1:4
axes(a(i));
hold on
switch i
case {1,3}
if flag==1
for j=1:surf.nsph
if surf.sphere(j,1)EC.nod.draw_threshold
DrawSphere(surf,j,i,4,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,4,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,4,EC);
end
end
end
end
else
for j=1:surf.nsph
if surf.sphere(j,1)>centerX
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,4,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5)>EC.nod.draw_threshold
DrawSphere(surf,j,i,4,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,4,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,4,EC);
end
end
end
end
end
case{2,4}
if flag==2
for j=1:surf.nsph
if surf.sphere(j,1)EC.nod.draw_threshold
DrawSphere(surf,j,i,4,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,4,EC);
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,4,EC);
end
end
end
end
end
else
for j=1:surf.nsph
if surf.sphere(j,1)>centerX
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,4,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5)>EC.nod.draw_threshold
DrawSphere(surf,j,i,4,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,4,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,4,EC);
end
end
end
end
end
end
if n>1
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(i) = camlight(EC.glb.lightdirection);
end
hold off
end
% Modified by Mingrui 20150603, Add colorbar for nodes
% Modified by Mingrui 20170807, Add colorbar for nodes in modular option
% Modified by Mingrui 20181115, Fix a bug in display node color with volume
% mapping
if (EC.nod.color == 2||EC.nod.color == 3)&&(FLAG.Loadfile<4||EC.edg.color~=2)&&(FLAG.Loadfile<8||EC.vol.type~=1)
switch(EC.nod.color)
case 2
tmp = EC.nod.CM;
case 3
tmp = EC.nod.CM(1:length(EC.nod.ModularNumber),:);
end
colormap(tmp);
cb=colorbar('location','South');
if EC.nod.color_map_type == 1
caxis([min(surf.sphere(:,4)),max(surf.sphere(:,4))]);
else
caxis([EC.nod.color_map_low,EC.nod.color_map_high]);
end
set(cb,'Position',[0.4 0.055 0.2 0.03]);
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
end
function a=PlotNode4v(surf, a, flag, centerX, n, EC)
% Lijie Huang 130221 Added. For Medium View (4 views) and 2 ventral views
global cam
global FLAG
for i=1:6
axes(a(i));
hold on
switch i
case {1,3,5}
if flag==1
for j=1:surf.nsph
if surf.sphere(j,1)EC.nod.draw_threshold
DrawSphere(surf,j,i,5,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,5,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,5,EC);
end
end
end
end
else
for j=1:surf.nsph
if surf.sphere(j,1)>centerX
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,5,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5)>EC.nod.draw_threshold
DrawSphere(surf,j,i,5,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,5,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,5,EC);
end
end
end
end
end
case{2,4,6}
if flag==2
for j=1:surf.nsph
if surf.sphere(j,1)EC.nod.draw_threshold
DrawSphere(surf,j,i,5,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,5,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,5,EC);
end
end
end
end
else
for j=1:surf.nsph
if surf.sphere(j,1)>centerX
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,5,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5)>EC.nod.draw_threshold
DrawSphere(surf,j,i,5,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,5,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,5,EC);
end
end
end
end
end
end
if n>1
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(i) = camlight(EC.glb.lightdirection);
end
hold off
end
% Modified by Mingrui 20150603, Add colorbar for nodes
% Modified by Mingrui 20170807, Add colorbar for nodes in modular option
% Modified by Mingrui 20181115, Fix a bug in display node color with volume
% mapping
if (EC.nod.color == 2||EC.nod.color == 3)&&(FLAG.Loadfile<4||EC.edg.color~=2)&&(FLAG.Loadfile<8||EC.vol.type~=1)
switch(EC.nod.color)
case 2
tmp = EC.nod.CM;
case 3
tmp = EC.nod.CM(1:length(EC.nod.ModularNumber),:);
end
colormap(tmp);
cb=colorbar('location','South');
if EC.nod.color_map_type == 1
caxis([min(surf.sphere(:,4)),max(surf.sphere(:,4))]);
else
caxis([EC.nod.color_map_low,EC.nod.color_map_high]);
end
set(cb,'Position',[0.4 0.6 0.2 0.03]);
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
end
function a=PlotNode1(surf,a,n,EC)
global cam
global FLAG
if ~isempty(a)
axes(a);
hold on
for j=1:surf.nsph
switch EC.nod.draw
case 1
DrawSphere(surf,j,2,1,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5)>EC.nod.draw_threshold
DrawSphere(surf,j,2,1,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,2,1,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,2,1,EC);
end
end
end
% Modified by Mingrui 20150603, Add colorbar for nodes
% Modified by Mingrui 20170807, Add colorbar for nodes in modular option
% Modified by Mingrui 20181115, Fix a bug in display node color with volume
% mapping
if (EC.nod.color == 2||EC.nod.color == 3)&&(FLAG.Loadfile<4||EC.edg.color~=2)&&(FLAG.Loadfile<8||EC.vol.type~=1)
switch(EC.nod.color)
case 2
tmp = EC.nod.CM;
case 3
tmp = EC.nod.CM(1:length(EC.nod.ModularNumber),:);
end
colormap(tmp);
cb=colorbar('location','eastoutside');
if EC.nod.color_map_type == 1
caxis([min(surf.sphere(:,4)),max(surf.sphere(:,4))]);
else
caxis([EC.nod.color_map_low,EC.nod.color_map_high]);
end
set(cb,'Position',[0.95 0.1 0.03 0.3]); %%adjusted by Mingrui 20220605, to avoid overlap with brain mesh
% set(gca, 'FontSize', 30);
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'YAxisLocation','right');
set(cb,'YTick',get(cb,'YLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
end
hold off
if n>1
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam = camlight(EC.glb.lightdirection);
end
else
a=axes;
hold on
daspect([1 1 1]);
% Edited by Mingrui Xia, 20120806, add custom view for single brain.
switch EC.lot.view_direction
case 1
view(-90,0);
case 2
view(0,90);
case 3
view(180,0);
case 4
view(EC.lot.view_az,EC.lot.view_el);
end
whitebg(gcf,EC.bak.color);
set(gcf,'Color',EC.bak.color,'InvertHardcopy','off');
eval(['lighting ',EC.glb.lighting,';']);
for j=1:surf.nsph
switch EC.nod.draw
case 1
DrawSphere(surf,j,2,1,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5)>EC.nod.draw_threshold
DrawSphere(surf,j,2,1,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,2,1,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,2,1,EC);
end
end
end
if n>1
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam = camlight(EC.glb.lightdirection);
end
% Modified by Mingrui 20150603, Add colorbar for nodes
% Modified by Mingrui 20170807, Add colorbar for nodes in modular option
% Modified by Mingrui 20181115, Fix a bug in display node color with volume
% mapping
if (EC.nod.color == 2||EC.nod.color == 3)&&(FLAG.Loadfile<4||EC.edg.color~=2)&&(FLAG.Loadfile<8||EC.vol.type~=1)
switch(EC.nod.color)
case 2
tmp = EC.nod.CM;
case 3
tmp = EC.nod.CM(1:length(EC.nod.ModularNumber),:);
end
colormap(tmp);
cb=colorbar('location','East');
if EC.nod.color_map_type == 1
caxis([min(surf.sphere(:,4)),max(surf.sphere(:,4))]);
else
caxis([EC.nod.color_map_low,EC.nod.color_map_high]);
end
set(cb,'Position',[0.9 0.1 0.03 0.3]);
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'YAxisLocation','right');
set(cb,'YTick',get(cb,'YLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
end
hold off
end
function PlotNode8(surf,a,flag,centerX,n,EC)
global cam
global FLAG
for i=1:8
axes(a(i));
hold on
switch i
case {1,4}
if flag==1
for j=1:surf.nsph
if surf.sphere(j,1)EC.nod.draw_threshold
DrawSphere(surf,j,i,8,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,8,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,8,EC);
end
end
end
end
else
for j=1:surf.nsph
if surf.sphere(j,1)>centerX
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,8,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5)>EC.nod.draw_threshold
DrawSphere(surf,j,i,8,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,8,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,8,EC);
end
end
end
end
end
case{3,6}
if flag==2
for j=1:surf.nsph
if surf.sphere(j,1)EC.nod.draw_threshold
DrawSphere(surf,j,i,8,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,8,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,8,EC);
end
end
end
end
else
for j=1:surf.nsph
if surf.sphere(j,1)>centerX
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,8,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5)>EC.nod.draw_threshold
DrawSphere(surf,j,i,8,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,8,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,8,EC);
end
end
end
end
end
case {2,5,7,8}
for j=1:surf.nsph
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,8,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5)>EC.nod.draw_threshold
DrawSphere(surf,j,i,8,EC);
end
case 2
if surf.sphere(j,4)>EC.nod.draw_threshold
DrawSphere(surf,j,i,8,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2)==j, 1))
DrawSphere(surf,j,i,8,EC);
end
end
end
end
if n>1
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(i) = camlight(EC.glb.lightdirection);
end
hold off
end
% Modified by Mingrui 20150603, Add colorbar for nodes
% Modified by Mingrui 20170807, Add colorbar for nodes in modular option
% Modified by Mingrui 20181115, Fix a bug in display node color with volume
% mapping
if (EC.nod.color == 2||EC.nod.color == 3)&&(FLAG.Loadfile<4||EC.edg.color~=2)&&(FLAG.Loadfile<8||EC.vol.type~=1)
switch(EC.nod.color)
case 2
tmp = EC.nod.CM;
case 3
tmp = EC.nod.CM(1:length(EC.nod.ModularNumber),:);
end
colormap(tmp);
cb=colorbar('location','South');
if EC.nod.color_map_type == 1
caxis([min(surf.sphere(:,4)),max(surf.sphere(:,4))]);
else
caxis([EC.nod.color_map_low,EC.nod.color_map_high]);
end
set(cb,'Position',[0.35 0.085 0.3 0.03]);
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
end
function a = PlotNode5(surf,a,flag,centerX,n,EC)
% Added by Mingrui, 20170309, add layout for lateral, medial and dorsal view
global cam
global FLAG
for i = 1:5
axes(a(i));
hold on
switch i
case {1,4}
if flag == 1
for j = 1:surf.nsph
if surf.sphere(j,1) < centerX
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,52,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5) > EC.nod.draw_threshold
DrawSphere(surf,j,i,52,EC);
end
case 2
if surf.sphere(j,4) > EC.nod.draw_threshold
DrawSphere(surf,j,i,52,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2) == j, 1))
DrawSphere(surf,j,i,52,EC);
end
end
end
end
else
for j = 1:surf.nsph
if surf.sphere(j,1) > centerX
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,52,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5) > EC.nod.draw_threshold
DrawSphere(surf,j,i,52,EC);
end
case 2
if surf.sphere(j,4) > EC.nod.draw_threshold
DrawSphere(surf,j,i,52,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2) == j, 1))
DrawSphere(surf,j,i,52,EC);
end
end
end
end
end
case{3,5}
if flag == 2
for j = 1:surf.nsph
if surf.sphere(j,1) < centerX
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,52,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5) > EC.nod.draw_threshold
DrawSphere(surf,j,i,52,EC);
end
case 2
if surf.sphere(j,4) > EC.nod.draw_threshold
DrawSphere(surf,j,i,52,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2) == j, 1))
DrawSphere(surf,j,i,52,EC);
end
end
end
end
else
for j = 1:surf.nsph
if surf.sphere(j,1) > centerX
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,52,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5) > EC.nod.draw_threshold
DrawSphere(surf,j,i,52,EC);
end
case 2
if surf.sphere(j,4) > EC.nod.draw_threshold
DrawSphere(surf,j,i,52,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2) == j, 1))
DrawSphere(surf,j,i,52,EC);
end
end
end
end
end
case {2}
for j = 1:surf.nsph
switch EC.nod.draw
case 1
DrawSphere(surf,j,i,52,EC);
case 2
switch EC.nod.draw_threshold_type
case 1
if surf.sphere(j,5) > EC.nod.draw_threshold
DrawSphere(surf,j,i,52,EC);
end
case 2
if surf.sphere(j,4) > EC.nod.draw_threshold
DrawSphere(surf,j,i,52,EC);
end
end
case 3
if ~isempty(find(surf.cylinder(:,1:2) == j, 1))
DrawSphere(surf,j,i,52,EC);
end
end
end
end
if n > 1
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(i) = camlight(EC.glb.lightdirection);
end
hold off
end
% Modified by Mingrui 20150603, Add colorbar for nodes
% Modified by Mingrui 20170807, Add colorbar for nodes in modular option
% Modified by Mingrui 20181115, Fix a bug in display node color with volume
% mapping
if (EC.nod.color == 2||EC.nod.color == 3)&&(FLAG.Loadfile<4||EC.edg.color~=2)&&(FLAG.Loadfile<8||EC.vol.type~=1)
switch(EC.nod.color)
case 2
tmp = EC.nod.CM;
case 3
tmp = EC.nod.CM(1:length(EC.nod.ModularNumber),:);
end
colormap(tmp);
cb = colorbar('location','South');
if EC.nod.color_map_type == 1
caxis([min(surf.sphere(:,4)),max(surf.sphere(:,4))]);
else
caxis([EC.nod.color_map_low,EC.nod.color_map_high]);
end
set(cb,'Position',[0.35 0.085 0.3 0.03]);
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
end
% Modified by Mingrui, 20150318, fix a compatity bug with matlab 2014b.
function PlotLabel6(surf,i,j)
global EC
if EC.lbl_front == 0
switch i % Edited by Mingrui Xia, 111028. Adjust label postion. Edited by Mingrui Xia, 20111113, label position plus radius times ratio.
case {1,4,3,6}
text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 2
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
% case 3
% if surf.sphere(j,1)<=0
% text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
% else
% text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
% end
case 5
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2)-surf.sphere(j,7)-2,surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),surf.sphere(j,2)-surf.sphere(j,7)-2,surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
% case 6
% if surf.sphere(j,1)<=0
% text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
% else
% text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
% end
end
else
switch i
case {1,6}
pos = min([min(surf.coord(1,:)),min(surf.sphere(:,1))]);
text(pos-surf.sphere(j,7)-2,surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case {3,4}
pos = max([max(surf.coord(1,:)),max(surf.sphere(:,1))]);
text(pos+surf.sphere(j,7)+1,surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 2
pos = max([max(surf.coord(3,:)),max(surf.sphere(:,3))]);
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,pos+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,pos+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
case 5
pos = min([min(surf.coord(3,:)),min(surf.sphere(:,3))]);
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2)-surf.sphere(j,7)-2,pos-surf.sphere(j,7)-2,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),surf.sphere(j,2)-surf.sphere(j,7)-2,pos-surf.sphere(j,7)-2,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
end
end
function PlotLabel8(surf,i,j)
global EC
if EC.lbl_front == 0
switch i
case {1,3,4,6} %%% Edited by Mingrui Xia, 111028. Combine several same situation, adjust label postion.Edited by Mingrui Xia, 20111113, label position plus radius times ratio.
text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
% case {4,6}
% text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)*2,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
% case 3
% text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)*2,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 2
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
case 7
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
else
text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
end
case 5
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2)-surf.sphere(j,7)-2,surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),surf.sphere(j,2)-surf.sphere(j,7)-2,surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
case 8
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
end
else
switch i
case {1,6}
pos = min([min(surf.coord(1,:)),min(surf.sphere(:,1))]);
text(pos-surf.sphere(j,7)-2,surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case {3,4}
pos = max([max(surf.coord(1,:)),max(surf.sphere(:,1))]);
text(pos+surf.sphere(j,7)+1,surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 2
pos = max([max(surf.coord(3,:)),max(surf.sphere(:,3))]);
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,pos+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,pos+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
case 7
pos = max([max(surf.coord(2,:)),max(surf.sphere(:,2))]);
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),pos+surf.sphere(j,7)+1,surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
else
text(surf.sphere(j,1),pos+surf.sphere(j,7)+1,surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
end
case 5
pos = min([min(surf.coord(3,:)),min(surf.sphere(:,3))]);
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2)-surf.sphere(j,7)-2,pos-surf.sphere(j,7)-2,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),surf.sphere(j,2)-surf.sphere(j,7)-2,pos-surf.sphere(j,7)-2,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
case 8
pos = min([min(surf.coord(2,:)),min(surf.sphere(:,2))]);
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),pos+surf.sphere(j,7)+1,surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),pos+surf.sphere(j,7)+1,surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
end
end
function PlotLabel5(surf,i,j)
% Added by Mingrui, 20170309, add layout for lateral, medial and dorsal view
global EC
if EC.lbl_front == 0
switch i
case {1,3,4,5}
text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3) + surf.sphere(j,7) * EC.nod.size_ratio + 2,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 2
if surf.sphere(j,1) <= 0
text(surf.sphere(j,1),surf.sphere(j,2) + surf.sphere(j,7) * EC.nod.size_ratio + 2,surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),surf.sphere(j,2) + surf.sphere(j,7) * EC.nod.size_ratio + 2,surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
end
else
switch i
case {1,5}
pos = min([min(surf.coord(1,:)),min(surf.sphere(:,1))]);
text(pos-surf.sphere(j,7)-2,surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case {3,4}
pos = max([max(surf.coord(1,:)),max(surf.sphere(:,1))]);
text(pos+surf.sphere(j,7)+1,surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 2
pos = max([max(surf.coord(3,:)),max(surf.sphere(:,3))]);
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,pos+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,pos+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
end
end
function PlotLabel4v(surf,i,j)
global EC
if EC.lbl_front == 0
switch i
case {1,2,3,4}
text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 5
text(surf.sphere(j,1)-surf.sphere(j,7)+1,surf.sphere(j,2),surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 6
text(surf.sphere(j,1)+surf.sphere(j,7)+1,surf.sphere(j,2),surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
end
else
switch i
case {1,4}
pos = min([min(surf.coord(1,:)),min(surf.sphere(:,1))]);
text(pos-surf.sphere(j,7)-2,surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case {2,3}
pos = max([max(surf.coord(1,:)),max(surf.sphere(:,1))]);
text(pos+surf.sphere(j,7)+1,surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 5
pos = min([min(surf.coord(3,:)),min(surf.sphere(:,3))]);
text(surf.sphere(j,1)-surf.sphere(j,7)-2,surf.sphere(j,2),pos+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 6
pos = min([min(surf.coord(3,:)),min(surf.sphere(:,3))]);
text(surf.sphere(j,1)+surf.sphere(j,7)+1,surf.sphere(j,2),pos+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
end
end
function PlotLabel1(surf,j)
%%% Added by Mingrui Xia, 111028. Plot label for single view.
%%% Edited by Mingrui Xia, 20111113, label position plus radius times ratio.
global EC
if EC.lbl_front == 0
if EC.msh.doublebrain == 1 %% Edited by Mingrui Xia, 20130818, fix the bug that the label only appear in the first brain
switch EC.lot.view_direction
case {1,4}
% text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
text(0,surf.sphere2(j,2),surf.sphere2(j,3)+surf.sphere2(j,7)*EC.nod.size_ratio+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 2
if surf.sphere2(j,1)<=0
text(surf.sphere2(j,1),surf.sphere2(j,2)+surf.sphere2(j,7)*EC.nod.size_ratio+1,surf.sphere2(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere2(j,1),surf.sphere2(j,2)+surf.sphere2(j,7)*EC.nod.size_ratio+1,surf.sphere2(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
case 3
if surf.sphere2(j,1)<=0
text(surf.sphere2(j,1),surf.sphere2(j,2),surf.sphere2(j,3)+surf.sphere2(j,7)*EC.nod.size_ratio+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
else
text(surf.sphere2(j,1),surf.sphere2(j,2),surf.sphere2(j,3)+surf.sphere2(j,7)*EC.nod.size_ratio+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
end
end
else
switch EC.lot.view_direction
case {1,4}
% text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 2
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,surf.sphere(j,3),surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
case 3
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
else
text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
end
end
end
else
if EC.msh.doublebrain == 1
switch EC.lot.view_direction
case 1
pos = min([min(surf.coord(1,:)),min(surf.sphere(:,1))]);
text(pos-surf.sphere2(j,7)*EC.nod.size_ratio-2,surf.sphere2(j,2),surf.sphere2(j,3)+surf.sphere2(j,7)*EC.nod.size_ratio+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 2
pos = max([max(surf.coord(3,:)),max(surf.sphere(:,3))]);
if surf.sphere2(j,1)<=0
text(surf.sphere2(j,1),surf.sphere2(j,2)+surf.sphere2(j,7)*EC.nod.size_ratio+1,pos+surf.sphere2(j,7)*EC.nod.size_ratio+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere2(j,1),surf.sphere2(j,2)+surf.sphere2(j,7)*EC.nod.size_ratio+1,pos+surf.sphere2(j,7)*EC.nod.size_ratio+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
case 3
pos = min([min(surf.coord(3,:)),min(surf.sphere(:,3))]);
if surf.sphere2(j,1)<=0
text(surf.sphere2(j,1),surf.sphere2(j,2)-surf.sphere2(j,7)*EC.nod.size_ratio-2,pos-surf.sphere2(j,7)*EC.nod.size_ratio-2,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere2(j,1),surf.sphere2(j,2)-surf.sphere2(j,7)*EC.nod.size_ratio-2,pos-surf.sphere2(j,7)*EC.nod.size_ratio-2,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
case 4
text(surf.sphere2(j,1),surf.sphere2(j,2),surf.sphere2(j,3)+surf.sphere2(j,7)*EC.nod.size_ratio+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
end
else
switch EC.lot.view_direction
case 1
% left side
pos = min([min(surf.coord(1,:)),min(surf.sphere(:,1))]);
text(pos-surf.sphere(j,7)-2,surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
% right side
% pos = max([max(surf.coord(1,:)),max(surf.sphere(:,1))]);
% text(pos+surf.sphere(j,7)+2,surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case 2
pos = max([max(surf.coord(3,:)),max(surf.sphere(:,3))]);
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,pos+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
else
text(surf.sphere(j,1),surf.sphere(j,2)+surf.sphere(j,7)+1,pos+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
end
case 3
pos = max([max(surf.coord(2,:)),max(surf.sphere(:,2))]);
if surf.sphere(j,1)<=0
text(surf.sphere(j,1),pos+surf.sphere(j,7)+1,surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','left')
else
text(surf.sphere(j,1),pos+surf.sphere(j,7)+1,surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','right')
end
case 4
text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
end
end
end
function PlotLabel4(surf,i,j)
% Mingrui Xia 111026 Added. For Medium View (4 views)
%%% Edited by Mingrui Xia, 20111113, label position plus radius times ratio.
global EC
if EC.lbl_front == 0
text(surf.sphere(j,1),surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+1,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
else
switch i
case {1,4}
pos = min([min(surf.coord(1,:)),min(surf.sphere(:,1))]);
text(pos-surf.sphere(j,7)-2,surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+3,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
case {2,3}
pos = max([max(surf.coord(1,:)),max(surf.sphere(:,1))]);
text(pos+surf.sphere(j,7)+1,surf.sphere(j,2),surf.sphere(j,3)+surf.sphere(j,7)+3,surf.label{j},'FontName',EC.lbl_font.FontName,'FontWeight',EC.lbl_font.FontWeight,'FontAngle',EC.lbl_font.FontAngle,'FontSize',EC.lbl_font.FontSize,'FontUnits',EC.lbl_font.FontUnits,'HorizontalAlignment','center');
end
end
function DrawSphere(surf,j,i,n,EC)
% switch EC.nod.size
% case 1
% % t=EC.nod.size_size;
% t = surf.sphere(j,7);
% case 2
% switch EC.nod.size_value
% case 1
% t=surf.sphere(j,7);
% case 2
% if surf.sphere(j,5)<1
% t=1;
% elseif surf.sphere(j,5)>10
% t=10;
% else
% t=surf.sphere(j,5);
% end
% end
% case 3
% if surf.sphere(j,5)>EC.nod.size_threshold
% switch EC.nod.size_value
% case 1
% t=surf.sphere(j,7);
% case 2
% if surf.sphere(j,5)>10
% t=10;
% else
% t=surf.sphere(j,5);
% end
% end
% else
% t=1;
% end
% end
% t=t*EC.nod.size_ratio;
t = surf.sphere(j,7); % Edited by Mingrui Xia, 20120702, fix edge length when using fix node size.
switch EC.glb.detail % Add by Mingrui Xia, 20120413, adjust graph detail
case 1
[x,y,z]=sphere(10);
case 2
[x,y,z]=sphere(50);
case 3
[x,y,z]=sphere(100);
end
if EC.msh.doublebrain == 1
x=x.*t+surf.sphere2(j,1);
y=y.*t+surf.sphere2(j,2);
z=z.*t+surf.sphere2(j,3);
else
x=x.*t+surf.sphere(j,1);
y=y.*t+surf.sphere(j,2);
z=z.*t+surf.sphere(j,3);
end
Node=mesh(x,y,z,'EdgeColor','none');
switch EC.nod.color
case 1
ci=1;
case 2
ci=int32(surf.sphere(j,6));
%Editied by Mingrui, 20181123, fix a bug when the length for
%inputed colormap is not 64
colormap_length = length(EC.nod.CM);
if ci<1
ci=1;
elseif ci>colormap_length
ci = colormap_length;
end
case 3
ci = find(EC.nod.ModularNumber == surf.sphere(j,4));
% ci=int32(surf.sphere(j,4));
% if ci<1
% ci=22;
% elseif ci>21
% ci=22;
% end
case 4
if surf.sphere(j,4)>EC.nod.color_threshold
ci=1;
else
ci=64;
end
end
set(Node,'FaceColor',EC.nod.CM(ci,:));
set(Node,'EdgeAlpha',0)
% if surf.label{j}~='-'
if ~isequal(surf.label{j},'-') % Editied by Mingrui Xia, 20131226, fix the bug that the label doesn't displayed when including '-'
switch EC.lbl
case 1
if n==8
PlotLabel8(surf,i,j);
elseif n==6
PlotLabel6(surf,i,j);
elseif n==4 %%% Edited by Mingrui Xia, 111028. Add label plot for medium view and single view.
PlotLabel4(surf,i,j);
elseif n == 5
PlotLabel4v(surf,i,j);
elseif n == 52 % Added by Mingrui, 20170309, add layout for lateral, medial and dorsal view
PlotLabel5(surf,i,j);
else
PlotLabel1(surf,j);
end
case 3
switch EC.lbl_threshold_type
case 1
if surf.sphere(j,5)>EC.lbl_threshold
if n==8
PlotLabel8(surf,i,j);
elseif n==6
PlotLabel6(surf,i,j);
elseif n==4 %%% Edited by Mingrui Xia, 111028. Add label plot for medium view and single view.
PlotLabel4(surf,i,j);
elseif n == 5
PlotLabel4v(surf,i,j);
elseif n == 52 % Added by Mingrui, 20170309, add layout for lateral, medial and dorsal view
PlotLabel5(surf,i,j);
else
PlotLabel1(surf,j);
end
end
case 2
if surf.sphere(j,4)>EC.lbl_threshold
if n==8
PlotLabel8(surf,i,j);
elseif n==6
PlotLabel6(surf,i,j);
elseif n==4 %%% Edited by Mingrui Xia, 111028. Add label plot for medium view and single view.
PlotLabel4(surf,i,j);
elseif n == 5
PlotLabel4v(surf,i,j);
elseif n == 52 % Added by Mingrui, 20170309, add layout for lateral, medial and dorsal view
PlotLabel5(surf,i,j);
else
PlotLabel1(surf,j);
end
end
end
end
end
function [centerX,flag]=JudgeNode(surf,vl,vr)
if abs(min(surf.coord(1,vl))-max(surf.coord(1,vr)))centerX&&surf.sphere(surf.cylinder(j,2),1)>centerX
DrawLine(surf,j,5,1);
end
end
end
case{3,6}
if flag==2
for j=1:surf.ncyl
if surf.sphere(surf.cylinder(j,1),1)centerX&&surf.sphere(surf.cylinder(j,2),1)>centerX
DrawLine(surf,j,5,1);
end
end
end
case {2,5}
for j=1:surf.ncyl
DrawLine(surf,j,5,2);
end
case {7,8}
for j=1:surf.ncyl
DrawLine(surf,j,5,3);
end
end
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(i) = camlight(EC.glb.lightdirection);
hold off
end
% Add by Mingrui, 20150114, show colorbar when using colormap
if EC.edg.color == 2
colormap(EC.edg.CM);
cb=colorbar('location','South');
if EC.edg.color_map_type == 1 % Modified by Mingrui, 20170303, support fixed color mapping
if EC.edg.color_abs == 0
caxis([min(surf.cylinder(:,3)),max(surf.cylinder(:,3))]);
else
caxis([min(abs(surf.cylinder(:,3))),max(abs(surf.cylinder(:,3)))]);
end
else
caxis([EC.edg.color_map_low,EC.edg.color_map_high]);
end
set(cb,'Position',[0.35 0.085 0.3 0.03]);
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
end
function PlotLine5(surf,a,flag,centerX)
% Added by Mingrui, 20170309, add layout for lateral, medial and dorsal view
global cam
global EC
for i = 1:5
axes(a(i));
hold on
switch i
case {1,4}
if flag == 1
for j = 1:surf.ncyl
if surf.sphere(surf.cylinder(j,1),1) < centerX && surf.sphere(surf.cylinder(j,2),1) < centerX
DrawLine(surf,j,3,1);
end
end
else
for j = 1:surf.ncyl
if surf.sphere(surf.cylinder(j,1),1) > centerX && surf.sphere(surf.cylinder(j,2),1) > centerX
DrawLine(surf,j,3,1);
end
end
end
case{3,5}
if flag == 2
for j = 1:surf.ncyl
if surf.sphere(surf.cylinder(j,1),1) < centerX && surf.sphere(surf.cylinder(j,2),1) < centerX
DrawLine(surf,j,3,1);
end
end
else
for j = 1:surf.ncyl
if surf.sphere(surf.cylinder(j,1),1) > centerX && surf.sphere(surf.cylinder(j,2),1) > centerX
DrawLine(surf,j,3,1);
end
end
end
case {2}
for j = 1:surf.ncyl
DrawLine(surf,j,3,2);
end
end
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(i) = camlight(EC.glb.lightdirection);
hold off
end
% Add by Mingrui, 20150114, show colorbar when using colormap
if EC.edg.color == 2
colormap(EC.edg.CM);
cb = colorbar('location','South');
if EC.edg.color_map_type == 1 % Modified by Mingrui, 20170303, support fixed color mapping
if EC.edg.color_abs == 0
caxis([min(surf.cylinder(:,3)),max(surf.cylinder(:,3))]);
else
caxis([min(abs(surf.cylinder(:,3))),max(abs(surf.cylinder(:,3)))]);
end
else
caxis([EC.edg.color_map_low,EC.edg.color_map_high]);
end
set(cb,'Position',[0.35 0.085 0.3 0.03]);
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
end
function PlotLine4(surf,a,flag,centerX)
global cam
global EC
for i=1:4
axes(a(i));
hold on
switch i
case {1,3}
if flag==1
for j=1:surf.ncyl
if surf.sphere(surf.cylinder(j,1),1)centerX&&surf.sphere(surf.cylinder(j,2),1)>centerX
DrawLine(surf,j,2,1);
end
end
end
case{2,4}
if flag==2
for j=1:surf.ncyl
if surf.sphere(surf.cylinder(j,1),1)centerX&&surf.sphere(surf.cylinder(j,2),1)>centerX
DrawLine(surf,j,2,1);
end
end
end
end
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(i) = camlight(EC.glb.lightdirection);
hold off
end
% Add by Mingrui, 20150114, show colorbar when using colormap
if EC.edg.color == 2
colormap(EC.edg.CM);
cb=colorbar('location','South');
if EC.edg.color_map_type == 1 % Modified by Mingrui, 20170303, support fixed color mapping
if EC.edg.color_abs == 0
caxis([min(surf.cylinder(:,3)),max(surf.cylinder(:,3))]);
else
caxis([min(abs(surf.cylinder(:,3))),max(abs(surf.cylinder(:,3)))]);
end
else
caxis([EC.edg.color_map_low,EC.edg.color_map_high]);
end
set(cb,'Position',[0.4 0.055 0.2 0.03]);
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
end
function PlotLine4v(surf,a,flag,centerX)
global cam
global EC
for i=1:6
axes(a(i));
hold on
switch i
case {1,3}
if flag==1
for j=1:surf.ncyl
if surf.sphere(surf.cylinder(j,1),1)centerX&&surf.sphere(surf.cylinder(j,2),1)>centerX
DrawLine(surf,j,3,1);
end
end
end
case{2,4}
if flag==2
for j=1:surf.ncyl
if surf.sphere(surf.cylinder(j,1),1)centerX&&surf.sphere(surf.cylinder(j,2),1)>centerX
DrawLine(surf,j,3,1);
end
end
end
case 5
if flag==1
for j=1:surf.ncyl
if surf.sphere(surf.cylinder(j,1),1)centerX&&surf.sphere(surf.cylinder(j,2),1)>centerX
DrawLine(surf,j,3,2);
end
end
end
case 6
if flag==2
for j=1:surf.ncyl
if surf.sphere(surf.cylinder(j,1),1)centerX&&surf.sphere(surf.cylinder(j,2),1)>centerX
DrawLine(surf,j,3,2);
end
end
end
end
axis tight; axis vis3d off;eval(['material ',EC.glb.material,';']);eval(['lighting ',EC.glb.lighting,';']);
cam(i) = camlight(EC.glb.lightdirection);
hold off
end
% Add by Mingrui, 20150114, show colorbar when using colormap
if EC.edg.color == 2
colormap(EC.edg.CM);
cb=colorbar('location','South');
if EC.edg.color_map_type == 1 % Modified by Mingrui, 20170303, support fixed color mapping
if EC.edg.color_abs == 0
caxis([min(surf.cylinder(:,3)),max(surf.cylinder(:,3))]);
else
caxis([min(abs(surf.cylinder(:,3))),max(abs(surf.cylinder(:,3)))]);
end
else
caxis([EC.edg.color_map_low,EC.edg.color_map_high]);
end
set(cb,'Position',[0.4 0.6 0.2 0.03]);
tmp = version;
ind = find(tmp == '.');
if str2double(tmp(1:ind(2)-1))<8.4
set(cb,'XAxisLocation','bottom');
set(cb,'XTick',get(cb,'XLim'));
else
cb.AxisLocation = 'out';
cb.Ticks = cb.Limits;
end
end
function DrawLine(surf,i,nv,iv)
global EC
%length_cyl=norm(surf.sphere(surf.cylinder(i,2),:)-surf.sphere(surf.cylinder(i,1),:)); % Fixed a bug by Mingrui Xia, 20120411, the length calculat was wrong.
if EC.msh.doublebrain == 1 % Added by Mingrui Xia, 20120717, show two brains in one figure
sphere = surf.sphere2;
else
sphere = surf.sphere;
end
length_cyl=norm(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3))-sphere(surf.cylinder(i,2),7)-sphere(surf.cylinder(i,1),7);
switch EC.glb.detail % Add by Mingrui Xia, 20120413, adjust graph detail
case 1
det = 5;
case 2
det = 10;
case 3
det = 20;
end
% switch EC.edg.size
% case 1
% n=EC.edg.size_size;
% case 2
% switch EC.edg.size_value
% case 1
% n=surf.cylinder(i,3);
% case 2
% switch EC.edg.size_abs
% case 0
% n=surf.cylinder2(i,3);
% case 1
% n=abs(surf.cylinder2(i,3));
% end
% if n<0.1
% n=0.2;
% elseif n>3;
% n=3;
% end
% end
% case 3
% switch EC.edg.size_abs
% case 0
% if surf.cylinder2(i,3)>EC.edg.size_threshold
% switch EC.edg.size_value
% case 1
% n=surf.cylinder(i,3);
% case 2
% n=surf.cylinder2(i,3);
% end
% % n = 5;
% else
% n=1;
% end
%
% case 1
% if surf.cylinder2(i,3)>EC.edg.size_threshold||surf.cylinder2(i,3)<-EC.edg.size_threshold
% switch EC.edg.size_value
% case 1
% n=surf.cylinder(i,3);
% case 2
% n=surf.cylinder2(i,3);
% end
% else
% n=1;
% end
% end
% end
n = surf.cylinder(i,4) * EC.edg.size_ratio;
theta = (0:det) / det * 2 * pi;
sintheta = sin(theta);
sintheta(det + 1) = 0;
if EC.edg.directed == 1% Add by Mingrui Xia, 20120621, draw directed network.
% Modified by Mingrui, 20170309, draw two edges for bidirected network
% if surf.cylinder(i,7) == 1
% n = [linspace(0,1.5,9),ones(1,round(length_cyl-9)) * 1]' * n;
% else
% n = [linspace(0,2,9),ones(1,round(length_cyl-18)) * 1,linspace(2,0,9)]' * n;
% end
ind = find(surf.cylinder(:,1)==surf.cylinder(i,2)&surf.cylinder(:,2)==surf.cylinder(i,1));
if isempty(ind)
n = [linspace(0,2,9),ones(1,round(length_cyl-9)) * 1]' * n;
x = n * cos(theta);
y = n * sintheta;
w = length(n);
z = (0:w-1)'/(w-1) * ones(1,det + 1);
Line = mesh(x,y,z * length_cyl);
unit_Vx=[0 0 1];
angle_X1X2=acos( dot( unit_Vx,sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3) )/( norm(unit_Vx)*norm(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3))) )*180/pi;
axis_rot=cross([0 0 1],(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3)) );
if angle_X1X2~=0 && angle_X1X2~=180 % Modified by Mingrui, 20160918, fix the bug when angle is 180 degree
rotate(Line,axis_rot,angle_X1X2,[0 0 0])
end
set(Line,'XData',get(Line,'XData')+sphere(surf.cylinder(i,1),1) + (sphere(surf.cylinder(i,2),1) -sphere(surf.cylinder(i,1),1))/norm(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3))*sphere(surf.cylinder(i,1),7));
set(Line,'YData',get(Line,'YData')+sphere(surf.cylinder(i,1),2) + (sphere(surf.cylinder(i,2),2) -sphere(surf.cylinder(i,1),2))/norm(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3))*sphere(surf.cylinder(i,1),7));
if angle_X1X2~=180
set(Line,'ZData',get(Line,'ZData')+sphere(surf.cylinder(i,1),3) + (sphere(surf.cylinder(i,2),3) -sphere(surf.cylinder(i,1),3))/norm(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3))*sphere(surf.cylinder(i,1),7));
else
set(Line,'ZData',get(Line,'ZData')+sphere(surf.cylinder(i,2),3) + (sphere(surf.cylinder(i,1),3) -sphere(surf.cylinder(i,2),3))/norm(sphere(surf.cylinder(i,1),1:3)-sphere(surf.cylinder(i,2),1:3))*sphere(surf.cylinder(i,1),7));
end
set(Line,'FaceColor',EC.edg.CM(surf.cylinder(i,5),:));
set(Line,'EdgeColor','none');
set(Line,'FaceAlpha',surf.cylinder(i,6));
set(Line,'EdgeAlpha',0);
elseif ind > i
n1 = [linspace(0,2,9),ones(1,round(length_cyl-9)) * 1]' * n;
n2 = [linspace(0,2,9),ones(1,round(length_cyl-9)) * 1]' * surf.cylinder(ind,4) * EC.edg.size_ratio;;
x1 = n1 * cos(theta);
y1 = n1 * sintheta;
w1 = length(n1);
z1 = (0:w1 - 1)'/(w1 - 1) * ones(1,det + 1);
Line1 = mesh(x1,y1,z1 * length_cyl);
unit_Vx = [0 0 1];
angle_X1X2 = acos(dot(unit_Vx,sphere(surf.cylinder(i,2),1:3) - sphere(surf.cylinder(i,1),1:3) )/( norm(unit_Vx)*norm(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3))) )*180/pi;
axis_rot = cross([0 0 1],(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3)) );
if angle_X1X2~=0 && angle_X1X2~=180 % Modified by Mingrui, 20160918, fix the bug when angle is 180 degree
rotate(Line1,axis_rot,angle_X1X2,[0 0 0])
end
set(Line1,'XData',get(Line1,'XData')+sphere(surf.cylinder(i,1),1) + (sphere(surf.cylinder(i,2),1) -sphere(surf.cylinder(i,1),1))/norm(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3))*sphere(surf.cylinder(i,1),7));
set(Line1,'YData',get(Line1,'YData')+sphere(surf.cylinder(i,1),2) + (sphere(surf.cylinder(i,2),2) -sphere(surf.cylinder(i,1),2))/norm(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3))*sphere(surf.cylinder(i,1),7));
if angle_X1X2~=180
set(Line1,'ZData',get(Line1,'ZData')+sphere(surf.cylinder(i,1),3) + (sphere(surf.cylinder(i,2),3) -sphere(surf.cylinder(i,1),3))/norm(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3))*sphere(surf.cylinder(i,1),7));
else
set(Line1,'ZData',get(Line1,'ZData')+sphere(surf.cylinder(i,2),3) + (sphere(surf.cylinder(i,1),3) -sphere(surf.cylinder(i,2),3))/norm(sphere(surf.cylinder(i,1),1:3)-sphere(surf.cylinder(i,2),1:3))*sphere(surf.cylinder(i,1),7));
end
set(Line1,'FaceColor',EC.edg.CM(surf.cylinder(i,5),:));
set(Line1,'EdgeColor','none');
set(Line1,'FaceAlpha',surf.cylinder(i,6));
set(Line1,'EdgeAlpha',0);
x2 = n2 * cos(theta);
y2 = n2 * sintheta;
w2 = length(n2);
z2 = (0:w2 - 1)'/(w2 - 1) * ones(1,det + 1);
Line2 = mesh(x2,y2,z2 * length_cyl);
unit_Vx = [0 0 1];
angle_X1X2 = acos(dot(unit_Vx,sphere(surf.cylinder(ind,2),1:3) - sphere(surf.cylinder(ind,1),1:3) )/( norm(unit_Vx)*norm(sphere(surf.cylinder(ind,2),1:3)-sphere(surf.cylinder(ind,1),1:3))) )*180/pi;
axis_rot = cross([0 0 1],(sphere(surf.cylinder(ind,2),1:3)-sphere(surf.cylinder(ind,1),1:3)) );
if angle_X1X2~=0 && angle_X1X2~=180 % Modified by Mingrui, 20160918, fix the bug when angle is 180 degree
rotate(Line2,axis_rot,angle_X1X2,[0 0 0])
end
set(Line2,'XData',get(Line2,'XData')+sphere(surf.cylinder(ind,1),1) + (sphere(surf.cylinder(ind,2),1) -sphere(surf.cylinder(ind,1),1))/norm(sphere(surf.cylinder(ind,2),1:3)-sphere(surf.cylinder(ind,1),1:3))*sphere(surf.cylinder(ind,1),7));
set(Line2,'YData',get(Line2,'YData')+sphere(surf.cylinder(ind,1),2) + (sphere(surf.cylinder(ind,2),2) -sphere(surf.cylinder(ind,1),2))/norm(sphere(surf.cylinder(ind,2),1:3)-sphere(surf.cylinder(ind,1),1:3))*sphere(surf.cylinder(ind,1),7));
if angle_X1X2~=180
set(Line2,'ZData',get(Line2,'ZData')+sphere(surf.cylinder(ind,1),3) + (sphere(surf.cylinder(ind,2),3) -sphere(surf.cylinder(ind,1),3))/norm(sphere(surf.cylinder(ind,2),1:3)-sphere(surf.cylinder(ind,1),1:3))*sphere(surf.cylinder(ind,1),7));
else
set(Line2,'ZData',get(Line2,'ZData')+sphere(surf.cylinder(ind,2),3) + (sphere(surf.cylinder(ind,1),3) -sphere(surf.cylinder(ind,2),3))/norm(sphere(surf.cylinder(ind,1),1:3)-sphere(surf.cylinder(ind,2),1:3))*sphere(surf.cylinder(ind,1),7));
end
set(Line2,'FaceColor',EC.edg.CM(surf.cylinder(ind,5),:));
set(Line2,'EdgeColor','none');
set(Line2,'FaceAlpha',surf.cylinder(ind,6));
set(Line2,'EdgeAlpha',0);
edgedirect = [sphere(surf.cylinder(ind,1),1) - sphere(surf.cylinder(ind,2),1), sphere(surf.cylinder(ind,1),2) - sphere(surf.cylinder(ind,2),2),sphere(surf.cylinder(ind,1),3) - sphere(surf.cylinder(ind,2),3)];
switch nv
case 1
switch iv
case 1
normdirect = [edgedirect(2),edgedirect(3)];
if sum(normdirect(:))~=0
movelength = null(normdirect/norm(normdirect));
set(Line1,'YData',get(Line1,'YData')+ movelength(1)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line1,'ZData',get(Line1,'ZData')+ movelength(2)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line2,'YData',get(Line2,'YData')- movelength(1)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
set(Line2,'ZData',get(Line2,'ZData')- movelength(2)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
end
case 2
normdirect = [edgedirect(2),edgedirect(1)];
if sum(normdirect(:))~=0
movelength = null(normdirect/norm(normdirect));
set(Line1,'YData',get(Line1,'YData')+ movelength(1)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line1,'XData',get(Line1,'XData')+ movelength(2)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line2,'YData',get(Line2,'YData')- movelength(1)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
set(Line2,'XData',get(Line2,'XData')- movelength(2)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
end
case 3
normdirect = [edgedirect(1),edgedirect(3)];
if sum(normdirect(:))~=0
movelength = null(normdirect/norm(normdirect));
set(Line1,'XData',get(Line1,'XData')+ movelength(1)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line1,'ZData',get(Line1,'ZData')+ movelength(2)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line2,'XData',get(Line2,'XData')- movelength(1)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
set(Line2,'ZData',get(Line2,'ZData')- movelength(2)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
end
end
case 2
normdirect = [edgedirect(2),edgedirect(3)];
if sum(normdirect(:))~=0
movelength = null(normdirect/norm(normdirect));
set(Line1,'YData',get(Line1,'YData')+ movelength(1)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line1,'ZData',get(Line1,'ZData')+ movelength(2)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line2,'YData',get(Line2,'YData')- movelength(1)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
set(Line2,'ZData',get(Line2,'ZData')- movelength(2)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
end
case 3
switch iv
case 1
normdirect = [edgedirect(2),edgedirect(3)];
if sum(normdirect(:))~=0
movelength = null(normdirect/norm(normdirect));
set(Line1,'YData',get(Line1,'YData')+ movelength(1)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line1,'ZData',get(Line1,'ZData')+ movelength(2)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line2,'YData',get(Line2,'YData')- movelength(1)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
set(Line2,'ZData',get(Line2,'ZData')- movelength(2)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
end
case 2
normdirect = [edgedirect(2),edgedirect(1)];
if sum(normdirect(:))~=0
movelength = null(normdirect/norm(normdirect));
set(Line1,'YData',get(Line1,'YData')+ movelength(1)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line1,'XData',get(Line1,'XData')+ movelength(2)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line2,'YData',get(Line2,'YData')- movelength(1)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
set(Line2,'XData',get(Line2,'XData')- movelength(2)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
end
end
case 4
switch iv
case 1
normdirect = [edgedirect(2),edgedirect(3)];
if sum(normdirect(:))~=0
movelength = null(normdirect/norm(normdirect));
set(Line1,'YData',get(Line1,'YData')+ movelength(1)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line1,'ZData',get(Line1,'ZData')+ movelength(2)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line2,'YData',get(Line2,'YData')- movelength(1)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
set(Line2,'ZData',get(Line2,'ZData')- movelength(2)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
end
case 2
normdirect = [edgedirect(2),edgedirect(1)];
if sum(normdirect(:))~=0
movelength = null(normdirect/norm(normdirect));
set(Line1,'YData',get(Line1,'YData')+ movelength(1)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line1,'XData',get(Line1,'XData')+ movelength(2)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line2,'YData',get(Line2,'YData')- movelength(1)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
set(Line2,'XData',get(Line2,'XData')- movelength(2)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
end
end
case 5
switch iv
case 1
normdirect = [edgedirect(2),edgedirect(3)];
if sum(normdirect(:))~=0
movelength = null(normdirect/norm(normdirect));
set(Line1,'YData',get(Line1,'YData')+ movelength(1)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line1,'ZData',get(Line1,'ZData')+ movelength(2)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line2,'YData',get(Line2,'YData')- movelength(1)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
set(Line2,'ZData',get(Line2,'ZData')- movelength(2)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
end
case 2
normdirect = [edgedirect(2),edgedirect(1)];
if sum(normdirect(:))~=0
movelength = null(normdirect/norm(normdirect));
set(Line1,'YData',get(Line1,'YData')+ movelength(1)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line1,'XData',get(Line1,'XData')+ movelength(2)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line2,'YData',get(Line2,'YData')- movelength(1)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
set(Line2,'XData',get(Line2,'XData')- movelength(2)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
end
case 3
normdirect = [edgedirect(1),edgedirect(3)];
if sum(normdirect(:))~=0
movelength = null(normdirect/norm(normdirect));
set(Line1,'XData',get(Line1,'XData')+ movelength(1)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line1,'ZData',get(Line1,'ZData')+ movelength(2)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line2,'XData',get(Line2,'XData')- movelength(1)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
set(Line2,'ZData',get(Line2,'ZData')- movelength(2)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
end
end
case 6
switch iv
case {1,0}
normdirect = [edgedirect(2),edgedirect(3)];
if sum(normdirect(:))~=0
movelength = null(normdirect/norm(normdirect));
set(Line1,'YData',get(Line1,'YData')+ movelength(1)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line1,'ZData',get(Line1,'ZData')+ movelength(2)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line2,'YData',get(Line2,'YData')- movelength(1)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
set(Line2,'ZData',get(Line2,'ZData')- movelength(2)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
end
case 2
normdirect = [edgedirect(2),edgedirect(1)];
if sum(normdirect(:))~=0
movelength = null(normdirect/norm(normdirect));
set(Line1,'YData',get(Line1,'YData')+ movelength(1)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line1,'XData',get(Line1,'XData')+ movelength(2)*surf.cylinder(i,4) * EC.edg.size_ratio * 1.3);
set(Line2,'YData',get(Line2,'YData')- movelength(1)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
set(Line2,'XData',get(Line2,'XData')- movelength(2)*surf.cylinder(ind,4) * EC.edg.size_ratio * 1.3);
end
end
end
end
else
n = ones(100,1) * 0.5 * n ;
x = n * cos(theta);
y = n * sintheta;
w = length(n);
z = (0:w-1)'/(w-1) * ones(1,det + 1);
Line = mesh(x,y,z * length_cyl);
unit_Vx=[0 0 1];
angle_X1X2=acos( dot( unit_Vx,sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3) )/( norm(unit_Vx)*norm(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3))) )*180/pi;
axis_rot=cross([0 0 1],(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3)) );
if angle_X1X2~=0 && angle_X1X2~=180 % Modified by Mingrui, 20160918, fix the bug when angle is 180 degree
rotate(Line,axis_rot,angle_X1X2,[0 0 0])
end
set(Line,'XData',get(Line,'XData')+sphere(surf.cylinder(i,1),1) + (sphere(surf.cylinder(i,2),1) -sphere(surf.cylinder(i,1),1))/norm(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3))*sphere(surf.cylinder(i,1),7));
set(Line,'YData',get(Line,'YData')+sphere(surf.cylinder(i,1),2) + (sphere(surf.cylinder(i,2),2) -sphere(surf.cylinder(i,1),2))/norm(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3))*sphere(surf.cylinder(i,1),7));
if angle_X1X2~=180
set(Line,'ZData',get(Line,'ZData')+sphere(surf.cylinder(i,1),3) + (sphere(surf.cylinder(i,2),3) -sphere(surf.cylinder(i,1),3))/norm(sphere(surf.cylinder(i,2),1:3)-sphere(surf.cylinder(i,1),1:3))*sphere(surf.cylinder(i,1),7));
else
set(Line,'ZData',get(Line,'ZData')+sphere(surf.cylinder(i,2),3) + (sphere(surf.cylinder(i,1),3) -sphere(surf.cylinder(i,2),3))/norm(sphere(surf.cylinder(i,1),1:3)-sphere(surf.cylinder(i,2),1:3))*sphere(surf.cylinder(i,1),7));
end
% switch EC.edg.color
% case 1
% ci=1;
% case 2
% switch EC.edg.color_abs %%% Edited by Mingrui Xia, 20120413, fix colormap
% % for edges
% case 0
% % ci=int32(45*surf.cylinder3(i,3)-3.5);
% k = 63/(max(surf.cylinder2(:,3)) - min(surf.cylinder2(:,3)));
% b = 64 - 63/(max(surf.cylinder2(:,3)) - min(surf.cylinder2(:,3))) *...
% max(surf.cylinder2(:,3));
% ci = round(k*surf.cylinder2(i,3) + b);
% if ci<1
% ci=1;
% elseif ci>64
% ci=64;
% end
% case 1
% k = 63/(max(abs(surf.cylinder2(:,3))) - min(abs(surf.cylinder2(:,3))));
% b = 64 - 63/(max(abs(surf.cylinder2(:,3))) - min(abs(surf.cylinder2(:,3))))...
% * max(abs(surf.cylinder2(:,3)));
% ci = round(k*abs(surf.cylinder2(i,3)) + b);
% % ci=int32(45*surf.cylinder3(i,3)-3.5);
% if ci<1
% ci=1;
% elseif ci>64
% ci=64;
% end
% end
% case 3
% switch EC.edg.color_abs
% case 0
% if surf.cylinder2(i,3)>EC.edg.color_threshold
% ci=1;
% else
% ci=64;
% end
% case 1
% if surf.cylinder2(i,3)>EC.edg.color_threshold||surf.cylinder2(i,3)<-EC.edg.color_threshold
% ci=1;
% else
% ci=64;
% end
% end
% case 4
% if length_cyl>EC.edg.color_distance
% ci=1;
% else
% ci=64;
% end
% case 5 % Added by Mingrui Xia, 20120809 add edge color according to nodal module
% if sphere(surf.cylinder(i,1),4) == sphere(surf.cylinder(i,2),4)
% ci = find(EC.nod.ModularNumber == sphere(surf.cylinder(i,1),4));
% else
% ci = 21;
% end
%
% end
set(Line,'FaceColor',EC.edg.CM(surf.cylinder(i,5),:));
set(Line,'EdgeColor','none');
set(Line,'FaceAlpha',surf.cylinder(i,6));
set(Line,'EdgeAlpha',0);
end
function DoubleMeshPrepare
% Added by Mingrui Xia, 20120717, show two brains in one figure
global surf
global EC
surf.coord2 = surf.coord;
switch EC.lot.view_direction
case 1
width = 0.1 * (max(surf.coord(2,:)) - min(surf.coord(2,:)));
% surf.coord2(1,:) = -surf.coord2(1,:);
% surf.coord2(2,:) = -surf.coord(2,:) + 2 * min(surf.coord(2,:)) - width;
surf.coord2(1,:) = -surf.coord2(1,:);
surf.coord2(2,:) = -surf.coord(2,:) + 2 * min(surf.coord(2,:)) - width;
case 2
surf.coord2(1,:) = surf.coord(1,:) + 1.1 * (max(surf.coord(1,:)) - min(surf.coord(1,:)));
case 3
surf.coord2(1,:) = surf.coord(1,:) - 1.1 * (max(surf.coord(1,:)) - min(surf.coord(1,:)));
end
function DoubleNodePrepare
% Added by Mingrui Xia, 20120717, show two brains in one figure
global surf
global EC
surf.sphere2 = surf.sphere;
switch EC.lot.view_direction
case 1
width = 0.1 * (max(surf.coord(2,:)) - min(surf.coord(2,:)));
% surf.sphere2(floor(surf.nsph/2) + 1:end,1) = -surf.sphere2(floor(surf.nsph/2) + 1:end,1);
% surf.sphere2(floor(surf.nsph/2) + 1:end,2) = -surf.sphere2(floor(surf.nsph/2) + 1:end,2) + 2 * min(surf.coord(2,:)) - width;
surf.sphere2(floor(surf.nsph/2) + 1:end,1) = -surf.sphere2(floor(surf.nsph/2) + 1:end,1);
surf.sphere2(floor(surf.nsph/2) + 1:end,2) = -surf.sphere2(floor(surf.nsph/2) + 1:end,2) + 2 * min(surf.coord(2,:)) - width;
case 2
surf.sphere2(floor(surf.nsph/2) + 1:end,1) = surf.sphere2(floor(surf.nsph/2) + 1:end,1) + 1.1 * (max(surf.coord(1,:)) - min(surf.coord(1,:)));
case 3
surf.sphere2(floor(surf.nsph/2) + 1:end,1) = surf.sphere2(floor(surf.nsph/2) + 1:end,1) - 1.1 * (max(surf.coord(1,:)) - min(surf.coord(1,:)));
end
function BoundaryPrepare
%Added by Mingrui, 20190327, draw boundary
global surf
global EC
switch EC.msh.boundary
case 2
if isfield(surf,'T')
mask = surf.T;
if sum(surf.T-fix(surf.T))~=0
mask(mask~=0) = 1;
end
facevalue = zeros(size(surf.tri));
facevalue(:) = mask(surf.tri(:));
facevalue_judge = 1 - all(diff(facevalue,[],2)==0,2);
face_remove = surf.tri(facevalue_judge==1,:);
surf.boundary_value = zeros(surf.vertex_number,1);
surf.boundary_value(unique(face_remove)) = 1;
surf.boundary_value(surf.T==0) = 0;
end
case 3
if isfield(surf,'T')
mask = zeros(surf.vertex_number,1);
mask(surf.T>EC.msh.boundary_value) = 1;
facevalue = zeros(size(surf.tri));
facevalue(:) = mask(surf.tri(:));
facevalue_judge = 1 - all(diff(facevalue,[],2)==0,2);
face_remove = surf.tri(facevalue_judge==1,:);
surf.boundary_value = zeros(surf.vertex_number,1);
surf.boundary_value(unique(face_remove)) = 1;
surf.boundary_value(surf.T==0) = 0;
end
case 4
surf.boundary_value = EC.msh.boundary_value;
end
function a=FileView
global FLAG
global surf
global EC
set(gcf,'Renderer',EC.glb.render);
a=[];
if FLAG.Loadfile==0
H=errordlg('Please read files first!');
uiwait(H);
if exist('BrainNet_background.tif','file')==2
imshow(imread('BrainNet_background.tif'));
end
else
switch EC.lot.view
case 1
switch FLAG.Loadfile
case 1
if EC.msh.doublebrain == 1 % Added by Mingrui Xia, 20120717, show two brains in one figure
DoubleMeshPrepare;
end
BoundaryPrepare;
a=PlotMesh1(surf,0);
case 2
NodePrepare;
if EC.msh.doublebrain == 1 % Added by Mingrui Xia, 20120717, show two brains in one figure
DoubleNodePrepare;
end
a=PlotNode1(surf,a,2,EC);
case 3
NodePrepare;
if EC.msh.doublebrain == 1 % Added by Mingrui Xia, 20120717, show two brains in one figure
DoubleMeshPrepare;
DoubleNodePrepare;
end
BoundaryPrepare;
a=PlotMesh1(surf,1);
a=PlotNode1(surf,a,2,EC);
case 6
NodePrepare;
NetPrepare;
if EC.msh.doublebrain == 1 % Added by Mingrui Xia, 20120717, show two brains in one figure
DoubleNodePrepare;
end
a=PlotNode1(surf,a,1,EC);
PlotLine1(surf);
case 7
NodePrepare;
NetPrepare;
if EC.msh.doublebrain == 1 % Added by Mingrui Xia, 20120717, show two brains in one figure
DoubleMeshPrepare;
DoubleNodePrepare;
end
BoundaryPrepare;
a=PlotMesh1(surf,1);
a=PlotNode1(surf,a,1,EC);
PlotLine1(surf);
case 9
if EC.vol.type == 1
if FLAG.MAP==2
MapPrepare;
end %%% Edited by Mingrui Xia,111027, move FLAG.IsCalledByREST judgement into function MapCMPrepare.
% if isfield(FLAG,'IsCalledByREST') && FLAG.IsCalledByREST==1 % YAN Chao-Gan 111023. REST will define the colormap from outside
% low=EC.vol.nx;high=EC.vol.px;
% else
[low high]=MapCMPrepare;
% end
BoundaryPrepare;
a=MapMesh1(surf,low,high,0);
else
fv = ROIPrepare;
BoundaryPrepare;
a = PlotMesh1(surf,1);
a = PlotROI1(fv,a,0);
end
case 11 %%% Added by Mingrui Xia, 20111116, add 11 for volume and node mode
NodePrepare;
if EC.vol.type == 1
if FLAG.MAP==2
MapPrepare;
end
BoundaryPrepare;
[low high]=MapCMPrepare;
a=MapMesh1(surf,low,high,1);
else
fv = ROIPrepare;
BoundaryPrepare;
a = PlotMesh1(surf,1);
a = PlotROI1(fv,a,1);
end
a=PlotNode1(surf,a,2,EC);
case 15 %%% Added by Mingrui Xia, 20120210, add 15 for volume, node and edge mode
NodePrepare;
NetPrepare;
if EC.vol.type == 1
if FLAG.MAP==2
MapPrepare;
end
BoundaryPrepare;
[low high]=MapCMPrepare;
a=MapMesh1(surf,low,high,1);
else
fv = ROIPrepare;
BoundaryPrepare;
a = PlotMesh1(surf,1);
a = PlotROI1(fv,a,1);
end
a=PlotNode1(surf,a,1,EC);
PlotLine1(surf);
end
case 2
switch FLAG.Loadfile
case 1
BoundaryPrepare;
[t,tl,tr,vl,vr,h1,w1,cut,cuv]=CutMesh(surf);
if cut -EC.vol.threshold) = 0;
[L, num] = bwlabeln(vol_tmp,EC.vol.rmm);
for x = 1:num
theCurrentCluster = L == x;
if length(find(theCurrentCluster)) < EC.vol.clustersize
vol_tmp(logical(theCurrentCluster)) = 0;
end
end
else
vol_tmp = surf.vol;
end
% Edited by Mingrui Xia, 20120726, selection for different mapping algorithm.
% 1 for Nearest Voxel
% 2 for Average Vertex
% 3 for Average Voxel (3x3)
% 4 for Gaussian
% 5 for Interpolated (default)
% 6 for Maximum Voxel
% 7 for Minimum Voxel
% 8 for Extremum Voxel
switch EC.vol.mapalgorithm
case 1
surf.coord(4,:)=1;
index=round(surf.hdr.mat\surf.coord);
surf.coord(4,:) = [];
index(4,:) = [];
surf.T=zeros(1,surf.vertex_number);
index(:,index(1,:)<1|index(1,:)>surf.hdr.dim(1)) = 1;
index(:,index(2,:)<1|index(2,:)>surf.hdr.dim(2)) = 1;
index(:,index(3,:)<1|index(3,:)>surf.hdr.dim(3)) = 1;
index = sub2ind(surf.hdr.dim,index(1,:),index(2,:),index(3,:));
surf.T(index~=1) = vol_tmp(index(index~=1));
case 2
surf.coord(4,:)=1;
index=round(surf.hdr.mat\surf.coord);
surf.coord(4,:) = [];
index(4,:) = [];
surf.T=zeros(1,surf.vertex_number);
index(:,index(1,:)<1|index(1,:)>surf.hdr.dim(1)) = 1;
index(:,index(2,:)<1|index(2,:)>surf.hdr.dim(2)) = 1;
index(:,index(3,:)<1|index(3,:)>surf.hdr.dim(3)) = 1;
index = sub2ind(surf.hdr.dim,index(1,:),index(2,:),index(3,:));
surf.T(index~=1) = vol_tmp(index(index~=1));
tmpT = surf.T;
for i = 1:surf.vertex_number
[m,n] = find(surf.tri == i);
neibour = unique(surf.tri(m,:));
surf.T(i) = mean(tmpT(neibour));
end
case 3
surf.coord(4,:)=1;
index=round(surf.hdr.mat\surf.coord);
surf.coord(4,:) = [];
index(4,:) = [];
surf.T=zeros(1,surf.vertex_number);
index(:,index(1,:)<1|index(1,:)>surf.hdr.dim(1)) = 1;
index(:,index(2,:)<1|index(2,:)>surf.hdr.dim(2)) = 1;
index(:,index(3,:)<1|index(3,:)>surf.hdr.dim(3)) = 1;
index = sub2ind(surf.hdr.dim,index(1,:),index(2,:),index(3,:));
kernal = ones(3,3,3)/27;
tmpT = convn(vol_tmp,kernal,'same');
surf.T(index~=1) = tmpT(index(index~=1));
case 4
surf.coord(4,:)=1;
index=round(surf.hdr.mat\surf.coord);
surf.coord(4,:) = [];
index(4,:) = [];
surf.T=zeros(1,surf.vertex_number);
index(:,index(1,:)<1|index(1,:)>surf.hdr.dim(1)) = 1;
index(:,index(2,:)<1|index(2,:)>surf.hdr.dim(2)) = 1;
index(:,index(3,:)<1|index(3,:)>surf.hdr.dim(3)) = 1;
index = sub2ind(surf.hdr.dim,index(1,:),index(2,:),index(3,:));
tmpT = smooth3(vol_tmp,'gaussian');
surf.T(index~=1) = tmpT(index(index~=1));
case 5
surf.coord(4,:)=1;
position = surf.hdr.mat\surf.coord;
position(4,:) = [];
index=round(position);
surf.coord(4,:) = [];
surf.T=zeros(1,surf.vertex_number);
index(:,index(1,:)<=1|index(1,:)>=surf.hdr.dim(1)) = 1;
index(:,index(2,:)<=1|index(2,:)>=surf.hdr.dim(2)) = 1;
index(:,index(3,:)<=1|index(3,:)>=surf.hdr.dim(3)) = 1;
index = sub2ind(surf.hdr.dim,index(1,:),index(2,:),index(3,:));
for i = 1:surf.vertex_number
if index(i)~=1
cube = [floor(position(:,i))';ceil(position(:,i))'];
portion = position(:,i)' - cube(1,:);
cube(2,portion == 0) = cube(2,portion == 0) + 1;
tmpT = vol_tmp(cube(1,1):cube(2,1),cube(1,2):cube(2,2),cube(1,3):cube(2,3));
tmpT = (tmpT(:,:,2) - tmpT(:,:,1)) .* portion(3) + tmpT(:,:,1);
tmpT = (tmpT(:,2) - tmpT(:,1)) .* portion(2) + tmpT(:,1);
tmpT = (tmpT(2) - tmpT(1)) .* portion(1) + tmpT(1);
surf.T(i) = tmpT;
end
end
case 6
surf.coord(4,:)=1;
index=round(surf.hdr.mat\surf.coord);
surf.coord(4,:) = [];
index(4,:) = [];
surf.T=zeros(1,surf.vertex_number);
index(:,index(1,:)<=1|index(1,:)>=surf.hdr.dim(1)) = 1;
index(:,index(2,:)<=1|index(2,:)>=surf.hdr.dim(2)) = 1;
index(:,index(3,:)<=1|index(3,:)>=surf.hdr.dim(3)) = 1;
ind = sub2ind(surf.hdr.dim,index(1,:),index(2,:),index(3,:));
for i = 1:surf.vertex_number
if ind(i) ~=1
tmpT = vol_tmp(index(1,i)-1:index(1,i)+1,index(2,i)-1:index(2,i)+1,index(3,i)-1:index(3,i)+1);
surf.T(i) = max(tmpT(:));
end
end
case 7
surf.coord(4,:)=1;
index=round(surf.hdr.mat\surf.coord);
surf.coord(4,:) = [];
index(4,:) = [];
surf.T=zeros(1,surf.vertex_number);
index(:,index(1,:)<=1|index(1,:)>=surf.hdr.dim(1)) = 1;
index(:,index(2,:)<=1|index(2,:)>=surf.hdr.dim(2)) = 1;
index(:,index(3,:)<=1|index(3,:)>=surf.hdr.dim(3)) = 1;
ind = sub2ind(surf.hdr.dim,index(1,:),index(2,:),index(3,:));
for i = 1:surf.vertex_number
if ind(i) ~=1
tmpT = vol_tmp(index(1,i)-1:index(1,i)+1,index(2,i)-1:index(2,i)+1,index(3,i)-1:index(3,i)+1);
surf.T(i) = min(tmpT(:));
end
end
case 8
surf.coord(4,:)=1;
index=round(surf.hdr.mat\surf.coord);
surf.coord(4,:) = [];
index(4,:) = [];
surf.T=zeros(1,surf.vertex_number);
index(:,index(1,:)<=1|index(1,:)>=surf.hdr.dim(1)) = 1;
index(:,index(2,:)<=1|index(2,:)>=surf.hdr.dim(2)) = 1;
index(:,index(3,:)<=1|index(3,:)>=surf.hdr.dim(3)) = 1;
ind = sub2ind(surf.hdr.dim,index(1,:),index(2,:),index(3,:));
for i = 1:surf.vertex_number
if ind(i) ~=1
tmpT = vol_tmp(index(1,i)-1:index(1,i)+1,index(2,i)-1:index(2,i)+1,index(3,i)-1:index(3,i)+1);
mx = max(tmpT(:));
mn = min(tmpT(:));
if mx>=abs(mn)
surf.T(i) = mx;
else
surf.T(i) = mn;
end
end
end
case 9 % Added by Mingrui Xia, 20130104, Most neighbour voxel value.
surf.coord(4,:)=1;
index=round(surf.hdr.mat\surf.coord);
surf.coord(4,:) = [];
index(4,:) = [];
surf.T=zeros(1,surf.vertex_number);
index(:,index(1,:)<=1|index(1,:)>=surf.hdr.dim(1)) = 1;
index(:,index(2,:)<=1|index(2,:)>=surf.hdr.dim(2)) = 1;
index(:,index(3,:)<=1|index(3,:)>=surf.hdr.dim(3)) = 1;
ind = sub2ind(surf.hdr.dim,index(1,:),index(2,:),index(3,:));
% for i = 1:surf.vertex_number
% if ind(i) ~=1
% tmpT = reshape(vol_tmp(index(1,i)-1:index(1,i)+1,index(2,i)-1:index(2,i)+1,index(3,i)-1:index(3,i)+1),1,[]);
% X = unique(tmpT);
% D = histc(tmpT,X);
% Y = max(D);
% surf.T(i) = X(find(D == Y,1));
% end
% end
rad=2;
%%%%% dilate
for i = 1:surf.vertex_number
if ind(i) ~=1
tmpT = reshape(vol_tmp(index(1,i)-rad:index(1,i)+rad,index(2,i)-rad:index(2,i)+rad,index(3,i)-rad:index(3,i)+rad),1,[]);
X = setdiff(unique(tmpT),0);
if isempty(X),continue;end
[Y,x] = max(histc(tmpT,X));
surf.T(i)=X(x);
% mn = histc(tmpT(:),unique(tmpT));
% if length(find(tmpT==0)) && mn(1)>0.6*length(tmpT),surf.T(i)=0;end
end
end
% iteration = 20;
% for j = 1:iteration
% tmpT = surf.T;
% for i = 1:surf.vertex_number
% [m,n] = find(surf.tri == i);
% neibour = unique(surf.tri(m,:));
% surf.T(i) = median(tmpT(neibour));
% end
% end
end
% surf.T(isnan(surf.T)) = 0; % Added by Mingrui, 20140410, replace NaN to 0;
% for i=1:surf.vertex_number
% surf.T(i)=vol_tmp(index(1,i),index(2,i),index(3,i));
% end
function [low high]=MapCMPrepare
global EC
global FLAG %%% Added by Mingrui Xia, 111027, judge if is called by REST.
if isfield(FLAG,'IsCalledByREST') && FLAG.IsCalledByREST==1
% switch EC.vol.display %% Edited by Mingrui Xia, 20120414, fix a bug of compatibility with REST.
% case 1
low=EC.vol.nx;
high=EC.vol.px;
% case 2
% low=EC.vol.pn;
% high=EC.vol.px;
% case 3
% low=EC.vol.nx;
% high=EC.vol.nn;
% end
else
switch EC.vol.color_map
%%% Edited by Mingrui Xia, 130624, arrange colormap order by name.
case 13
EC.vol.CMt=jet(1000);
% load('D:\SynologyDrive\Projects\2019_MDD_gradient\5.Figures\cm_mean_map.mat');
% EC.vol.CMt = cm;
case 12
EC.vol.CMt=hsv(1000);
case 11
EC.vol.CMt=hot(1000);
case 7
EC.vol.CMt=cool(1000);
case 19
EC.vol.CMt=spring(1000);
case 20
EC.vol.CMt=summer(1000);
case 4
EC.vol.CMt=autumn(1000);
case 22
EC.vol.CMt=winter(1000);
case 10
EC.vol.CMt=gray(1000);
case 5
EC.vol.CMt=bone(1000);
case 8
EC.vol.CMt=copper(1000);
case 15
EC.vol.CMt=pink(1000);
case 14
EC.vol.CMt=lines(1000);
case 17
EC.vol.CMt=rand(1000,3);
col = randi(3,[1000,1]); %%% Added by Mingrui Xia, 20120425, make random colorbar bright.
row = [1:1000]';
ind = sub2ind([1000,3],row,col);
EC.vol.CMt(ind) = 1;
case 1 %%% Added by Mingrui Xia, 111027. seven new colorbar.
EC.vol.CMt = [zeros(1,500),ones(1,500);linspace(1,0,500),linspace(0,1,500);ones(1,500),zeros(1,500)]';
case 6
EC.vol.CMt = colorcube(1000);
case 9
EC.vol.CMt = flag(1000);
case 16
EC.vol.CMt = prism(1000);
case 21
EC.vol.CMt = white(1000);
case 3
EC.vol.CMt = [ones(1,1000); linspace(0,1,1000); zeros(1,1000)]';
case 2
EC.vol.CMt = [zeros(1,1000); linspace(1,0,1000); ones(1,1000)]';
case 23 % Added by Mingrui Xia, 20120113, Xjviewer negative colorbar.
EC.vol.CMt = [zeros(1,1000); linspace(0,1,1000); ones(1,1000)]';
case 18 % Added by Mingrui Xia, 20120806, spectral colorbar of SurfStat.
base = [
0.2000 0.2000 0.2000
0.4667 0.0000 0.5333
0.5333 0.0000 0.6000
0.0000 0.0000 0.6667
0.0000 0.0000 0.8667
0.0000 0.4667 0.8667
0.0000 0.6000 0.8667
0.0000 0.6667 0.6667
0.0000 0.6667 0.5333
0.0000 0.6000 0.0000
0.0000 0.7333 0.0000
0.0000 0.8667 0.0000
0.0000 1.0000 0.0000
0.7333 1.0000 0.0000
0.9333 0.9333 0.0000
1.0000 0.8000 0.0000
1.0000 0.6000 0.0000
1.0000 0.0000 0.0000
0.8667 0.0000 0.0000
0.8000 0.0000 0.0000
0.8000 0.8000 0.8000
];
n = length(base);
X0 = linspace (1, n, 1000);
EC.vol.CMt = interp1(1:n,base,X0);
% EC.vol.CMt = spectral(1000);
% Add by Mingrui Xia, add support for annot file
case 25
EC.vol.CMt = EC.vol.CM_annot;
case 26
EC.vol.CMt = [zeros(1,500),ones(1,500);linspace(0.8,68/255,500),linspace(68/255,1,500);ones(1,500),zeros(1,500)]';
case 27 % Add by Mingrui Xia 20200414 a blue-white-red color map
EC.vol.CMt = [linspace(0.01,1),linspace(1,0.81);linspace(0.33,1),linspace(1,0.01);linspace(0.7,1),linspace(1,0.01)]';
end
if EC.vol.adjustCM == 1
switch EC.vol.display
case 1 %%% Edited by Mingrui Xia, 111025, change algorithm for color mapping.
EC.vol.CM=AdjustColorMap(EC.vol.CMt,EC.vol.null,EC.vol.nx,EC.vol.nn,EC.vol.pn,EC.vol.px);
low=EC.vol.nx;
high=EC.vol.px;
case 2
low=EC.vol.pn;
high=EC.vol.px;
% ind = round(linspace(1, size(EC.vol.CMt, 1), 999));
ind = round(linspace(1, size(EC.vol.CMt, 1),999)); % Edited by Mingrui Xia, 20210222 fix colormap adjusting
EC.vol.CM(2:1000,:)=EC.vol.CMt(ind,:);
EC.vol.CM(1,:)=EC.vol.null;
case 3
low=EC.vol.nx;
high=EC.vol.nn;
% ind = round(linspace(1, size(EC.vol.CMt, 1), 999));
ind = round(linspace(1, size(EC.vol.CMt, 1), 999));% Edited by Mingrui Xia, 20210222 fix colormap adjusting
EC.vol.CM(1:999,:)=EC.vol.CMt(ind,:);
EC.vol.CM(1000,:)=EC.vol.null;
end
else
EC.vol.CM = EC.vol.CMt;
switch EC.vol.display
case 1
low=EC.vol.nx;
high=EC.vol.px;
case 2
low=EC.vol.pn;
high=EC.vol.px;
case 3
low=EC.vol.nx;
high=EC.vol.nn;
end
end
end
function NewColorMap=AdjustColorMap(OriginalColorMap,NullColor,NMax,NMin,PMin,PMax)
%%% Added by Mingrui Xia, 20111025, to adjust colormap.
% Adjust the colormap to leave blank to values under threshold, the orginal color map with be set into [NMax NMin] and [PMin PMax]. Written by YAN Chao-Gan, 111023
% Input: OriginalColorMap - the original color map
% NullColor - The values between NMin and PMin will be set to this color (leave blank)
% NMax, NMin, PMin, PMax - set the axis of colorbar (the orginal color map with be set into [NMax NMin] and [PMin PMax])
% Output: NewColorMap - the generated color map, a 1000 by 3 matrix.
TempColorMap = OriginalColorMap;
% OriginalColorMap = zeros(1000,3);
% ind = round(linspace(1,size(TempColorMap,1),1000));
ind = floor(linspace(1, size(TempColorMap, 1) + 0.9999, 1000)); % Edited by Mingrui Xia, 20121031 fix colormap adjusting
OriginalColorMap = TempColorMap(ind,:);
NewColorMap = repmat(NullColor,[1000 1]);
% ColorLen=size(OriginalColorMap,1);
% NegativeColorSegment = fix(1000*(NMin-NMax)/(PMax-NMax)/(ColorLen/2));
% for iColor=1:fix(ColorLen/2)
% NewColorMap((iColor-1)*NegativeColorSegment+1:(iColor)*NegativeColorSegment,:) = repmat(OriginalColorMap(iColor,:),[NegativeColorSegment 1]);
% end
%
% PositiveColorSegment = fix(1000*(PMax-PMin)/(PMax-NMax)/(ColorLen/2));
% for iColor=ColorLen:-1:ceil(ColorLen/2+1)
% NewColorMap(end-(ColorLen-iColor+1)*PositiveColorSegment+1:end-(ColorLen-iColor)*PositiveColorSegment,:) = repmat(OriginalColorMap(iColor,:),[PositiveColorSegment 1]);
% end
NegativeColorSegment = fix(1000*(NMin-NMax)/(PMax-NMax)); %%% Edited by Mingrui Xia 20111025, use linear sampling method.
if NegativeColorSegment == 0
NegativeColorSegment = 1;
end
NegativeIndex = round(linspace(1,500,NegativeColorSegment));
NewColorMap(1:NegativeColorSegment,:) = OriginalColorMap(NegativeIndex,:);
PositiveColorSegment = fix(1000*(PMax-PMin)/(PMax-NMax));
if PositiveColorSegment == 0
PositiveColorSegment = 1;
end
PositiveIndex = round(linspace(501,1000,PositiveColorSegment));
NewColorMap(end-PositiveColorSegment+1:end,:) = OriginalColorMap(PositiveIndex,:);
% --------------------------------------------------------------------
function NV_m_save_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_save (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global EC
[filename,pathname]=uiputfile({'*.tif','TIFF 24-bit';'*.jpg','JPEG 24-bit';...
'*.bmp','BMP 24-bit';'*.eps','EPS color';'*.png','PNG 24-bit';...
'*.fig','Matlab Figure';'*.wrl','VRML'},'Save Image');
if isequal(filename,0)||isequal(pathname,0)
return;
else
fpath=fullfile(pathname,filename);
[pathstr, name, ext] = fileparts(fpath);
set(gcf, 'PaperPositionMode', 'manual');
set(gcf, 'PaperUnits', 'inch');
set(gcf,'Paperposition',[1 1 EC.img.width/EC.img.dpi EC.img.height/EC.img.dpi]);
switch ext
case '.png'
print(gcf,fpath,'-dpng',['-r',num2str(EC.img.dpi)])
case '.tif'
print(gcf,fpath,'-dtiff',['-r',num2str(EC.img.dpi)])
case '.jpg'
print(gcf,fpath,'-djpeg',['-r',num2str(EC.img.dpi)])
% saveas(gcf,fpath);
case '.bmp'
print(gcf,fpath,'-dbmp',['-r',num2str(EC.img.dpi)])
case '.eps'
print(gcf,fpath,'-depsc',['-r',num2str(EC.img.dpi)])
% added by Mingrui Xia, save as matlab figure.
% Modified by Mingrui, 20150112, using lowercase to be compatible with
% higher version
case '.fig'
saveas(gcf,fpath,'fig');
% added by Mingrui, 20170904, save as vrml format.
case '.wrl'
vrml(gcf,fpath);
end
msgbox('Image has saved!','Success','help');
end
% --------------------------------------------------------------------
function NV_m_es_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_es (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global FLAG
global a
H=BrainNet_Option; %%% Edited by Mingrui Xia, 111027, changed option panel function name.
uiwait(H);
while FLAG.EC==2
FLAG.EC=0;
if ~isempty(a) && mean(ishandle(a))==1
delete(a);
end
axes(handles.NV_axes);
cla;
a=FileView;
uiwait(H);
end
if FLAG.EC==1
FLAG.EC=0;
if ~isempty(a) && mean(ishandle(a))==1
delete(a);
end
axes(handles.NV_axes);
cla;
a=FileView;
end
% --------------------------------------------------------------------
function NV_m_LF_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_LF (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global FLAG
global a
H=BrainNet_LoadFiles;
uiwait(H);
if FLAG.LF==1
% if FLAG.Loadfile~=1
H=BrainNet_Option;
uiwait(H);
while FLAG.EC==2
FLAG.EC=3;
if ~isempty(a) && mean(ishandle(a))==1
delete(a);
end
axes(handles.NV_axes);
cla;
a=FileView;
uiwait(H);
end
if FLAG.EC==1
FLAG.EC=0;
if ~isempty(a) && mean(ishandle(a))==1
delete(a);
end
axes(handles.NV_axes);
cla;
a=FileView;
end
FLAG.LF=0;
end
% --------------------------------------------------------------------
function NV_m_Visualize_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_Visualize (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function NV_m_tools_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_tools (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function NV_m_others_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_others (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function NV_m_cf_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_cf (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% global FLAG % Mingrui Xia 111029. For calling from outside.
% if isfield(FLAG,'IsCalledByREST') && FLAG.IsCalledByREST==1
% handles.NV_axes=gca(hObject);
% end
axes(handles.NV_axes);
global a
if ~isempty(a) && mean(ishandle(a))==1
delete(a);
a=[];
end
cla;
if exist('BrainNet_background.tif','file')==2
imshow(imread('BrainNet_background.tif'));
end
% --------------------------------------------------------------------
function NV_m_mm_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_mm (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
H=BrainNet_MergeMesh;
uiwait(H);
% --------------------------------------------------------------------
function NV_m_help_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_help (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function NV_m_about_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_about (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
msgbox({'BrainNet Viewer 1.7 Released 20191031';'By Mingrui Xia';'mingruixia@gmail.com'},'About...','help');
% --------------------------------------------------------------------
% function NV_m_batch_Callback(hObject, eventdata, handles)
% % hObject handle to NV_m_batch (see GCBO)
% % eventdata reserved - to be defined in a future version of MATLAB
% % handles structure with handles and user data (see GUIDATA)
% global surf
% global FLAG
% global a
% global EC
% FLAG.Loadfile=3;
% surf=[];
% [filename,pathname]=uigetfile({'*.txt','Text Files (*.txt)'},'Select List File');
% fpath=fullfile(pathname,filename);
% fid=fopen(fpath);
% b=textscan(fid,'%s');
% fclose(fid);
% List=b{1,1};
%
% [filename2,pathname2]=uigetfile({'*.nv','NetViewer Files (*.nv)';'*.mesh','BrainVISA Mesh (*.mesh)';'*.pial','FreeSurfer Mesh (*.pial)';'*.*','All Files (*.*)'});
% fpath=fullfile(pathname2,filename2);
% fid=fopen(fpath);
% surf.vertex_number=fscanf(fid,'%f',1);
% surf.coord=fscanf(fid,'%f',[3,surf.vertex_number]);
% surf.ntri=fscanf(fid,'%f',1);
% surf.tri=fscanf(fid,'%d',[3,surf.ntri])';
% fclose(fid);
%
% [filename3,pathname3]=uiputfile({'*.TIF','TIFF 24-bit';'*.BMP','BMP 24-bit';'*.EPS','EPS color';'*.','JPEG 24-bit';'*.PNG','PNG 24-bit'},'Save Image');
% if isequal(filename,0)||isequal(pathname,0)
% return;
% else
% fpath=fullfile(pathname3,filename3);
% [pathstr, name, ext] = fileparts(fpath);
% end
% H=BrainNet_Option;
% uiwait(H);
% for i=1:length(List)
% load([pathname List{i} '.mat']);
% surf.nsph=size(node,1);
% surf.sphere=node;
% fid=fopen([pathname List{i} '.txt']);
% b=textscan(fid,'%s');
% fclose(fid);
% surf.label=b{1,1};
% axes(handles.NV_axes);
% cla;
% if ~isempty(a)
% delete(a);
% a=[];
% end
% a=FileView;
% set(gcf, 'PaperPositionMode', 'manual');
% set(gcf, 'PaperUnits', 'inch');
% set(gcf,'Paperposition',[1 1 EC.Img_sz(1)/EC.Img_sz(3) EC.Img_sz(2)/EC.Img_sz(3)]);
% switch ext
% case '.PNG'
% print(gcf,[pathname3 name List{i} ext],'-dpng',['-r',num2str(EC.Img_sz(3))])
% case '.TIF'
% print(gcf,[pathname3 name List{i} ext],'-dtiff',['-r',num2str(EC.Img_sz(3))])
% case '.JPG'
% print(gcf,[pathname3 name List{i} ext],'-djpeg',['-r',num2str(EC.Img_sz(3))])
% case '.BMP'
% print(gcf,[pathname3 name List{i} ext],'-dbmp',['-r',num2str(EC.Img_sz(3))])
% case '.EPS'
% print(gcf,[pathname3 name List{i} ext],'-depsc',['-r',num2str(EC.Img_sz(3))])
% end
% end
% msgbox('Image has saved!','Success','help');
% --------------------------------------------------------------------
function LoadFile_ClickedCallback(hObject, eventdata, handles)
% hObject handle to LoadFile (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global FLAG
global a
global EC
H=BrainNet_LoadFiles;
uiwait(H);
if FLAG.LF==1
EC.vol.display = [];
EC.vol.pn = [];
EC.vol.px = [];
EC.vol.nn = [];
EC.vol.nx = [];
% if FLAG.Loadfile~=1
H=BrainNet_Option;
uiwait(H);
while FLAG.EC==2
FLAG.EC=3;
if ~isempty(a) && mean(ishandle(a))==1
delete(a);
end
axes(handles.NV_axes);
cla;
a=FileView;
uiwait(H);
end
if FLAG.EC==1
FLAG.EC=0;
if ~isempty(a) && mean(ishandle(a))==1
delete(a);
end
axes(handles.NV_axes);
cla;
a=FileView;
end
FLAG.LF=0;
end
% --------------------------------------------------------------------
function SaveImage_ClickedCallback(hObject, eventdata, handles)
% hObject handle to SaveImage (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global EC
[filename,pathname]=uiputfile({'*.tif','TIFF 24-bit';'*.jpg','JPEG 24-bit';...
'*.bmp','BMP 24-bit';'*.eps','EPS color';...
'*.png','PNG 24-bit';'*.fig','Matlab Figure';'*.wrl','VRML'},...
'Save Image');
if isequal(filename,0)||isequal(pathname,0)
return;
else
fpath=fullfile(pathname,filename);
[pathstr, name, ext] = fileparts(fpath);
set(gcf, 'PaperPositionMode', 'manual');
set(gcf, 'PaperUnits', 'inch');
set(gcf,'Paperposition',[1 1 EC.img.width/EC.img.dpi EC.img.height/EC.img.dpi]);
switch ext
case '.png'
print(gcf,fpath,'-dpng',['-r',num2str(EC.img.dpi)])
case '.tif'
print(gcf,fpath,'-dtiff',['-r',num2str(EC.img.dpi)])
case '.jpg'
print(gcf,fpath,'-djpeg',['-r',num2str(EC.img.dpi)])
case '.bmp'
print(gcf,fpath,'-dbmp',['-r',num2str(EC.img.dpi)])
case '.eps'
print(gcf,fpath,'-depsc',['-r',num2str(EC.img.dpi)])
% add by Mingrui Xia, save as matlab figure.
% Modified by Mingrui, 20150112, using lowercase to be compatible with
% higher version
case '.fig'
saveas(gcf,fpath,'fig');
% added by Mingrui, 20170904, save as vrml format.
case '.wrl'
vrml(gcf,fpath);
end
msgbox('Image has saved!','Success','help');
end
% --------------------------------------------------------------------
function SagittalView_ClickedCallback(hObject, eventdata, handles)
% hObject handle to SagittalView (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global cam
global FLAG
global EC
if EC.lot.view == 1
axis normal
switch FLAG.sagittal
case 0
view(-90,0);
FLAG.sagittal=1;
case 1
view(90,0);
FLAG.sagittal=0;
end
if ~isempty(cam)
for i = 1:length(cam) % Edited by Mingrui Xia, 20120809 adjust camlight in multi-surface view.
camlight(cam(i));
end
end
axis tight
daspect([1 1 1])
end
% --------------------------------------------------------------------
function AxialView_ClickedCallback(hObject, eventdata, handles)
% hObject handle to AxialView (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global cam
global FLAG
global EC
if EC.lot.view == 1
axis normal
switch FLAG.axial
case 0
view(0,90);
FLAG.axial=1;
case 1
% view(0,-90);
view(-180,-90); % Edited by Mingrui Xia, 20181016, adjust ventral view.
FLAG.axial=0;
end
if ~isempty(cam)
for i = 1:length(cam) % Edited by Mingrui Xia, 20120809 adjust camlight in multi-surface view.
camlight(cam(i));
end
end
axis tight
daspect([1 1 1])
end
% --------------------------------------------------------------------
function CoronalView_ClickedCallback(hObject, eventdata, handles)
% hObject handle to CoronalView (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global cam
global FLAG
global EC
if EC.lot.view == 1
axis normal
switch FLAG.coronal
case 0
view(180,00);
FLAG.coronal=1;
case 1
view(0,0);
FLAG.coronal=0;
end
if ~isempty(cam)
for i = 1:length(cam) % Edited by Mingrui Xia, 20120809 adjust camlight in multi-surface view.
camlight(cam(i));
end
end
axis tight
daspect([1 1 1])
end
% --------------------------------------------------------------------
function Presentation_ClickedCallback(hObject, eventdata, handles)
% hObject handle to Presentation (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global cam
global FLAG
FLAG.Rotate=1;%% Edited by Mingrui Xia 140523, fix the bug that demo and stop button are not matching
while FLAG.Rotate == 1
camorbit(5,0,'camera');
for i = 1:length(cam)
camlight(cam(i));
end
drawnow;
end
% --------------------------------------------------------------------
function Stop_ClickedCallback(hObject, eventdata, handles)
% hObject handle to Stop (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global FLAG
FLAG.Rotate=0;
% --------------------------------------------------------------------
function NV_m_movie_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_movie (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global cam
% global EC
[filename,pathname]=uiputfile({'*.avi','AVI movie'},'Save Movie');
if isequal(filename,0)||isequal(pathname,0)
return;
else
fpath=fullfile(pathname,filename);
% vidObj = VideoWriter(fpath);
% open(vidObj);
% t = getframe(gcf);
for num=1:360
camorbit(1,0,'camera');
camlight(cam);
drawnow;
% print(gcf,[pathname,'temp.bmp'],'-dbmp');
% print(gcf,[pathname,'temp.bmp'],'-dbmp',['-r',num2str(EC.img.dpi)])
% tempimg=imread([pathname,'temp.bmp']);
% currFrame=im2frame(tempimg);
F(num)=getframe(gcf);
% currFrame.cdata=imresize(currFrame.cdata,[534,735]);
F(num).cdata=imresize(F(num).cdata, min(1080/size(F(num).cdata,1),1920/size(F(num).cdata,1)));
% writeVideo(vidObj,currFrame);
end
vidObj = VideoWriter(fpath);
% vidObj.Quality = 100;
open(vidObj);
writeVideo(vidObj,F);
close(vidObj);
% delete([pathname,'temp.bmp']);
msgbox('Movie Saved!','Success','help');
end
% --------------------------------------------------------------------
function NV_m_so_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_so (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global EC
[filename,pathname]=uiputfile({'*.mat','MAT-files (*.mat)'},'Save Option');
if isequal(filename,0)||isequal(pathname,0)
return;
else
fpath=fullfile(pathname,filename);
save(fpath,'EC');
msgbox('Configure Saved!','Success','help');
end
% --------------------------------------------------------------------
function NV_m_option_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_option (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function NV_m_lo_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_lo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename,pathname]=uigetfile({'*.mat','MAT-files (*.mat)'},'Load Configuration');
if isequal(filename,0)||isequal(pathname,0)
return;
else
fpath=fullfile(pathname,filename);
% Edited by Mingrui Xia, 20140925, adapt New version to older configuration
tmp = load(fpath);
BrainNet_Option('CheckEC',tmp);
msgbox('Option Loaded!','Success','help');
end
% --------------------------------------------------------------------
function uipushtool3_ClickedCallback(hObject, eventdata, handles)
% hObject handle to uipushtool3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
printpreview;
% --------------------------------------------------------------------
function uitoggletool1_OffCallback(hObject, eventdata, handles)
% hObject handle to uitoggletool1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global cam
for i = 1:length(cam)
camlight(cam(i));
end
% --------------------------------------------------------------------
function NV_m_manual_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_manual (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
if exist('BrainNet_Manual.pdf','file')==2
open('BrainNet_Manual.pdf');
else
msgbox('Cannot find the manual file!','Error','error');
end
% --------------------------------------------------------------------
function NV_m_ColormapEditor_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_ColormapEditor (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
colormapeditor;
% --------------------------------------------------------------------
function NV_m_ApplyColormap_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_ApplyColormap (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global EC
global a
EC.vol.CM = get(gca,'Colormap');
EC.vol.color_map = 22;
MapRange = get(a(end),'CLim');
for i = 1:length(a)
axes(a(i));
colormap(EC.vol.CM);
caxis(MapRange);
end
% --------------------------------------------------------------------
function uitoggletool5_ClickedCallback(hObject, eventdata, handles)
% hObject handle to uitoggletool5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes during object deletion, before destroying properties.
function NV_fig_DeleteFcn(hObject, eventdata, handles)
% hObject handle to NV_fig (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
clear global EC
clear global a
clear global FLAG
clear global File
display('Thank you for using BrainNet Viewer!');
% --------------------------------------------------------------------
function NV_m_SaveColormap_Callback(hObject, eventdata, handles)
% hObject handle to NV_m_SaveColormap (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%%% Added by Mingrui Xia, 20120710 save current colormap
Colormap = get(gca,'Colormap');
[filename,pathname]=uiputfile({'*.txt','Text Files'},'Save Colormap');
if isequal(filename,0)||isequal(pathname,0)
return;
else
fpath=fullfile(pathname,filename);
fid = fopen(fpath,'wt');
fprintf(fid,'[');
for i = 1:size(Colormap,1)-1
fprintf(fid,'%f %f %f;',Colormap(i,:));
end
fprintf(fid,'%f %f %f]',Colormap(end,:));
fclose(fid);
end
% --------------------------------------------------------------------
function MV_m_ViewMatrix_Callback(hObject, eventdata, handles)
% hObject handle to MV_m_ViewMatrix (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global surf
if ~isempty(surf.net)
H = figure;
imagesc(surf.net);
daspect([1,1,1]);
colorbar;
end
% --------------------------------------------------------------------
function NV_t_ViewMatrix_ClickedCallback(hObject, eventdata, handles)
% hObject handle to NV_t_ViewMatrix (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global surf
if ~isempty(surf.net)
H = figure;
imagesc(surf.net);
daspect([1,1,1]);
colorbar;
end
% --------------------------------------------------------------------
function NV_menu_saveboundary_Callback(hObject, eventdata, handles)
% hObject handle to NV_menu_saveboundary (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global surf
global File
if isfield(surf,'boundary_value')
[filename,pathname]=uiputfile({'*.txt','Text Files'},'Save Boundary');
if isequal(filename,0)||isequal(pathname,0)
return;
else
fpath=fullfile(pathname,filename);
[~,meshname] = fileparts(File.MF);
fid = fopen(fpath,'wt');
fprintf(fid,'%s\n',['# for ',meshname]);
for i = 1:length(surf.boundary_value)
fprintf(fid,'%d\n',surf.boundary_value(i));
end
fclose(fid);
end
else
end
% --------------------------------------------------------------------
function PlotEdit_toggle_ClickedCallback(hObject, eventdata, handles)
% hObject handle to PlotEdit_toggle (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function PlotEdit_toggle_OffCallback(hObject, eventdata, handles)
% hObject handle to PlotEdit_toggle (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
plotedit('off');
% --------------------------------------------------------------------
function PlotEdit_toggle_OnCallback(hObject, eventdata, handles)
% hObject handle to PlotEdit_toggle (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
plotedit('on');