X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=main.cc;h=974cbea1a8d7e602bb347b3b2a0f5294571ff4eb;hb=6408d9fe6e1b82ad9aa71d6e1702ec100a8c3ca1;hp=905706ddd7fd2f835c9c5e56a8c9b12e7806c90f;hpb=fe0be986e63c5dabed472d68b0aa7c91ca0651db;p=universe.git diff --git a/main.cc b/main.cc index 905706d..974cbea 100644 --- a/main.cc +++ b/main.cc @@ -17,46 +17,19 @@ using namespace std; #include "task.h" #include "simple_window.h" #include "universe.h" +#include "plotter.h" #include "retina.h" #include "manipulator.h" #include "intelligence.h" -#include "xfig_tracer.h" - -#ifdef CAIRO_SUPPORT -#include - - -void generate_png(int width, int height, Universe *universe, const char *image_name) { - const int depth = 4; - cairo_surface_t *image; - cairo_t* context_resource; - unsigned char *data; - data = new unsigned char [width * height * depth]; - - image = cairo_image_surface_create_for_data(data, - CAIRO_FORMAT_RGB24, - width, - height, - width * depth); - - context_resource = cairo_create(image); - - cairo_set_source_rgb(context_resource, 1.0, 1.0, 1.0); - cairo_rectangle(context_resource, 0, 0, width, height); - cairo_fill(context_resource); +#include "canvas_cairo.h" - universe->draw(context_resource); - - cairo_surface_write_to_png(image, image_name); - - // fprintf(stdout, "Content-type: image/png\n\n"); - // cairo_surface_write_to_png_stream(image, write_cairo_to_file, stdout); +#include "xfig_tracer.h" - cairo_destroy(context_resource); - cairo_surface_destroy(image); - delete[] data; +void generate_png(Universe *universe, scalar_t scale, FILE *file) { + CanvasCairo canvas(scale, universe->width(), universe->height()); + universe->draw(&canvas); + canvas.write_png(file); } -#endif // To train // ./main --task hit_shape.task 0 --action-mode=random --nb-ticks=5000 --proportion-for-training=0.5 --save-file=dump.mem --no-window @@ -180,7 +153,7 @@ int main(int argc, char **argv) { cout << "FlatLand, a toy universe for goal-planning experiments." << endl; if(!task) { - task = load_task("dummy.task"); + task = load_task("dummy.so"); task_degree = 0; } @@ -205,9 +178,12 @@ int main(int argc, char **argv) { retina.set_location(manipulator.hand_x(), manipulator.hand_y()); SimpleWindow *window_main = 0, *window_brain = 0; - int window_main_fd = -1; +#ifdef CAIRO_SUPPORT + // cairo_t *window_main_cairo_cr = 0; +#endif + MapConcatener sensory_map(2); sensory_map.add_map(&retina); sensory_map.add_map(&manipulator); @@ -238,6 +214,9 @@ int main(int argc, char **argv) { window_main = new SimpleWindow("Universe (main window)", 4, 4, task->width(), task->height()); window_main_fd = window_main->file_descriptor(); window_main->map(); +#ifdef CAIRO_SUPPORT + // window_main_cairo_cr = window_main->get_cairo_context_resource(); +#endif cout << "When the main window has the focus, press `q' to quit and click and drag to move" << endl << "objects." << endl; window_brain = new SimpleWindow("Universe (brain)", @@ -325,11 +304,19 @@ int main(int argc, char **argv) { manipulator.hand_y()); if(window_main) { - // window_main->color(0.0, 0.0, 0.0); + window_main->color(0.0, 0.0, 0.0); window_main->color(1.0, 1.0, 1.0); window_main->fill(); - task->draw(window_main); + +// #ifdef CAIRO_SUPPORT + // CanvasCairo cc; + // cc._context_resource = window_main_cairo_cr; + // universe.draw(&cc); +// #else universe.draw(window_main); +// #endif + + task->draw(window_main); manipulator.draw_on_universe(window_main); retina.draw_on_universe(window_main); @@ -434,15 +421,27 @@ int main(int argc, char **argv) { else if(strcmp(se.key, "s") == 0) { retina.save_as_ppm("/tmp/retina.ppm"); - cout << "Retina screen shot saved in /tmp/retina.ppm" << endl; + + { + Plotter plotter(int(universe.width()), int(universe.height()), 4); + plotter.save_as_ppm(&universe, "/tmp/plotter.ppm", 16); + } + +#ifdef XFIG_SUPPORT { XFigTracer tracer("/tmp/universe.fig"); universe.print_xfig(&tracer); } +#endif #ifdef CAIRO_SUPPORT - generate_png(task->width(), task->height(), &universe, "/tmp/universe.png"); + { + FILE *file = fopen("/tmp/universe.png", "w"); + generate_png(&universe, 0.25, file); + // generate_png(task->width(), task->height(), &universe, "/tmp/universe.png"); + cout << "Universe image saved in /tmp/universe.png" << endl; + } #endif }