function callbackPointSelection(src, eventData)

global tags k t 

%     keyboard
person=zeros(3,length(tags));

for i=1:length(tags)
    eval(sprintf('person(1,%d) = %s(1,%d);',i,char(tags{i}),k));
    eval(sprintf('person(2,%d) = %s(2,%d);',i,char(tags{i}),k));
    eval(sprintf('person(3,%d) = %s(3,%d);',i,char(tags{i}),k));
end

point = get(gca, 'CurrentPoint'); % mouse click position
camPos = get(gca, 'CameraPosition'); % camera position
camTgt = get(gca, 'CameraTarget'); % where the camera is pointing to

camDir = camPos - camTgt; % camera direction
camUpVect = get(gca, 'CameraUpVector'); % camera 'up' vector

% build an orthonormal frame based on the viewing direction and the 
% up vector (the "view frame")
zAxis = camDir/norm(camDir);    
upAxis = camUpVect/norm(camUpVect); 
xAxis = cross(upAxis, zAxis);
yAxis = cross(zAxis, xAxis);

rot = [xAxis; yAxis; zAxis]; % view rotation 

% the point cloud represented in the view frame
rotatedPointCloud = rot * person; 

% the clicked point represented in the view frame
rotatedPointFront = rot * point' ;

% find the nearest neighbour to the clicked point 
pointCloudIndex = dsearchn(rotatedPointCloud(1:2,:)', ... 
    rotatedPointFront(1:2));

% keyboard
h = findobj(gca,'Tag','pt'); % try to find the old point
selectedPoint = person(:, pointCloudIndex); 

if isempty(h) % if it's the first click (i.e. no previous point to delete)
    
    % highlight the selected point
    h = plot3(selectedPoint(1,:), selectedPoint(2,:), selectedPoint(3,:), 'r'); 
    set(h,'marker','o','linestyle','none','markersize',12);
    set(h,'MarkerFaceColor',[0 1 0],'markeredgecolor',[0 1 0])
    set(h,'Tag','pt'); % set its Tag property for later use   
    set(h,'UserData',tags{pointCloudIndex}); % set its Tag property for later use   

else % if it is not the first click

    delete(h); % delete the previously selected point
    
    % highlight the newly selected point
    h = plot3(selectedPoint(1,:), selectedPoint(2,:), selectedPoint(3,:), 'r');  
    set(h,'marker','o','linestyle','none','markersize',12);
    set(h,'MarkerFaceColor',[0 1 0],'markeredgecolor',[0 1 0])
    set(h,'Tag','pt');  % set its Tag property for later use
    set(h,'UserData',tags{pointCloudIndex}); % set its Tag property for later use   
end
