00001
00002
00003
00004
00005 #include <basis/chaos.h>
00006 #include <opsystem/application_shell.h>
00007 #include <loggers/console_logger.h>
00008 #include <data_struct/static_memory_gremlin.h>
00009 #include <wp_passive/box.h>
00010 #include <wp_passive/manager.h>
00011 #include <wp_passive/visible_line.h>
00012 #include <wp_passive/wp_implementation.h>
00013
00014 #include <stdio.h>
00015
00016 class t_draw : public application_shell
00017 {
00018 public:
00019 t_draw() : application_shell(class_name()) {}
00020 IMPLEMENT_CLASS_NAME("t_draw");
00021 virtual int execute();
00022 };
00023
00024 int t_draw::execute()
00025 {
00026 FUNCDEF("execute");
00027 manager root("t_draw");
00028 canvas testwin(root, c_rectangle(100,100,900,900));
00029
00030 color fore(root.lookup("gold"));
00031 log(istring("color gold has: ") + fore.text_form());
00032 const bool put_on_canvas = false;
00033 visible_line bow
00034 (testwin, c_line(c_point(0, 0), c_point(100, 0)), fore, put_on_canvas);
00035 visible_line prow
00036 (testwin, c_line(c_point(0, 0), c_point(10, -25)), fore, put_on_canvas);
00037 visible_line keel
00038 (testwin, c_line(c_point(10, -25), c_point(95, -32)), fore, put_on_canvas);
00039 visible_line stern
00040 (testwin, c_line(c_point(95, -32), c_point(100, 0)), fore, put_on_canvas);
00041 visible_line mast
00042 (testwin, c_line(c_point(60, 0), c_point(60, 93)), fore, put_on_canvas);
00043 visible_line high_yard
00044 (testwin, c_line(c_point(50, 62), c_point(70, 62)), fore, put_on_canvas);
00045 visible_line low_yard
00046 (testwin, c_line(c_point(35, 31), c_point(85,31)), fore, put_on_canvas);
00047
00048 if (put_on_canvas) {
00049 bow.draw();
00050 prow.draw();
00051 keel.draw();
00052 stern.draw();
00053 mast.draw();
00054 high_yard.draw();
00055 low_yard.draw();
00056 }
00057
00058 picture boat(c_point(100, 100));
00059 boat.add(&bow); boat.add(&prow); boat.add(&keel); boat.add(&stern);
00060 boat.add(&mast); boat.add(&high_yard); boat.add(&low_yard);
00061 testwin.add(&boat);
00062
00063 if (put_on_canvas) boat.draw();
00064
00065
00066
00067
00068 if (put_on_canvas) {
00069 boat.erase();
00070 boat.set_origin(c_point(90, 120));
00071 boat.draw();
00072 box boat_house(testwin, boat.dimensions());
00073 boat_house.draw();
00074
00075 }
00076
00077 chaos rando;
00078 c_point increment
00079 (rando.inclusive(3, 15), rando.inclusive(3, 12));
00080 while (true) {
00082 boat.set_origin(boat.drawable::origin() + increment);
00083 c_rectangle windim(testwin.world());
00084 c_rectangle boatdim(boat.dimensions());
00085 if (!windim.inside(boatdim.vertex_1())
00086 || !windim.inside(boatdim.vertex_2()) ) {
00087 LOG("not inside!");
00088 LOG(istring("win dim ") + windim.text_form() + " boat dim " + boatdim.text_form());
00089 boat.set_origin(boat.drawable::origin() - increment);
00090 bool flip_x = bool((boatdim.minimum_x() < windim.minimum_x())
00091 || (boatdim.maximum_x() > windim.maximum_x()));
00092 bool flip_y = bool((boatdim.minimum_y() < windim.minimum_y())
00093 || (boatdim.maximum_y() > windim.maximum_y()));
00094 if (flip_x) increment.set(-increment.x(), increment.y());
00095 if (flip_y) increment.set(increment.x(), -increment.y());
00096 LOG(isprintf("flipx=%s flipy=%s", flip_x? "true" : "false", flip_y? "true" : "false"));
00097 boat.set_origin(boat.drawable::origin() + increment);
00098 }
00099 root.poll_and_return(100);
00100
00101 }
00102 testwin.remove(&boat);
00103 return 0;
00104 }
00105
00106 HOOPLE_MAIN(t_draw, )
00107