testing all octagon class methods [fltk]

Bjarne Stroustrup “Programming Principles and Practice Using C++”
Chapter 14 Exercise 8
Using GUI library called FLTK (Fast Light Tool Kit, “full tick”).

Output:

//  Philipp Siedler
//  Bjarne Stroustrup's PP
//  Chapter 14 Exercise 8

#define _USE_MATH_DEFINES
#include "Simple_window.h"
#include "Graph.h"
#include <cmath>

using namespace Graph_lib;

ostream& operator<<(ostream& out, Point& a) {
	out << "(" << a.x << "," << a.y << ")";
	return out;
}

struct Regular_octagon : Closed_polyline
{
	Regular_octagon(Point origin, int radius)
		: o(origin), r(radius)
	{
		set_color(Color::red);
		generate_points();
	};

	void draw_lines() const;
	
private:
	Point o;
	vector<Point> pts;
	int r;

	void add() {}
	void generate_points();
	vector<Point> get_pts() { return pts; };

};

void Regular_octagon::generate_points()
{
	int n = 8;
	for (int i = 0; i < n; i++) {
		pts.push_back(Point(o.x + r * cos(2 * M_PI * i / n), o.y + r * sin(2 * M_PI * i / n)));
		Closed_polyline::add(pts[i]);
	}
};

void Regular_octagon::draw_lines() const
{
	Closed_polyline::draw_lines();
};


int main()
try
{
	Point tl(100, 100);
	Simple_window win(tl, 720, 400, "Simple Window");
	Point center(win.x_max() / 2, win.y_max() / 2);

	Regular_octagon o(center, 50);

	// add();
	// o.add(); // function inaccesible
	
	// color();
	cout << o.color().as_int() << endl; // Output: 88
	cout << o.color().black << endl; // Output: 56
	cout << o.color().blue << endl; // Output: 216
	cout << o.color().cyan << endl; // Output: 223
	cout << o.color().dark_blue << endl; // Output: 136
	cout << o.color().dark_cyan << endl; // Output: 140
	cout << o.color().dark_green << endl; // Output: 60
	cout << o.color().dark_magenta << endl; // Output: 152
	cout << o.color().dark_red << endl; // Output: 72
	cout << o.color().dark_yellow << endl; // Output: 76
	cout << o.color().green << endl; // Output: 63
	cout << o.color().invisible << endl; // Output: 0
	cout << o.color().magenta << endl; // Output: 248
	cout << o.color().red << endl; // Output: 88
	o.color().set_visibility(Color::Transparency(0));
	o.color().visibility();

	// draw();
	o.draw();

	// draw_lines();
	o.draw_lines();

	// fill_color();
	cout << o.fill_color().as_int() << endl; // Output: 88
	cout << o.fill_color().black << endl; // Output: 56
	cout << o.fill_color().blue << endl; // Output: 216
	cout << o.fill_color().cyan << endl; // Output: 223
	cout << o.fill_color().dark_blue << endl; // Output: 136
	cout << o.fill_color().dark_cyan << endl; // Output: 140
	cout << o.fill_color().dark_green << endl; // Output: 60
	cout << o.fill_color().dark_magenta << endl; // Output: 152
	cout << o.fill_color().dark_red << endl; // Output: 72
	cout << o.fill_color().dark_yellow << endl; // Output: 76
	cout << o.fill_color().green << endl; // Output: 63
	cout << o.fill_color().invisible << endl; // Output: 0
	cout << o.fill_color().magenta << endl; // Output: 248
	cout << o.fill_color().red << endl; // Output: 88
	o.fill_color().set_visibility(Color::Transparency::invisible);
	o.fill_color().set_visibility(Color::Transparency::visible);
	o.fill_color().visibility();

	// move();
	o.move(100, -100);

	// number_of_points();
	cout << o.number_of_points() << endl; // Output: 8

	// Open_polyline
	//o.Open_polyline.add(Point(100, 100)); // typename is not allowed
	
	// point();
	cout << o.point(0) << endl; // Output: (510,100)

	// set_color();
	o.set_color(Color::red); // sets color to red
	
	// set_fill_color();
	o.set_fill_color(Color::cyan); // sets fill_color to cyan

	// set_style();
	o.set_style(Line_style(Line_style::dash, 5)); // sets line style: dashed, 5 width

	// Shape
	//o.Shape // typename is not allowed

	// style();
	cout << o.style().dash << endl; // Output: 1
	cout << o.style().dashdot << endl; // Output: 3
	cout << o.style().dashdotdot << endl; // Output: 4
	cout << o.style().dot << endl; // Output: 2
	cout << o.style().solid << endl; // Output: 0
	cout << o.style().style() << endl; // Output: 1
	cout << o.style().width() << endl; // Output: 5

	// ~Shape
	//o.~Shape // invalid destructor name for type "Regular_octagon"

	win.attach(o);
	win.wait_for_button();
}
catch (exception& e) {
	cout << e.what() << endl;
	return 1;
}
catch (...) {
	cout << "Exiting" << endl;
	return 2;
}
Output:
88
56
216
223
136
140
60
152
72
76
63
0
248
88
0
56
216
223
136
140
60
152
72
76
63
0
248
88
8
(510,100)
1
3
4
2
0
1
5

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.