void bot_lcmgl_add_renderer_to_viewer(BotViewer* viewer, lcm_t* lcm, int priority) { BotLcmglRenderer *self = (BotLcmglRenderer*) calloc(1, sizeof(BotLcmglRenderer)); BotRenderer *renderer = &self->renderer; self->lcm = lcm; self->viewer = viewer; self->pw = BOT_GTK_PARAM_WIDGET(bot_gtk_param_widget_new()); renderer->draw = my_draw; renderer->destroy = my_free; renderer->name = "LCM GL"; renderer->widget = GTK_WIDGET(self->pw); renderer->enabled = 1; renderer->user = self; self->channels = g_hash_table_new(g_str_hash, g_str_equal); g_signal_connect (G_OBJECT (self->pw), "changed", G_CALLBACK (on_param_widget_changed), self); bot_lcmgl_data_t_subscribe(self->lcm, "LCMGL.*", on_lcmgl_data, self); bot_viewer_add_renderer(viewer, renderer, priority); GtkWidget *clear_button = gtk_button_new_with_label("Clear All"); gtk_box_pack_start(GTK_BOX(renderer->widget), clear_button, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(clear_button), "clicked", G_CALLBACK(on_clear_button), self); gtk_widget_show_all(renderer->widget); }
void laser_util_add_renderer_to_viewer(BotViewer *viewer, int priority, lcm_t * lcm, BotParam * param, BotFrames * frames) { BotRenderer *renderer = renderer_laser_new(viewer, lcm, param, frames); if (viewer && renderer) { bot_viewer_add_renderer(viewer, renderer, priority); } }
void bot_frames_add_frame_modifier_to_viewer(BotViewer *viewer, int render_priority, BotFrames * frames) { RendererFrames *self = (RendererFrames*) calloc(1, sizeof(RendererFrames)); BotRenderer *renderer = &self->renderer; renderer->draw = draw; renderer->destroy = destroy_renderer_frames; renderer->widget = gtk_vbox_new(FALSE, 0); renderer->name = strdup(RENDERER_NAME); renderer->user = self; renderer->enabled = 1; BotEventHandler *ehandler = &self->ehandler; ehandler->name = renderer->name; ehandler->enabled = 1; ehandler->pick_query = NULL; ehandler->key_press = NULL; ehandler->hover_query = NULL; ehandler->mouse_press = NULL; ehandler->mouse_release = NULL; ehandler->mouse_motion = NULL; ehandler->user = self; self->viewer = viewer; self->frames = frames; bot_frames_add_update_subscriber(self->frames, frames_update_handler, (void *) self); self->pw = BOT_GTK_PARAM_WIDGET(bot_gtk_param_widget_new()); self->rootFrame = bot_frames_get_root_name(self->frames); int num_frames = bot_frames_get_num_frames(self->frames); char ** frame_names = bot_frames_get_frame_names(self->frames); self->numFrames = num_frames + 1; //need space for extra "empty" one self->frameNames = calloc(self->numFrames, sizeof(char *)); self->frameNums = calloc(self->numFrames, sizeof(int)); self->frameNums[0] = 0; self->frameNames[0] = ""; for (int i = 1; i < self->numFrames; i++) { self->frameNums[i] = i; self->frameNames[i] = strdup(frame_names[i - 1]); } g_strfreev(frame_names); bot_gtk_param_widget_add_enumv(self->pw, PARAM_FRAME_SELECT, BOT_GTK_PARAM_WIDGET_DEFAULTS, 0, self->numFrames, (const char **) self->frameNames, self->frameNums); gtk_box_pack_start(GTK_BOX(renderer->widget), GTK_WIDGET(self->pw), TRUE, TRUE, 0); bot_gtk_param_widget_add_double(self->pw, PARAM_X, BOT_GTK_PARAM_WIDGET_SPINBOX, -1000, 1000, 0.001, 0); bot_gtk_param_widget_add_double(self->pw, PARAM_Y, BOT_GTK_PARAM_WIDGET_SPINBOX, -1000, 1000, 0.001, 0); bot_gtk_param_widget_add_double(self->pw, PARAM_Z, BOT_GTK_PARAM_WIDGET_SPINBOX, -1000, 1000, 0.001, 0); bot_gtk_param_widget_add_double(self->pw, PARAM_ROLL, BOT_GTK_PARAM_WIDGET_SPINBOX, -181, 181, 0.1, 0); bot_gtk_param_widget_add_double(self->pw, PARAM_PITCH, BOT_GTK_PARAM_WIDGET_SPINBOX, -181, 181, 0.1, 0); bot_gtk_param_widget_add_double(self->pw, PARAM_YAW, BOT_GTK_PARAM_WIDGET_SPINBOX, -181, 181, 0.1, 0); bot_gtk_param_widget_add_separator(self->pw, ""); bot_gtk_param_widget_add_buttons(self->pw, PARAM_SAVE, NULL); bot_gtk_param_widget_set_enabled(self->pw, PARAM_X, 0); bot_gtk_param_widget_set_enabled(self->pw, PARAM_Y, 0); bot_gtk_param_widget_set_enabled(self->pw, PARAM_Z, 0); bot_gtk_param_widget_set_enabled(self->pw, PARAM_ROLL, 0); bot_gtk_param_widget_set_enabled(self->pw, PARAM_PITCH, 0); bot_gtk_param_widget_set_enabled(self->pw, PARAM_YAW, 0); bot_gtk_param_widget_set_enabled(self->pw, PARAM_SAVE, 0); gtk_widget_show_all(renderer->widget); g_signal_connect(G_OBJECT(self->pw), "changed", G_CALLBACK(on_param_widget_changed), self); on_param_widget_changed(self->pw, "", self); bot_viewer_add_renderer(viewer, &self->renderer, render_priority); }
void setup_gfe_renderer(BotViewer *viewer, int render_priority, const char *wavefront_fname0, const char *wavefront_fname1) { GfeRenderer *self = (GfeRenderer*) calloc (1, sizeof (GfeRenderer)); BotRenderer *renderer = &self->renderer; renderer->draw = _renderer_draw; renderer->destroy = _renderer_free; renderer->widget = bot_gtk_param_widget_new(); renderer->name = RENDERER_NAME; renderer->user = self; renderer->enabled = 1; self->viewer = viewer; self->pw = BOT_GTK_PARAM_WIDGET(renderer->widget); double default_scale = 1.0; double default_rot_x = 0; double default_rot_y = 0; double default_rot_z = 0; double default_dx = 0; double default_dy = 0; double default_dz = 0; printf("%s is fname0\n", wavefront_fname0); printf("%s is fname1\n", wavefront_fname1); if(wavefront_fname0) { self->wavefront_model = bot_wavefront_model_create(wavefront_fname0); double minv[3]; double maxv[3]; bot_wavefront_model_get_extrema(self->wavefront_model, minv, maxv); double span_x = maxv[0] - minv[0]; double span_y = maxv[1] - minv[1]; double span_z = maxv[2] - minv[2]; double span_max = MAX(span_x, MAX(span_y, span_z)); // leave the default scale and translations at default default_scale = 1.0; default_dx = 0.0; default_dy = 0.0; default_dz = 0.0; printf("WAVEFRONT extrema: [%f, %f, %f] [%f, %f, %f]\n", minv[0], minv[1], minv[2], maxv[0], maxv[1], maxv[2]); printf("WAVEFRONT initial scale: %f\n", default_scale); printf("WAVEFRONT initial offsets: [%f, %f, %f]\n", default_dx, default_dy, default_dz); } if(wavefront_fname1) { self->wavefront_model2 = bot_wavefront_model_create(wavefront_fname1); double minv[3]; double maxv[3]; bot_wavefront_model_get_extrema(self->wavefront_model, minv, maxv); double span_x = maxv[0] - minv[0]; double span_y = maxv[1] - minv[1]; double span_z = maxv[2] - minv[2]; double span_max = MAX(span_x, MAX(span_y, span_z)); // leave the default scale and translations at default default_scale = 1.0; default_dx = 2.0; default_dy = 0.0; default_dz = 0.0; printf("WAVEFRONT extrema: [%f, %f, %f] [%f, %f, %f]\n", minv[0], minv[1], minv[2], maxv[0], maxv[1], maxv[2]); printf("WAVEFRONT initial scale: %f\n", default_scale); printf("WAVEFRONT initial offsets: [%f, %f, %f]\n", default_dx, default_dy, default_dz); } bot_gtk_param_widget_add_double(self->pw, PARAM_SCALE, BOT_GTK_PARAM_WIDGET_SPINBOX, 0, 99999999999, 0.00000001, default_scale); bot_gtk_param_widget_add_double(self->pw, PARAM_DX, BOT_GTK_PARAM_WIDGET_SPINBOX, -9999999999, 99999999999, 0.01, default_dx); bot_gtk_param_widget_add_double(self->pw, PARAM_DY, BOT_GTK_PARAM_WIDGET_SPINBOX, -9999999999, 99999999999, 0.01, default_dy); bot_gtk_param_widget_add_double(self->pw, PARAM_DZ, BOT_GTK_PARAM_WIDGET_SPINBOX, -9999999999, 99999999999, 0.01, default_dz); bot_gtk_param_widget_add_double(self->pw, PARAM_ROT_X, BOT_GTK_PARAM_WIDGET_SPINBOX, -180, 180, 0.1, default_rot_x); bot_gtk_param_widget_add_double(self->pw, PARAM_ROT_Y, BOT_GTK_PARAM_WIDGET_SPINBOX, -180, 180, 0.1, default_rot_y); bot_gtk_param_widget_add_double(self->pw, PARAM_ROT_Z, BOT_GTK_PARAM_WIDGET_SPINBOX, -180, 180, 0.1, default_rot_z); gtk_widget_show_all(renderer->widget); g_signal_connect (G_OBJECT (self->pw), "changed", G_CALLBACK (on_param_widget_changed), self); bot_viewer_add_renderer(viewer, &self->renderer, render_priority); }