Skip to content

Commit 712b2e0

Browse files
PaulDancesunjay
authored andcommitted
Add example illustrating the new arc methods
It draws a simple flower only using arcs, rotations and fills. Signed-off-by: Paul Mabileau <[email protected]>
1 parent d4b5975 commit 712b2e0

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed

examples/flower.rs

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
//! Draws a simple geometric sort of flower with customizable dimensions.
2+
//!
3+
//! This example makes extensive use of the turtle arc methods: [`arc_left`] and [`arc_right`].
4+
//! They both provide the ability to draw a circular arc defined by the given `radius` and `extent`
5+
//! parameters, while the first makes the turtle draw it to the left and the second to the right.
6+
7+
use turtle::{Angle, Distance, Drawing};
8+
9+
const TURTLE_SPEED: &str = "faster";
10+
const BOTTOM_MARGIN: Distance = 25.0;
11+
12+
const LEAF_FILL_COLOR: &str = "green";
13+
const LEAF_BORDER_COLOR: &str = "dark green";
14+
const LEAF_BORDER_WIDTH: Distance = 1.0;
15+
const LEFT_LEAF_RADIUS: Distance = 200.0;
16+
const LEFT_LEAF_EXTENT: Angle = 45.0;
17+
const RIGHT_LEAF_INCLINATION: Angle = 15.0;
18+
const RIGHT_LEAF_BOTTOM_RADIUS: Distance = 250.0;
19+
const RIGHT_LEAF_BOTTOM_EXTENT: Angle = 45.0;
20+
const RIGHT_LEAF_TOP_RADIUS: Distance = 157.0;
21+
const RIGHT_LEAF_TOP_EXTENT: Angle = 75.0;
22+
23+
const TRUNK_COLOR: &str = LEAF_BORDER_COLOR;
24+
const TRUNK_WIDTH: Distance = 3.0;
25+
const TRUNK_PIECE_COUNT: usize = 4;
26+
const TRUNK_PIECE_RADIUS: Distance = 500.0;
27+
const TRUNK_PIECE_EXTENT: Angle = 15.0;
28+
29+
const PETALS_COUNT: usize = 4;
30+
const PETALS_FILL_COLOR: &str = "purple";
31+
const PETALS_BORDER_COLOR: &str = "dark purple";
32+
const PETALS_BORDER_WIDTH: Distance = LEAF_BORDER_WIDTH;
33+
const PETALS_INIT_LEFT: Angle = 65.0;
34+
const PETALS_SIDE_RADIUS: Distance = 80.0;
35+
const PETALS_SIDE_EXTENT: Angle = 90.0;
36+
const PETALS_SPACE_GAP: Angle = 20.0;
37+
const PETALS_SPACE_RADIUS: Distance = 40.0;
38+
const PETALS_SPACE_EXTENT: Angle = 30.0;
39+
40+
fn main() {
41+
// Acquiring resources.
42+
let mut drawing = Drawing::new();
43+
let size = drawing.size();
44+
let mut turtle = drawing.add_turtle();
45+
46+
// Initial positioning.
47+
turtle.set_speed("instant");
48+
turtle.pen_up();
49+
turtle.go_to([
50+
-(size.width as f64) / 6.0,
51+
-(size.height as f64) / 2.0 + BOTTOM_MARGIN,
52+
]);
53+
turtle.pen_down();
54+
55+
// Setup.
56+
turtle.use_degrees();
57+
turtle.set_speed(TURTLE_SPEED);
58+
59+
// Body.
60+
turtle.set_fill_color(LEAF_FILL_COLOR);
61+
turtle.set_pen_color(LEAF_BORDER_COLOR);
62+
63+
for _ in 0..TRUNK_PIECE_COUNT {
64+
// Leaves:
65+
turtle.set_pen_size(LEAF_BORDER_WIDTH);
66+
turtle.set_pen_color(LEAF_BORDER_COLOR);
67+
turtle.begin_fill();
68+
69+
// Left leaf.
70+
turtle.arc_left(LEFT_LEAF_RADIUS, LEFT_LEAF_EXTENT);
71+
turtle.right(LEFT_LEAF_EXTENT);
72+
turtle.arc_right(LEFT_LEAF_RADIUS, -LEFT_LEAF_EXTENT);
73+
turtle.right(LEFT_LEAF_EXTENT);
74+
75+
// Right leaf.
76+
turtle.right(RIGHT_LEAF_INCLINATION);
77+
turtle.arc_right(RIGHT_LEAF_BOTTOM_RADIUS, RIGHT_LEAF_BOTTOM_EXTENT);
78+
turtle.right(RIGHT_LEAF_INCLINATION);
79+
turtle.arc_right(RIGHT_LEAF_TOP_RADIUS, -RIGHT_LEAF_TOP_EXTENT);
80+
81+
// Trunk.
82+
turtle.end_fill();
83+
turtle.set_pen_size(TRUNK_WIDTH);
84+
turtle.set_pen_color(TRUNK_COLOR);
85+
turtle.arc_right(TRUNK_PIECE_RADIUS, TRUNK_PIECE_EXTENT);
86+
}
87+
88+
// Petals.
89+
turtle.set_fill_color(PETALS_FILL_COLOR);
90+
turtle.set_pen_color(PETALS_BORDER_COLOR);
91+
turtle.set_pen_size(PETALS_BORDER_WIDTH);
92+
turtle.left(PETALS_INIT_LEFT);
93+
turtle.begin_fill();
94+
turtle.arc_right(PETALS_SIDE_RADIUS, PETALS_SIDE_EXTENT);
95+
96+
for _ in 0..PETALS_COUNT {
97+
turtle.left(PETALS_SPACE_GAP);
98+
turtle.arc_right(PETALS_SPACE_RADIUS, -PETALS_SPACE_EXTENT);
99+
turtle.right(2.0 * PETALS_SPACE_GAP + PETALS_SPACE_EXTENT);
100+
turtle.arc_left(PETALS_SPACE_RADIUS, PETALS_SPACE_EXTENT);
101+
}
102+
103+
// Finish petals with error adjustments.
104+
turtle.left(PETALS_SPACE_GAP);
105+
turtle.arc_left(PETALS_SIDE_RADIUS + 1.0, 3.0 - PETALS_SIDE_EXTENT);
106+
turtle.end_fill();
107+
108+
// Reveal final drawing.
109+
turtle.hide();
110+
}

0 commit comments

Comments
 (0)