#include using namespace Upp; struct MyApp : TopWindow { virtual void Paint(Draw& w); }; void MyApp::Paint(Draw& w) { w.DrawRect(GetSize(), White()); Point points[12][2][4]; int subpolygon_counts[12][2]; int disjunct_counts[12]; Point lpoints[12][5]; int lcounts[12][2]; Pointf center(400, 300); static const double out_delta = 2 * M_PI / 24; static const double in_delta = 2 * M_PI / 48; for(int i = 0; i < 12; i++) { double angle = i * 2 * M_PI / 12; points[i][0][0] = Polar(center, 200, angle); points[i][0][1] = Polar(center, 120, angle - out_delta); points[i][0][2] = Polar(center, 40, angle); points[i][0][3] = Polar(center, 120, angle + out_delta); points[i][1][0] = Polar(center, 160, angle); points[i][1][1] = Polar(center, 120, angle + in_delta); points[i][1][2] = Polar(center, 80, angle); points[i][1][3] = Polar(center, 120, angle - in_delta); subpolygon_counts[i][0] = 4; subpolygon_counts[i][1] = 4; disjunct_counts[i] = subpolygon_counts[i][0] + subpolygon_counts[i][1]; lpoints[i][0] = Polar(center, 260, angle + in_delta); lpoints[i][1] = Polar(center, 230, angle); lpoints[i][2] = Polar(center, 260, angle - in_delta); lcounts[i][0] = 3; lpoints[i][3] = Polar(center, 280, angle + in_delta); lpoints[i][4] = Polar(center, 280, angle - in_delta); lcounts[i][1] = 2; } w.DrawPolyPolyPolygon(points[0][0], sizeof(points) / sizeof(Point), subpolygon_counts[0], sizeof(subpolygon_counts) / sizeof(int), disjunct_counts, sizeof(disjunct_counts) / sizeof(int), LtBlue(), 4, LtRed(), I64(0xF0F0F0F00F0F0F0F)); w.DrawPolyPolyline(lpoints[0], sizeof(lpoints) / sizeof(Point), lcounts[0], sizeof(lcounts) / sizeof(int), 4, Color(0, 192, 0)); Point tr[] = { Point(50, 5), Point(80, 50), Point(20, 50) }; w.DrawPolygon(tr, 3, Green()); w.DrawPolyline(tr, 3, 2, Magenta()); w.DrawEllipse(5, 70, 70, 40, Green(), 2, Magenta()); w.DrawEllipse(5, 150, 70, 40, Green()); } GUI_APP_MAIN { MyApp().Run(); }