⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callbacks.cc

📁 神经网络和遗传算法组合应用
💻 CC
📖 第 1 页 / 共 2 页
字号:
#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <string.h>#include <gdk/gdkkeysyms.h>#include <gtk/gtk.h>#include <glib.h>#include <sim.h>#include <param.h>#include <geom.h>#include "support.h"#include "callbacks.h"sem_t simAreaUpdate_S;sem_t simArea_S;sem_t simAreaBB_S;sem_t simRobotsBB_S;int gui_stepping=0;guint contextId;guint lastMsg=0;guint currMsg=0;#define gui_print(msg) { currMsg = gtk_statusbar_push(GTK_STATUSBAR(statusbar1),contextId,msg); gtk_statusbar_remove(GTK_STATUSBAR(statusbar1),contextId,lastMsg); lastMsg=currMsg;} gushort pal[6][3]={{0xffff,0xffff,0xffff},		  {0x0,0x0,0x0},		  {0x0,0x0,0xffff},		  {0xffff,0x0,0x0},		  {0x0,0xffff,0x0},		  {0xffff,0xffff,0x0}};/* Window */GtkWidget *window;GtkWidget *vbox_window;GtkWidget *menubar_window;GtkWidget *file_menubar;GtkWidget *file_menu;GtkAccelGroup *file_menu_accels;GtkWidget *quit_menu_item;GtkWidget *table_vbox;GtkWidget *sim_frame_table;GtkWidget *vbox_sim_frame;GtkWidget *toolbar_vbox_sim_frame;GtkWidget *tmp_toolbar_icon;GtkWidget *run_btn;GtkWidget *paus_btn;GtkWidget *step_btn;GtkWidget *evolution_tgl;GtkWidget *simulatorArea;GtkWidget *draw_frame_table;GtkWidget *vbox_draw_frame;GtkWidget *robot_frame_vbox;GtkWidget *vbox_robot_frame;GtkWidget *toolbar8;GtkWidget *wheel_rbtn;GtkWidget *arrow_rbtn;GtkWidget *toolbar10;GtkWidget *body_tgl;GtkWidget *trace_tgl;GtkWidget *Robots_frm;GtkWidget *draw_tgl;GtkWidget *generation_progress_bar;GtkWidget *statusbar1;GtkAdjustment *adj;/* end window */GtkWidget **simRobots;GtkWidget *window1;GtkWidget *simArea;      /* simArea widget     */GdkPixmap *bb_simArea;   /* simArea backbuffer */GdkPixmap *bg_simArea;   /* simArea background */GdkPixmap **bb_simRobots;GdkColormap *cm_simArea; /* simArea colormap   */GdkColor **pal_simArea;  /* simArea colors     */const gchar defaultFontName[]="-*-helvetica-bold-r-normal--*-120-*-*-*-*-iso8859-1";GdkFont *defaultFont;GdkGC *pen_simArea;GdkGC *blit_simArea;GdkGC *internal_blit_simArea;gint colors = 256;gint definedColors = 6;guint simAreaTimer;/* Simulator area size, robotbody and robottype*/int sim_area_x_size=200;int sim_area_y_size=200;BOOL_T robotBody = BFALSE;BOT_T robotType = WHEEL;int sensorAreaVisible=0;/* Prototypes */gint init_pal(gpointer *data);gint on_progress_update(gpointer *);gint on_gui_update(gpointer*);void on_expose_event(GtkWidget *w, gpointer user_data);GtkWidget * create_main_window();void gui_setWorldSize(int x, int y){  sim_area_x_size = x;  sim_area_y_size = y;}void gui_init(){  GtkWidget *rob_frm;  GtkWidget *tmp;  GtkWidget *v1,*v2;  GtkWidget **distribute;  gchar str[6];  sem_init(&simAreaUpdate_S,0,0);  sem_init(&simArea_S,0,0);  sem_init(&simAreaBB_S,0,1);  sem_init(&simRobotsBB_S,0,1);  notTrajactoryRobot = 1;    /*    init simulator area  */  window1 = create_main_window();  gtk_widget_show(window1);    contextId = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar1),"User messages");  lastMsg = gtk_statusbar_push(GTK_STATUSBAR(statusbar1),contextId,"User Interface Started");    simArea = lookup_widget(window1,"simulatorArea");  gtk_signal_connect(GTK_OBJECT(simArea),"expose_event",		     GTK_SIGNAL_FUNC(on_expose_event),		     NULL);		       bb_simArea = gdk_pixmap_new(simArea->window,  			      sim_area_x_size,  			      sim_area_y_size,			      -1);  bb_simArea = gdk_pixmap_ref(bb_simArea);     bg_simArea = gdk_pixmap_new(simArea->window,  			      sim_area_x_size,  			      sim_area_y_size,			      -1);  bg_simArea = gdk_pixmap_ref(bg_simArea);   /* Font */  defaultFont = gdk_font_load(defaultFontName);  defaultFont = gdk_font_ref(defaultFont);  /* Robot windows */  rob_frm = lookup_widget(window1,"Robots_frm");  tmp = gtk_hbox_new (FALSE, 0);  gtk_widget_ref (tmp);  gtk_object_set_data_full (GTK_OBJECT (window1), "rob_hbox", tmp,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (tmp);  gtk_container_add (GTK_CONTAINER (rob_frm), tmp);  v1 = gtk_toolbar_new(GTK_ORIENTATION_VERTICAL,GTK_TOOLBAR_ICONS);  gtk_widget_ref(v1);  gtk_object_set_data_full(GTK_OBJECT (window1), "v1", v1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (v1);  gtk_box_pack_start (GTK_BOX (tmp), v1, FALSE, FALSE, 0);  gtk_container_set_border_width (GTK_CONTAINER (v1), 1);  v2 = gtk_toolbar_new(GTK_ORIENTATION_VERTICAL,GTK_TOOLBAR_ICONS);  gtk_widget_ref(v2);  gtk_object_set_data_full (GTK_OBJECT (window1), "v2", v2,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (v2);  gtk_box_pack_start (GTK_BOX (tmp), v2, FALSE, FALSE, 0);  gtk_container_set_border_width (GTK_CONTAINER (v2), 1);  simRobots = (GtkWidget**) malloc(sizeof(GtkWidget*)*paramNrOfRobots);  distribute = (GtkWidget**) malloc(sizeof(GtkWidget*)*2);  distribute[0] = v1;  distribute[1] = v2;  bb_simRobots = (GdkPixmap**) malloc(sizeof(GdkPixmap*)*paramNrOfRobots);  printf("Nur of robots %d \n",paramNrOfRobots);  for(int i=0; i < paramNrOfRobots; i++){    bb_simRobots[i] = gdk_pixmap_new(NULL,51,90,gdk_visual_get_best_depth());    bb_simRobots[i] = gdk_pixmap_ref(bb_simRobots[i]);    simRobots[i] = gtk_drawing_area_new();    gtk_widget_ref(simRobots[i]);    gtk_drawing_area_size(GTK_DRAWING_AREA(simRobots[i]),51,90);    sprintf(str,"rob%d",i);    gtk_object_set_data_full(GTK_OBJECT(window1),str,simRobots[i],			     (GtkDestroyNotify) gtk_widget_unref);    gtk_widget_show(simRobots[i]);    gtk_toolbar_append_element(GTK_TOOLBAR(distribute[i%2]), 			       GTK_TOOLBAR_CHILD_WIDGET,			       simRobots[i], 			       str,			       NULL,NULL,NULL,NULL,NULL);  }  free(distribute);  colors = 256;  cm_simArea = gdk_window_get_colormap(simArea->window);    pal_simArea = (GdkColor**) malloc(sizeof(GdkColor*)*colors);  for(int i=0; i < colors; i++){    pal_simArea[i] = (GdkColor*)malloc(sizeof(GdkColor));    if(i < 6){      pal_simArea[i]->red = pal[i][0];      pal_simArea[i]->green = pal[i][1];      pal_simArea[i]->blue = pal[i][2];    }    else{      pal_simArea[i]->red = int(65536.0 * cos(i/double(63)*M_PI/3));      pal_simArea[i]->green = int(65536.0 * sin(i/double(63)*M_PI/3));      pal_simArea[i]->blue = 0;    }    gdk_colormap_alloc_color(cm_simArea,  			     pal_simArea[i],  			     1, /* writeable ->  private */  			     1);/* bestmatch */  }  pen_simArea = gdk_gc_new((GdkWindow *)bb_simArea);  pen_simArea = gdk_gc_ref(pen_simArea);  blit_simArea = gdk_gc_new((GdkWindow*)bb_simArea);  blit_simArea = gdk_gc_ref(blit_simArea);  internal_blit_simArea = gdk_gc_new((GdkWindow*)bb_simArea);  internal_blit_simArea = gdk_gc_ref(internal_blit_simArea);  gtk_timeout_add(500,		  on_progress_update,		  NULL);  gtk_timeout_add(100,		  on_gui_update,		  NULL);  sem_post(&gui_ready);  gdk_threads_enter();  gtk_main();  gdk_threads_leave();    sim_shutdown();  pthread_exit(0);}gint init_pal(gpointer *data){    return (FALSE);}gint on_progress_update(gpointer *data){  gfloat val;  static GtkWidget *pbar=0;  if(!pbar)    pbar = lookup_widget(window1,"generation_progress_bar");    if(startGeneration==-1)    val = (gfloat)(100.0*((gfloat)(gen)/ (gfloat)(nrOfGenerations)));  else    val = (gfloat)(100.0*((gfloat)(gen-startGeneration)/			  (gfloat)(nrOfGenerations-startGeneration)));  if(val < 1)    val = 1;  if(val > 100)    val = 100;  gdk_threads_enter();  gtk_progress_set_value(GTK_PROGRESS(pbar),val);  gdk_threads_leave();  return TRUE;}void on_expose_event(GtkWidget *w, gpointer user_data){  for(int i=0; i < paramNrOfRobots; i++){    gdk_draw_pixmap(simRobots[i]->window,		    internal_blit_simArea,		    bb_simRobots[i],		    0,0,0,0,		    -1,-1);  }  gdk_draw_pixmap(simArea->window,		  internal_blit_simArea,		  bb_simArea,		  0,0,0,0,		  -1,-1);  sem_post(&simAreaUpdate_S);}gint on_gui_update(gpointer *data){  if(sem_trywait(&simArea_S) == 0){    gdk_threads_enter();    gtk_widget_draw(simArea,NULL);    gdk_threads_leave();  }  return TRUE;}voidon_button_clicked                      (GtkButton       *button,                                        gpointer         user_data){   printf("Klicked button\n");}voidon_run_btn_clicked                     (GtkButton       *button,                                        gpointer         user_data){  gui_stepping=0;  sem_post(&gui_run);  sem_post(&gui_step);  gui_print("Running simulation");#ifdef DEBUG_GUI  printf("run\n");#endif}voidon_paus_btn_clicked                    (GtkButton       *button,                                        gpointer         user_data){  gui_stepping=1;  gui_print("Paus...");#ifdef DEBUG_GUI  printf("paus\n");#endif}voidon_step_btn_clicked                    (GtkButton       *button,                                        gpointer         user_data){ sem_post(&gui_step); gui_print("Stepping 100 ms");#ifdef DEBUG_GUI  printf("step\n");#endif}voidon_evolution_tgl_toggled               (GtkToggleButton *togglebutton,                                        gpointer         user_data){}voidon_wheel_rbtn_toggled                  (GtkToggleButton *togglebutton,                                        gpointer         user_data){  robotType = WHEEL;  gui_print("Drawing wheel axis robot");#ifdef DEBUG_GUI  printf("wheel robot\n");#endif}voidon_arrow_rbtn_toggled                  (GtkToggleButton *togglebutton,                                        gpointer         user_data){  robotType = ARROW;  gui_print("Drawing arrow robot");#ifdef DEBUG_GUI  printf("arrow robot\n");#endif}voidon_body_tgl_toggled                    (GtkToggleButton *togglebutton,                                        gpointer         user_data){    switch(robotBody){  case BFALSE: robotBody = BTRUE; gui_print("Robot body on"); break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -