-
Notifications
You must be signed in to change notification settings - Fork 0
/
GUI_select_points.m
74 lines (67 loc) · 1.88 KB
/
GUI_select_points.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
function logger = GUI_select_points(V,T,name)
clear logger;
figure(5);
close(5);
figure(5);
clf
if nargin<3
name=[];
end
disp('click on a point on the mesh to select it');
disp('click ''n'' to progress to adding a *n*ew point while saving the prev');
disp('click ''d'' to *d*elete the last inserted point');
disp('click ''s'' to *s*ave and print the selected points to workspace');
% show the point cloud
hold off
% plot3(V(1,:), V(2,:), V(3,:), 'c.');
h=patch('vertices',V,'faces',T,'facecolor',[0.9 0.9 0.9],'edgecolor','none');
light('Position',[1 0 0],'Style','local','color','cyan')
light('Position',[0 1 0],'Style','local','color','magenta')
light('Position',[0 0 1],'Style','local','color','yellow')
h.FaceLighting = 'flat';
h.AmbientStrength = 0.0;
h.DiffuseStrength = 0.8;
h.SpecularStrength = 0.0;
h.SpecularExponent = 25;
h.BackFaceLighting = 'lit';
cameratoolbar('Show');
hold on;
axis equal
logger=pointLogger(name);
tri=triangulation(T,V);
b=tri.freeBoundary();
if ~isempty(b)
valid=b(:,1);
else
valid=1:length(V);
end
hf=gcf;
set(h,'ButtonDownFcn',@callback_patch_click,...
'PickableParts','visible');
set(hf,'KeyPressFcn',@key_handler);
function key_handler(h_obj,evt)
if strcmp(evt.Key,'n')
added=logger.addCurPoint();
if added
disp('new point!');
else
disp('no point added!');
end
elseif strcmp(evt.Key,'d')
logger.removeLastPoint();
elseif strcmp(evt.Key,'s')
logger.save();
else
return;
end
logger.draw();
end
function callback_patch_click(src, eventData)
p=eventData.IntersectionPoint;
ind=knn(V(valid,:),p);
ind=valid(ind);
logger.setCurPoint(V(ind,:),ind);
logger.draw();
fprintf('you clicked on point number %d\n', ind);
end
end