2 #include "convexHull.h"
5 int main(int argc
,char* argv
[])
9 GtkBuilder
* builder
= gtk_builder_new();
10 gtk_builder_add_from_file(builder
,"gui.xml",NULL
);
13 window
= GTK_WIDGET(gtk_builder_get_object(builder
,"window"));
14 g_assert (window
!= NULL
);
17 std::vector
<Vec2f
> points
;
18 gtk_builder_connect_signals (builder
,&points
);
19 g_object_unref (G_OBJECT (builder
));
23 gtk_widget_show_all((window
));
30 bool compare(const Vec2f
& v1
,const Vec2f
& v2
)
34 else if (v1
.x
== v2
.x
)
41 gboolean
drawarea_button_press_event_cb(GtkWidget
* widget
,
42 GdkEventButton
* button
,
43 std::vector
<Vec2f
>* points
)
45 points
->push_back(Vec2f(button
->x
,button
->y
));
47 gtk_widget_queue_draw(widget
);
52 gboolean
drawarea_expose_event_cb(GtkWidget
* widget
,
53 GdkEventExpose
* event
,
54 std::vector
<Vec2f
>* points
)
59 std::sort(points
->begin(),points
->end(),&compare
);
60 std::vector
<Vec2f
> CH
;
61 convexHull(*points
,CH
);
63 gdk_window_clear(widget
->window
);
65 cairo_t
* cr
= gdk_cairo_create(widget
->window
);
69 /* draw polygon that is representative of the convex hull*/
70 cairo_move_to(cr
,CH
[0].x
,CH
[0].y
);
71 for(size_t i
= 1;i
< CH
.size();++i
)
72 cairo_line_to(cr
,CH
[i
].x
,CH
[i
].y
);
73 cairo_line_to(cr
,CH
[0].x
,CH
[0].y
);
75 cairo_set_source_rgb(cr
,0,0,0);
78 /* draw all the points */
79 for(size_t i
= 0;i
< points
->size();++i
)
80 cairo_rectangle(cr
,(*points
)[i
].x
,(*points
)[i
].y
, 2,2);
81 cairo_set_source_rgb(cr
,1,0,0);
92 void clear(GtkWidget
* widget
,
93 std::vector
<Vec2f
>* points
)
97 gboolean
window_destroy_cb(GtkWidget
* widget
,