13 gpointer unused_data);
20 int main (
int argc,
char **argv)
28 p->laser.rays.draw = 0;
29 p->laser.points.draw = 0;
30 p->laser.normals.draw = 0;
31 p->laser.countour.width = 0.1;
32 p->pose_path.width = 0.1;
33 p->pose_path.color =
"#f00";
36 options_string(
ops,
"in", &(
p->input_filename),
"stdin",
"input file (Carmen or JSON)");
37 options_string(
ops,
"use", &(
p->use),
"estimate",
"One in 'odometry','estimate','true_pose'");
43 fprintf(stderr,
"A simple experimental GTK viewer.\n\nUsage:\n");
53 GtkWidget *window, *scrolled_win, *canvas;
58 gtk_init (&argc, &argv);
61 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
62 gtk_window_set_default_size (GTK_WINDOW (window), 640, 600);
63 gtk_widget_show (window);
64 g_signal_connect (window,
"delete_event", (GtkSignalFunc)
on_delete_event,
67 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
68 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_win),
70 gtk_widget_show (scrolled_win);
71 gtk_container_add (GTK_CONTAINER (window), scrolled_win);
73 canvas = goo_canvas_new ();
75 root = goo_canvas_get_root_item (GOO_CANVAS (canvas));
77 p->device_size[0] = 800;
78 p->device_size[1] = 600;
80 gtk_widget_set_size_request (canvas,
p->device_size[0],
p->device_size[1]);
81 goo_canvas_set_bounds (GOO_CANVAS (canvas), 0, 0,
p->device_size[0],
p->device_size[1]);
82 gtk_widget_show (canvas);
83 gtk_container_add (GTK_CONTAINER (scrolled_win), canvas);
90 rect_item = goo_canvas_rect_new (root, 0, 0, 50, 50,
94 "stroke-color",
"yellow",
108 g_printerr (
"Failed to create YES thread: %s\n", error->message);
122 p->scans = malloc(1);
123 p->scans_items = malloc(1);
130 if(
p->scans_num >=
p->scans_size) {
131 p->scans_size = 2*
p->scans_size +10;
132 p->scans = realloc(
p->scans,
sizeof(
LDP) *
p->scans_size);
133 p->scans_items = realloc(
p->scans_items,
sizeof(
LDP) *
p->scans_size);
140 g_signal_connect (gld,
"button_press_event",
142 p->scans[
p->scans_num] = ld;
143 p->scans_items[
p->scans_num] = gld;
149 goo_canvas_update(
p->canvas);
162 const oriented_bbox*obbox,
const double device_size[2], cairo_matrix_t*
m) {
164 cairo_matrix_init_identity(
m);
167 device_size[0] / obbox->
size[0],
168 device_size[1] / obbox->
size[1]};
170 double s = scale[0] < scale[1] ? scale[0] : scale[1];
171 cairo_matrix_scale(
m, s, s);
172 cairo_matrix_scale(
m, 1, -1);
173 cairo_matrix_rotate(
m, -obbox->
pose[2]);
174 cairo_matrix_translate(
m, -obbox->
pose[0], -obbox->
pose[1]);
179 cairo_matrix_init_identity(
m);
180 cairo_matrix_translate(
m, pose[0], pose[1]);
181 cairo_matrix_rotate(
m, pose[2]);
190 int n =
p->scans_num;
203 sm_error(
"%d Could not compute global bounding box.\n",
p->scans_num);
208 global.
pose[0] = -22;
209 global.
pose[1] = -41;
211 global.
size[0] = 106;
214 cairo_matrix_t m_world_to_viewport;
217 cairo_matrix_t *
m = &m_world_to_viewport;
218 sm_info(
"Matrix: %f %f %f %f %f %f\n",
m->xx,
m->yx,
m->xy,
m->yy,
m->x0,
m->y0);
221 cairo_matrix_init_identity(&mm);
223 cairo_matrix_translate(&mm, 300, 600);
224 cairo_matrix_rotate(&mm,
deg2rad(
p->scans_num));
225 goo_canvas_item_set_transform(
rect_item, &mm);
230 for(k=0;k<
p->scans_num;k++) {
231 GooCanvasItem * gld =
p->scans_items[k];
233 double * pose =
p->scans[k]->estimate;
234 cairo_matrix_t m_item_to_world;
238 cairo_matrix_multiply(&
transform, &m_item_to_world, &m_world_to_viewport);
239 goo_canvas_item_set_transform(gld, &
transform);
247 GooCanvasItem *target,
248 GdkEventButton *event,
251 g_print (
"rect item received button press event\n");
261 gpointer unused_data)