1 #include "bwm_popup_menu.h"
2 //:
3 // \file
4
5 #include "bwm_tableau_img.h"
6 #include "bwm_tableau_rat_cam.h"
7 #include "bwm_tableau_generic_cam.h"
8 #include "bwm_tableau_video.h"
9 #include "bwm_tableau_fiducial.h"
10 #include "bwm_command_macros.h"
11 #include "bwm_tableau_mgr.h"
12
13 //: Use in menus to toggle a parameter
14 class bwm_vertex_toggle_command : public vgui_command
15 {
16 public:
bwm_vertex_toggle_command(bwm_tableau_cam * t,const void * boolref)17 bwm_vertex_toggle_command(bwm_tableau_cam* t, const void* boolref) :
18 tab(t), bref((bool*) boolref) {}
execute()19 void execute() { *bref = !(*bref); tab->observer()->show_vertices(*bref); }
20
21 bwm_tableau_cam *tab;
22 bool* bref;
23 };
24
get_menu(vgui_menu & menu)25 void bwm_popup_menu::get_menu(vgui_menu &menu)
26 {
27 // 2D objects submenu
28 vgui_menu submenu;
29
30 bwm_tableau_img* img_tab = static_cast<bwm_tableau_img* > (tab_.as_pointer());
31 submenu.add("Polygon..",
32 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::create_polygon),
33 vgui_key('g'), vgui_modifier(vgui_SHIFT) );
34 submenu.separator();
35
36 submenu.add("PolyLine..",
37 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::create_polyline),
38 vgui_key('l'), vgui_modifier(vgui_SHIFT) );
39 submenu.separator();
40
41 submenu.add("Box..",
42 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::create_box),
43 vgui_key('b'), vgui_modifier(vgui_SHIFT) );
44 submenu.separator();
45
46 submenu.add("Pointset..",
47 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::create_pointset));
48 submenu.separator();
49
50 submenu.add("Point..",
51 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::create_point),
52 vgui_key('t'), vgui_modifier(vgui_SHIFT) );
53 submenu.separator();
54
55 submenu.add("Copy..",
56 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::copy),
57 vgui_key('c'), vgui_modifier(vgui_SHIFT) );
58 submenu.separator();
59
60 submenu.add("Paste..",
61 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::paste),
62 vgui_key('p'), vgui_modifier(vgui_SHIFT) );
63 submenu.separator();
64
65 vgui_menu poly_draw_menu;
66 poly_draw_menu.add("Polygon...", new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::set_poly_mode));
67 poly_draw_menu.add("Vertex...", new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::set_vertex_mode));
68 submenu.separator();
69
70 submenu.add("Set Draw Mode", poly_draw_menu);
71 submenu.separator();
72
73 submenu.add( "Save 2D Spatial Objects (binary)",
74 new vgui_command_simple<bwm_tableau_img>(img_tab, &bwm_tableau_img::save_spatial_objects_2d));
75 submenu.add( "Load 2D Spatial Objects (binary)",
76 new vgui_command_simple<bwm_tableau_img>(img_tab, &bwm_tableau_img::load_spatial_objects_2d));
77 submenu.add( "Save Pointset 2D (ascii)",
78 new vgui_command_simple<bwm_tableau_img>(img_tab,
79 &bwm_tableau_img::save_pointset_2d_ascii));
80 submenu.add( "Load Pointset 2D (ascii)",
81 new vgui_command_simple<bwm_tableau_img>(img_tab,
82 &bwm_tableau_img::load_pointset_2d_ascii));
83 submenu.add( "Print Selected Line Seg",
84 new vgui_command_simple<bwm_tableau_img>(img_tab,
85 &bwm_tableau_img::print_selected_line));
86 submenu.add( "Save vgl line segs 2d (ascii)",
87 new vgui_command_simple<bwm_tableau_img>(img_tab,
88 &bwm_tableau_img::save_lines_vgl_ascii));
89 submenu.add( "Load vgl line segs 2d (ascii)",
90 new vgui_command_simple<bwm_tableau_img>(img_tab,
91 &bwm_tableau_img::load_lines_vgl_ascii));
92 submenu.add( "Load bounding boxes (ascii)",
93 new vgui_command_simple<bwm_tableau_img>(img_tab,
94 &bwm_tableau_img::load_bounding_boxes_2d_ascii));
95 submenu.add( "Load oriented boxes (ascii)",
96 new vgui_command_simple<bwm_tableau_img>(img_tab,
97 &bwm_tableau_img::load_oriented_boxes_2d_ascii));
98 // Delete 2D submenu
99 vgui_menu selmenu;
100 selmenu.add( "Delete Selected",
101 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::clear_poly),
102 vgui_key('d'), vgui_modifier(vgui_SHIFT));
103 selmenu.separator();
104
105 selmenu.add( "Delete All",
106 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::clear_all),
107 vgui_key('a'), vgui_modifier(vgui_SHIFT));
108
109 selmenu.separator();
110
111 selmenu.add( "Delete objects on all frames",
112 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::clear_all_frames) );
113
114 selmenu.separator();
115
116 submenu.add( "Delete ", selmenu);
117
118 menu.add( "2D Objects", submenu);
119 menu.separator();
120
121 // Image Processing submenu
122 vgui_menu image_submenu;
123
124 // Add command to run 2D Gauss fit
125 MENU_TAB_ADD_PROCESS("Gauss fit - Subpixel", "gauss process", image_submenu, img_tab);
126
127 MENU_TAB_ADD_PROCESS("Step Edges VD", "step_edge", image_submenu, img_tab);
128 MENU_TAB_ADD_PROCESS("Detect Lines", "detect_lines", image_submenu, img_tab);
129
130 image_submenu.add( "Redisplay Edges",
131 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::recover_edges),
132 vgui_key('b'), vgui_modifier(vgui_SHIFT));
133
134 image_submenu.add( "Redisplay Lines",
135 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::recover_lines));
136
137 image_submenu.add( "Clear Segmentation Display",
138 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::clear_box));
139
140 image_submenu.add( "Crop Image",
141 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::crop_image));
142
143 if (bwm_tableau_mgr::is_registered("bwm_tableau_video"))
144 {
145 vgui_menu mask_menu;
146 mask_menu.add( "Init Mask",
147 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::init_mask));
148
149 mask_menu.add( "Set Change Type",
150 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::set_change_type));
151
152 mask_menu.add( "Add Regions to Mask(selected polygons)",
153 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::add_poly_to_mask));
154
155 mask_menu.add( "Remove Regions from Mask(selected polygons)",
156 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::remove_poly_from_mask));
157
158 //mask_menu.add( "Create Mask Image(bool)",
159 // new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::create_mask));
160
161 mask_menu.add( "Save Mask Image",
162 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::save_mask));
163
164 mask_menu.add( "Save Changes(Binary)",
165 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::save_changes_binary));
166
167 mask_menu.add( "Load Changes(Binary)",
168 new vgui_command_simple<bwm_tableau_img>(img_tab,&bwm_tableau_img::load_changes_binary));
169 image_submenu.add("Mask Ops", mask_menu);
170 }
171 //image_submenu.separator();
172
173 menu.add("Image Processing", image_submenu);
174 menu.separator();
175
176 // Image Display submenu
177 vgui_menu img_other;
178
179 MENU_TAB_ADD_PROCESS("Range Map", "range_map", img_other, img_tab);
180 MENU_TAB_ADD_PROCESS("Intensity Profile", "intensity_profile", img_other, img_tab);
181 MENU_TAB_ADD_PROCESS("Histogram Plot", "histogram", img_other, img_tab);
182
183 MENU_TAB_ADD_PROCESS("Histogram Plot(Poly)", "histogram_poly", img_other, img_tab);
184
185 img_other.add( "Show Path" ,
186 new vgui_command_simple<bwm_tableau_img>(img_tab,
187 &bwm_tableau_img::
188 toggle_show_image_path));
189 img_other.separator();
190 img_other.add( "Zoom to Fit" ,
191 new vgui_command_simple<bwm_tableau_img>(img_tab,
192 &bwm_tableau_img::
193 zoom_to_fit));
194 img_other.add( "Scroll to Image Location" ,
195 new vgui_command_simple<bwm_tableau_img>(img_tab,
196 &bwm_tableau_img::
197 scroll_to_point));
198 menu.add("Image Display", img_other);
199
200
201 // add more popup menu items based on the tableau type
202 // all camera tableau children will do the following menu items
203 if (tab_->type_name().compare("bwm_tableau_proj_cam") == 0 ||
204 tab_->type_name().compare("bwm_tableau_rat_cam") == 0 ||
205 tab_->type_name().compare("bwm_tableau_video") == 0 ||
206 tab_->type_name().compare("bwm_tableau_generic_cam") == 0)
207 {
208 // 3D Objects menu
209 bwm_tableau_cam* cam_tab = static_cast<bwm_tableau_cam* > (tab_.as_pointer());
210 //might be a generic camera tableau
211 bwm_tableau_generic_cam* gen_tab = nullptr;
212 if (cam_tab->type_name()=="bwm_tableau_generic_cam")
213 gen_tab = static_cast<bwm_tableau_generic_cam* > (tab_.as_pointer());
214
215 vgui_menu mesh_submenu;
216 std::string on = "[x] ", off = "[ ] ";
217 mesh_submenu.add( ((cam_tab->show_vertices_)?on:off)+"show vertices",
218 new bwm_vertex_toggle_command(cam_tab, &(cam_tab->show_vertices_)));
219
220 vgui_menu draw_menu;
221 draw_menu.add("Mesh...", new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::set_mesh_mode));
222 draw_menu.add("Face...", new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::set_face_mode));
223 draw_menu.add("Edge...", new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::set_edge_mode));
224 draw_menu.add("Vertex...", new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::set_vertex_mode));
225 mesh_submenu.separator();
226
227 mesh_submenu.add("Set Draw Mode", draw_menu);
228 mesh_submenu.separator();
229
230 mesh_submenu.add("Load Mesh",
231 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::load_mesh),
232 vgui_key('m'), vgui_modifier(vgui_SHIFT) );
233 mesh_submenu.separator();
234
235 mesh_submenu.add("Create Terrain",
236 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::create_terrain),
237 vgui_key('t'), vgui_modifier(vgui_SHIFT) );
238 mesh_submenu.separator();
239
240 mesh_submenu.add("Create Mesh Polygon",
241 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::create_polygon_mesh),
242 vgui_key('p'), vgui_modifier(vgui_SHIFT) );
243 mesh_submenu.separator();
244
245 mesh_submenu.add("Create Circular Polygon",
246 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::create_circular_polygon),
247 vgui_key('c'), vgui_modifier(vgui_SHIFT) );
248 mesh_submenu.separator();
249
250 mesh_submenu.add("Triangulate..",
251 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::triangulate_mesh),
252 vgui_key('t'), vgui_modifier(vgui_SHIFT));
253 mesh_submenu.separator();
254
255 mesh_submenu.add( "Create Inner Face",
256 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::create_inner_face));
257 mesh_submenu.separator();
258
259 mesh_submenu.add( "Move Face with Selected Vertex",
260 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::move_obj_by_vertex),
261 vgui_key('m'), vgui_modifier(vgui_SHIFT));
262 mesh_submenu.separator();
263
264 mesh_submenu.add( "Extrude Face",
265 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::extrude_face),
266 vgui_key('e'), vgui_modifier(vgui_SHIFT));
267 mesh_submenu.separator();
268
269 mesh_submenu.add( "Divide Face",
270 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::divide_face));
271 mesh_submenu.separator();
272
273 mesh_submenu.add("Scan Regions",
274 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::scan_regions));
275
276 mesh_submenu.separator();
277
278 mesh_submenu.add("Set Draw Mode", draw_menu);
279
280 mesh_submenu.separator();
281 #if 0
282 vgui_menu boxm_submenu;
283
284 boxm_submenu.add("Create BOXM scene from mesh",
285 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::create_boxm_scene));
286 boxm_submenu.separator();
287 boxm_submenu.add("Load BOXM scene",
288 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::load_boxm_scene));
289
290 mesh_submenu.add("BOXM", boxm_submenu);
291 #endif
292 if (tab_->type_name().compare("bwm_tableau_rat_cam") == 0) {
293 bwm_tableau_rat_cam* rat_cam_tab = static_cast<bwm_tableau_rat_cam* > (tab_.as_pointer());
294 mesh_submenu.separator();
295 mesh_submenu.add( "Center on Geographic Position",
296 new vgui_command_simple<bwm_tableau_rat_cam>(rat_cam_tab,
297 &bwm_tableau_rat_cam::center_pos));
298
299 mesh_submenu.separator();
300 mesh_submenu.add( "Save Adjusted Camera",
301 new vgui_command_simple<bwm_tableau_rat_cam>(rat_cam_tab,
302 &bwm_tableau_rat_cam::save_adj_camera));
303 }
304 mesh_submenu.separator();
305 mesh_submenu.add( "Toggle GeoPosition Display",
306 new vgui_command_simple<bwm_tableau_cam>(cam_tab,
307 &bwm_tableau_cam::show_geo_position));
308
309 mesh_submenu.separator();
310 mesh_submenu.add( "GeoPosition of Selected Vertex",
311 new vgui_command_simple<bwm_tableau_cam>(cam_tab,
312 &bwm_tableau_cam::geo_position_vertex));
313
314 mesh_submenu.separator();
315 mesh_submenu.add( "Local Position of Selected Vertex",
316 new vgui_command_simple<bwm_tableau_cam>(cam_tab,
317 &bwm_tableau_cam::local_position_vertex));
318
319 // 3D Delete submenu
320 vgui_menu del_menu;
321 del_menu.add( "Delete Selected",
322 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::delete_object));
323 del_menu.separator();
324
325 del_menu.add( "Delete All",
326 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::delete_all));
327
328 mesh_submenu.separator();
329 mesh_submenu.add("Delete", del_menu);
330 menu.separator();
331 menu.add("3D Objects", mesh_submenu);
332 menu.separator();
333 vgui_menu cal_submenu;
334 cal_submenu.add("Set Focal Length(pix)", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::set_focal_length));
335 cal_submenu.add("Set Camera Height (m)", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::set_cam_height));
336 cal_submenu.add("Define Horizon(selected line)", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::set_horizon));
337 cal_submenu.add("Calibrate From Horizon", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::calibrate_cam_from_horizon));
338 cal_submenu.add("Toggle Horizon", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::toggle_cam_horizon));
339 cal_submenu.separator();
340 //cal_submenu.add("Set Ground Plane", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::set_ground_plane));
341 cal_submenu.add("Add Ground Plane", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::add_ground_plane));
342 //cal_submenu.add("Set Sky", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::set_sky));
343 cal_submenu.add("Add Sky", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::add_sky));
344 //cal_submenu.add("Add Vertical Region", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::add_vertical_depth_region));
345 cal_submenu.add("Add Region", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::add_region));
346 cal_submenu.add("Edit Region Properties", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::edit_region_props));
347 cal_submenu.add("Edit Region Weights", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::edit_region_weights));
348 cal_submenu.add("Save Depth Map Scene", new vgui_command_simple<bwm_tableau_cam>(cam_tab, &bwm_tableau_cam::save_depth_map_scene));
349 menu.add("Camera Calibration", cal_submenu);
350 // Registration menu
351 vgui_menu reg_submenu, threed_menu;
352 menu.separator();
353
354 menu.add( "Set as Master", new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::set_master));
355
356 if (gen_tab) {
357 menu.separator();
358 menu.add( "Ray image", new vgui_command_simple<bwm_tableau_generic_cam>(gen_tab,&bwm_tableau_generic_cam::ray_image));
359 }
360 reg_submenu.add( "Set as EO", new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::set_eo));
361 reg_submenu.separator();
362 reg_submenu.add( "Set as Other Mode", new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::set_other_mode));
363 reg_submenu.separator();
364
365 if (tab_->type_name().compare("bwm_tableau_rat_cam") == 0) {
366 bwm_tableau_rat_cam* rat_cam_tab = static_cast<bwm_tableau_rat_cam* > (tab_.as_pointer());
367 reg_submenu.add( "Register Image to World Pt",
368 new vgui_command_simple<bwm_tableau_rat_cam>(rat_cam_tab,
369 &bwm_tableau_rat_cam::adjust_camera_to_world_pt));
370 reg_submenu.separator();
371
372 reg_submenu.add( "Register to Master",
373 new vgui_command_simple<bwm_tableau_rat_cam>(rat_cam_tab,
374 &bwm_tableau_rat_cam::register_search_to_master));
375 reg_submenu.separator();
376
377 reg_submenu.add( "Transfer Edges from Master",
378 new vgui_command_simple<bwm_tableau_rat_cam>(rat_cam_tab,
379 &bwm_tableau_rat_cam::project_edges_from_master));
380 }
381 menu.separator();
382 menu.add("Registration", reg_submenu);
383
384 // Correspondences menu
385 menu.separator();
386 vgui_menu corr_menu;
387 corr_menu.add( "Move (selected)" ,
388 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::move_corr));
389 corr_menu.separator();
390
391 corr_menu.add( "Set Corr to Selected Vertex" ,
392 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::set_corr_to_vertex));
393 corr_menu.separator();
394
395 corr_menu.add( "Save World Point (selected)" ,
396 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::world_pt_corr));
397 menu.add( "Image Correspondence", corr_menu);
398
399 menu.separator();
400 vgui_menu plane_submenu;
401 plane_submenu.add( "Define XY Projection Plane",
402 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::define_xy_proj_plane));
403 plane_submenu.separator();
404
405 plane_submenu.add( "Define YZ Projection Plane",
406 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::define_yz_proj_plane));
407 plane_submenu.separator();
408
409 plane_submenu.add( "Define XZ Projection Plane",
410 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::define_xz_proj_plane));
411 plane_submenu.separator();
412
413 plane_submenu.add( "Selected Face",
414 new vgui_command_simple<bwm_tableau_cam>(cam_tab,&bwm_tableau_cam::select_proj_plane));
415 menu.add("Projection Plane", plane_submenu);
416
417 if (tab_->type_name().compare("bwm_tableau_rat_cam") == 0) {
418 bwm_tableau_rat_cam* rat_cam_tab = static_cast<bwm_tableau_rat_cam* > (tab_.as_pointer());
419
420 menu.separator();
421 vgui_menu lvcs_submenu;
422 //lvcs_submenu.add( "Load LVCS", new bwm_load_lvcs_command(this));
423 //lvcs_submenu.add( "Save LVCS", new bwm_save_lvcs_command(this));
424 lvcs_submenu.add( "Define LVCS",
425 new vgui_command_simple<bwm_tableau_rat_cam>(rat_cam_tab,
426 &bwm_tableau_rat_cam::define_lvcs));
427 lvcs_submenu.add( "Adjust Camera to World Point", new vgui_command_simple<bwm_tableau_rat_cam>(rat_cam_tab,
428 &bwm_tableau_rat_cam::adjust_camera_offset));
429 lvcs_submenu.separator();
430 lvcs_submenu.add( "Adjust Camera To LVCS",
431 new vgui_command_simple<bwm_tableau_rat_cam>(rat_cam_tab,
432 &bwm_tableau_rat_cam::adjust_camera_to_world_pt));
433 menu.add("LVCS", lvcs_submenu);
434 }
435 }
436
437 // video tableau specific menu items
438 if (tab_->type_name().compare("bwm_tableau_video") == 0)
439 {
440 bwm_tableau_video* video_tab = static_cast<bwm_tableau_video* > (tab_.as_pointer());
441 menu.separator();
442 vgui_menu video_submenu;
443 video_submenu.add( "Play",
444 new vgui_command_simple<bwm_tableau_video>(video_tab,&bwm_tableau_video::play));
445 video_submenu.separator();
446
447 video_submenu.add( "Stop",
448 new vgui_command_simple<bwm_tableau_video>(video_tab,&bwm_tableau_video::stop));
449 video_submenu.separator();
450
451 video_submenu.add( "Pause",
452 new vgui_command_simple<bwm_tableau_video>(video_tab,&bwm_tableau_video::pause));
453 video_submenu.separator();
454
455 video_submenu.add( "Goto Frame",
456 new vgui_command_simple<bwm_tableau_video>(video_tab,&bwm_tableau_video::seek));
457 video_submenu.separator();
458
459 video_submenu.add( "Next Frame",
460 new vgui_command_simple<bwm_tableau_video>(video_tab,&bwm_tableau_video::next_frame));
461 video_submenu.separator();
462
463 video_submenu.add( "Previous Frame",
464 new vgui_command_simple<bwm_tableau_video>(video_tab,&bwm_tableau_video::previous_frame));
465
466 video_submenu.separator();
467
468 video_submenu.add( "Save as Image List",
469 new vgui_command_simple<bwm_tableau_video>(video_tab,&bwm_tableau_video::save_as_image_list));
470
471 menu.add("Video", video_submenu);
472 menu.separator();
473
474 vgui_menu video_corr_submenu;
475 video_corr_submenu.add( "Attach a 3D point",
476 new vgui_command_simple<bwm_tableau_video>(video_tab,&bwm_tableau_video::set_world_pt));
477 video_corr_submenu.separator();
478 video_corr_submenu.add( "Add Match",
479 new vgui_command_simple<bwm_tableau_video>(video_tab,&bwm_tableau_video::add_match));
480 video_corr_submenu.separator();
481
482 video_corr_submenu.add( "Add Match at Vertex",
483 new vgui_command_simple<bwm_tableau_video>(video_tab,&bwm_tableau_video::add_match_at_vertex));
484 video_corr_submenu.separator();
485
486 video_corr_submenu.add( "Remove Selected Corr Match",
487 new vgui_command_simple<bwm_tableau_video>(video_tab,
488 &bwm_tableau_video::remove_selected_corr_match));
489 video_corr_submenu.separator();
490
491 video_corr_submenu.add( "Remove Selected Corr ",
492 new vgui_command_simple<bwm_tableau_video>(video_tab,
493 &bwm_tableau_video::remove_selected_corr));
494 video_corr_submenu.separator();
495
496 video_corr_submenu.add( "Track Selected Corr ",
497 new vgui_command_simple<bwm_tableau_video>(video_tab,
498 &bwm_tableau_video::set_selected_corr_for_tracking));
499 video_corr_submenu.separator();
500
501 video_corr_submenu.add( "Stop Tracking Corr ",
502 new vgui_command_simple<bwm_tableau_video>(video_tab,
503 &bwm_tableau_video::unset_selected_corr_for_tracking));
504 video_corr_submenu.separator();
505
506 video_corr_submenu.add( "Display Corrs at Frame #",
507 new vgui_command_simple<bwm_tableau_video>(video_tab,
508 &bwm_tableau_video::display_video_corrs));
509 video_corr_submenu.separator();
510
511 video_corr_submenu.add( "Display Corrs on Current Frame",
512 new vgui_command_simple<bwm_tableau_video>(video_tab,
513 &bwm_tableau_video::display_current_video_corrs));
514 video_corr_submenu.separator();
515
516 video_corr_submenu.add( "Clear Corr Display",
517 new vgui_command_simple<bwm_tableau_video>(video_tab,
518 &bwm_tableau_video::clear_video_corrs_display));
519 video_corr_submenu.separator();
520
521 video_corr_submenu.add( "Toggle Correspondence Display (All Frames)",
522 new vgui_command_simple<bwm_tableau_video>(video_tab,
523 &bwm_tableau_video::toggle_corr_display));
524 video_corr_submenu.separator();
525 video_corr_submenu.add( "Toggle World Point Display (if corrs displayed)",
526 new vgui_command_simple<bwm_tableau_video>(video_tab,
527 &bwm_tableau_video::toggle_world_pt_display));
528 video_corr_submenu.separator();
529 video_corr_submenu.add( "Project Selected World Point",
530 new vgui_command_simple<bwm_tableau_video>(video_tab,
531 &bwm_tableau_video::display_selected_world_pt));
532 video_corr_submenu.separator();
533
534 video_corr_submenu.add( "Extract World Plane",
535 new vgui_command_simple<bwm_tableau_video>(video_tab,
536 &bwm_tableau_video::extract_world_plane));
537
538 video_corr_submenu.separator();
539
540 video_corr_submenu.add( "Extract Neighborhoods",
541 new vgui_command_simple<bwm_tableau_video>(video_tab,
542 &bwm_tableau_video::extract_neighborhoods));
543
544 video_corr_submenu.separator();
545
546 video_corr_submenu.add( "Extract Histograms",
547 new vgui_command_simple<bwm_tableau_video>(video_tab,
548 &bwm_tableau_video::extract_histograms));
549 menu.add("Video Correspondence", video_corr_submenu);
550 }
551
552 if (tab_->type_name().compare("bwm_tableau_fiducial") == 0){
553 bwm_tableau_fiducial* fid_tab = static_cast<bwm_tableau_fiducial* > (tab_.as_pointer());
554 menu.separator();
555 vgui_menu corr_menu;
556 corr_menu.add( "enable fiducial corrs",
557 new vgui_command_simple<bwm_tableau_fiducial>(fid_tab,&bwm_tableau_fiducial::enable_fid_corrs));
558 corr_menu.add( "disable fiducial corrs",
559 new vgui_command_simple<bwm_tableau_fiducial>(fid_tab,&bwm_tableau_fiducial::disable_fid_corrs));
560 corr_menu.add( "save fiducial corrs",
561 new vgui_command_simple<bwm_tableau_fiducial>(fid_tab,&bwm_tableau_fiducial::save_fiducial_corrs));
562 menu.add( "Fiducial Correspondence", corr_menu);
563 }
564 }
565