pub struct TurtleLSystemBuilder { /* private fields */ }Expand description
A TurtleLSystemBuilder is used to generate an L-system and a turtle
based renderer based don this L-system.
Implementations§
Source§impl TurtleLSystemBuilder
impl TurtleLSystemBuilder
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new TurtleLSystemBuilder instance.
Examples found in repository?
examples/dragon_curve_data.rs (line 6)
5fn main() {
6 let mut builder = TurtleLSystemBuilder::new();
7
8 builder
9 .token("X", TurtleAction::Nothing)
10 .token("Y", TurtleAction::Nothing)
11 .token("F", TurtleAction::Forward(30))
12 .token("+", TurtleAction::Rotate(-90))
13 .token("-", TurtleAction::Rotate(90))
14 .axiom("F X")
15 .rule("X => X + Y F +")
16 .rule("Y => - F X - Y");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(15);
20
21 let rv = renderer.render(&system, &DataRendererOptions::default());
22 println!("Dragon curve builder generated {} lines", rv.len());
23}More examples
examples/koch_curve.rs (line 7)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(30))
11 .token("+", TurtleAction::Rotate(90))
12 .token("-", TurtleAction::Rotate(-90))
13 .axiom("F")
14 .rule("F => F + F - F - F + F");
15
16 let (mut system, renderer) = builder.finish();
17 system.step_by(7);
18
19 let options = ImageRendererOptionsBuilder::new()
20 .padding(10)
21 .thickness(4.0)
22 .fill_color(Rgb([255u8, 255u8, 255u8]))
23 .line_color(Rgb([0u8, 0u8, 100u8]))
24 .build();
25
26 renderer
27 .render(&system, &options)
28 .save("koch_curve.png")
29 .expect("Failed to save koch_curve.png");
30}examples/koch_curve_video.rs (line 7)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(30))
11 .token("+", TurtleAction::Rotate(90))
12 .token("-", TurtleAction::Rotate(-90))
13 .axiom("F")
14 .rule("F => F + F - F - F + F");
15
16 let (mut system, renderer) = builder.finish();
17 system.step_by(4);
18
19 let options = VideoRendererOptionsBuilder::new()
20 .filename("koch_curve.gif")
21 .fps(20)
22 .skip_by(5)
23 .padding(10)
24 .thickness(4.0)
25 .fill_color(Rgb([255u8, 255u8, 255u8]))
26 .line_color(Rgb([0u8, 0u8, 100u8]))
27 .progress_bar(true)
28 .build();
29
30 renderer.render(&system, &options);
31}examples/sierpinski_arrowhead.rs (line 7)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("A", TurtleAction::Forward(200))
11 .token("B", TurtleAction::Forward(200))
12 .token("+", TurtleAction::Rotate(60))
13 .token("-", TurtleAction::Rotate(-60))
14 .axiom("A")
15 .rule("A => B - A - B")
16 .rule("B => A + B + A");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(7);
20
21 let options = ImageRendererOptionsBuilder::new()
22 .padding(20)
23 .thickness(15.0)
24 .fill_color(Rgb([255u8, 255u8, 255u8]))
25 .line_color(Rgb([0u8, 100u8, 0u8]))
26 .build();
27
28 renderer
29 .render(&system, &options)
30 .save("sierpinski_arrowhead.png")
31 .expect("Failed to save to sierpinski_arrowhead.png");
32}examples/sierpinski_triangle.rs (line 7)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(200))
11 .token("G", TurtleAction::Forward(200))
12 .token("+", TurtleAction::Rotate(120))
13 .token("-", TurtleAction::Rotate(-120))
14 .axiom("F - G - G")
15 .rule("F => F - G + F + G - F")
16 .rule("G => G G");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(7);
20
21 let options = ImageRendererOptionsBuilder::new()
22 .padding(20)
23 .thickness(8.0)
24 .fill_color(Rgb([255u8, 255u8, 255u8]))
25 .line_color(Rgb([0u8, 100u8, 0u8]))
26 .build();
27
28 renderer
29 .render(&system, &options)
30 .save("sierpinski_triangle.png")
31 .expect("Failed to save to sierpinski_triangle.png");
32}examples/dragon_curve.rs (line 8)
7fn main() {
8 let mut builder = TurtleLSystemBuilder::new();
9
10 builder
11 .token("X", TurtleAction::Nothing)
12 .token("Y", TurtleAction::Nothing)
13 .token("F", TurtleAction::Forward(30))
14 .token("+", TurtleAction::Rotate(-90))
15 .token("-", TurtleAction::Rotate(90))
16 .axiom("F X")
17 .rule("X => X + Y F +")
18 .rule("Y => - F X - Y");
19
20 let (mut system, renderer) = builder.finish();
21 system.step_by(15);
22
23 let options = ImageRendererOptionsBuilder::new()
24 .padding(10)
25 .thickness(8.0)
26 .fill_color(Rgb([255u8, 255u8, 255u8]))
27 .line_color(Rgb([100u8, 0u8, 0u8]))
28 .build();
29
30 renderer
31 .render(&system, &options)
32 .save("dragon_curve.png")
33 .expect("Failed to save to dragon_curve.png");
34}Additional examples can be found in:
Sourcepub fn rotate(&mut self, angle: i32) -> &mut Self
pub fn rotate(&mut self, angle: i32) -> &mut Self
Apply a global rotation to the builder. This is useful for modifying the orientation
of the data passed to a Renderer.
Examples found in repository?
examples/fractal_binary_tree.rs (line 21)
8fn main() {
9 let mut builder = TurtleLSystemBuilder::new();
10
11 builder
12 .token("0", TurtleAction::Forward(50))
13 .token("1", TurtleAction::Forward(50))
14 .token("L", TurtleAction::Rotate(45))
15 .token("R", TurtleAction::Rotate(-45))
16 .token("[", TurtleAction::Push)
17 .token("]", TurtleAction::Pop)
18 .axiom("0")
19 .rule("1 => 1 1")
20 .rule("0 => 1 [ L 0 ] R 0")
21 .rotate(90);
22
23 let (mut system, renderer) = builder.finish();
24 system.step_by(9);
25
26 let options = ImageRendererOptionsBuilder::new()
27 .padding(20)
28 .thickness(5.5)
29 .fill_color(Rgb([255u8, 255u8, 255u8]))
30 .line_color(Rgb([0u8, 100u8, 100u8]))
31 .build();
32
33 renderer
34 .render(&system, &options)
35 .save("fractal_binary_tree.png")
36 .expect("Failed to save to fractal_binary_tree.png");
37}More examples
examples/fractal_plant.rs (line 19)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("X", TurtleAction::Nothing)
11 .token("F", TurtleAction::Forward(200))
12 .token("+", TurtleAction::Rotate(25))
13 .token("-", TurtleAction::Rotate(-25))
14 .token("[", TurtleAction::Push)
15 .token("]", TurtleAction::Pop)
16 .axiom("X")
17 .rule("X => F + [ [ X ] - X ] - F [ - F X ] + X")
18 .rule("F => F F")
19 .rotate(70);
20
21 let (mut system, renderer) = builder.finish();
22 system.step_by(6);
23
24 let options = ImageRendererOptionsBuilder::new()
25 .padding(20)
26 .thickness(18.0)
27 .fill_color(Rgb([255u8, 255u8, 255u8]))
28 .line_color(Rgb([0u8, 100u8, 0u8]))
29 .build();
30
31 renderer
32 .render(&system, &options)
33 .save("fractal_plant.png")
34 .expect("Failed to save fractal_plant.png");
35}Sourcepub fn token<S: Into<String>>(
&mut self,
token: S,
action: TurtleAction,
) -> &mut Self
pub fn token<S: Into<String>>( &mut self, token: S, action: TurtleAction, ) -> &mut Self
Associate a token and corresponding action to this builder.
Examples found in repository?
examples/dragon_curve_data.rs (line 9)
5fn main() {
6 let mut builder = TurtleLSystemBuilder::new();
7
8 builder
9 .token("X", TurtleAction::Nothing)
10 .token("Y", TurtleAction::Nothing)
11 .token("F", TurtleAction::Forward(30))
12 .token("+", TurtleAction::Rotate(-90))
13 .token("-", TurtleAction::Rotate(90))
14 .axiom("F X")
15 .rule("X => X + Y F +")
16 .rule("Y => - F X - Y");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(15);
20
21 let rv = renderer.render(&system, &DataRendererOptions::default());
22 println!("Dragon curve builder generated {} lines", rv.len());
23}More examples
examples/koch_curve.rs (line 10)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(30))
11 .token("+", TurtleAction::Rotate(90))
12 .token("-", TurtleAction::Rotate(-90))
13 .axiom("F")
14 .rule("F => F + F - F - F + F");
15
16 let (mut system, renderer) = builder.finish();
17 system.step_by(7);
18
19 let options = ImageRendererOptionsBuilder::new()
20 .padding(10)
21 .thickness(4.0)
22 .fill_color(Rgb([255u8, 255u8, 255u8]))
23 .line_color(Rgb([0u8, 0u8, 100u8]))
24 .build();
25
26 renderer
27 .render(&system, &options)
28 .save("koch_curve.png")
29 .expect("Failed to save koch_curve.png");
30}examples/koch_curve_video.rs (line 10)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(30))
11 .token("+", TurtleAction::Rotate(90))
12 .token("-", TurtleAction::Rotate(-90))
13 .axiom("F")
14 .rule("F => F + F - F - F + F");
15
16 let (mut system, renderer) = builder.finish();
17 system.step_by(4);
18
19 let options = VideoRendererOptionsBuilder::new()
20 .filename("koch_curve.gif")
21 .fps(20)
22 .skip_by(5)
23 .padding(10)
24 .thickness(4.0)
25 .fill_color(Rgb([255u8, 255u8, 255u8]))
26 .line_color(Rgb([0u8, 0u8, 100u8]))
27 .progress_bar(true)
28 .build();
29
30 renderer.render(&system, &options);
31}examples/sierpinski_arrowhead.rs (line 10)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("A", TurtleAction::Forward(200))
11 .token("B", TurtleAction::Forward(200))
12 .token("+", TurtleAction::Rotate(60))
13 .token("-", TurtleAction::Rotate(-60))
14 .axiom("A")
15 .rule("A => B - A - B")
16 .rule("B => A + B + A");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(7);
20
21 let options = ImageRendererOptionsBuilder::new()
22 .padding(20)
23 .thickness(15.0)
24 .fill_color(Rgb([255u8, 255u8, 255u8]))
25 .line_color(Rgb([0u8, 100u8, 0u8]))
26 .build();
27
28 renderer
29 .render(&system, &options)
30 .save("sierpinski_arrowhead.png")
31 .expect("Failed to save to sierpinski_arrowhead.png");
32}examples/sierpinski_triangle.rs (line 10)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(200))
11 .token("G", TurtleAction::Forward(200))
12 .token("+", TurtleAction::Rotate(120))
13 .token("-", TurtleAction::Rotate(-120))
14 .axiom("F - G - G")
15 .rule("F => F - G + F + G - F")
16 .rule("G => G G");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(7);
20
21 let options = ImageRendererOptionsBuilder::new()
22 .padding(20)
23 .thickness(8.0)
24 .fill_color(Rgb([255u8, 255u8, 255u8]))
25 .line_color(Rgb([0u8, 100u8, 0u8]))
26 .build();
27
28 renderer
29 .render(&system, &options)
30 .save("sierpinski_triangle.png")
31 .expect("Failed to save to sierpinski_triangle.png");
32}examples/dragon_curve.rs (line 11)
7fn main() {
8 let mut builder = TurtleLSystemBuilder::new();
9
10 builder
11 .token("X", TurtleAction::Nothing)
12 .token("Y", TurtleAction::Nothing)
13 .token("F", TurtleAction::Forward(30))
14 .token("+", TurtleAction::Rotate(-90))
15 .token("-", TurtleAction::Rotate(90))
16 .axiom("F X")
17 .rule("X => X + Y F +")
18 .rule("Y => - F X - Y");
19
20 let (mut system, renderer) = builder.finish();
21 system.step_by(15);
22
23 let options = ImageRendererOptionsBuilder::new()
24 .padding(10)
25 .thickness(8.0)
26 .fill_color(Rgb([255u8, 255u8, 255u8]))
27 .line_color(Rgb([100u8, 0u8, 0u8]))
28 .build();
29
30 renderer
31 .render(&system, &options)
32 .save("dragon_curve.png")
33 .expect("Failed to save to dragon_curve.png");
34}Additional examples can be found in:
Sourcepub fn axiom(&mut self, ident: &str) -> &mut Self
pub fn axiom(&mut self, ident: &str) -> &mut Self
Set the axiom for this builder.
Examples found in repository?
examples/dragon_curve_data.rs (line 14)
5fn main() {
6 let mut builder = TurtleLSystemBuilder::new();
7
8 builder
9 .token("X", TurtleAction::Nothing)
10 .token("Y", TurtleAction::Nothing)
11 .token("F", TurtleAction::Forward(30))
12 .token("+", TurtleAction::Rotate(-90))
13 .token("-", TurtleAction::Rotate(90))
14 .axiom("F X")
15 .rule("X => X + Y F +")
16 .rule("Y => - F X - Y");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(15);
20
21 let rv = renderer.render(&system, &DataRendererOptions::default());
22 println!("Dragon curve builder generated {} lines", rv.len());
23}More examples
examples/koch_curve.rs (line 13)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(30))
11 .token("+", TurtleAction::Rotate(90))
12 .token("-", TurtleAction::Rotate(-90))
13 .axiom("F")
14 .rule("F => F + F - F - F + F");
15
16 let (mut system, renderer) = builder.finish();
17 system.step_by(7);
18
19 let options = ImageRendererOptionsBuilder::new()
20 .padding(10)
21 .thickness(4.0)
22 .fill_color(Rgb([255u8, 255u8, 255u8]))
23 .line_color(Rgb([0u8, 0u8, 100u8]))
24 .build();
25
26 renderer
27 .render(&system, &options)
28 .save("koch_curve.png")
29 .expect("Failed to save koch_curve.png");
30}examples/koch_curve_video.rs (line 13)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(30))
11 .token("+", TurtleAction::Rotate(90))
12 .token("-", TurtleAction::Rotate(-90))
13 .axiom("F")
14 .rule("F => F + F - F - F + F");
15
16 let (mut system, renderer) = builder.finish();
17 system.step_by(4);
18
19 let options = VideoRendererOptionsBuilder::new()
20 .filename("koch_curve.gif")
21 .fps(20)
22 .skip_by(5)
23 .padding(10)
24 .thickness(4.0)
25 .fill_color(Rgb([255u8, 255u8, 255u8]))
26 .line_color(Rgb([0u8, 0u8, 100u8]))
27 .progress_bar(true)
28 .build();
29
30 renderer.render(&system, &options);
31}examples/sierpinski_arrowhead.rs (line 14)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("A", TurtleAction::Forward(200))
11 .token("B", TurtleAction::Forward(200))
12 .token("+", TurtleAction::Rotate(60))
13 .token("-", TurtleAction::Rotate(-60))
14 .axiom("A")
15 .rule("A => B - A - B")
16 .rule("B => A + B + A");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(7);
20
21 let options = ImageRendererOptionsBuilder::new()
22 .padding(20)
23 .thickness(15.0)
24 .fill_color(Rgb([255u8, 255u8, 255u8]))
25 .line_color(Rgb([0u8, 100u8, 0u8]))
26 .build();
27
28 renderer
29 .render(&system, &options)
30 .save("sierpinski_arrowhead.png")
31 .expect("Failed to save to sierpinski_arrowhead.png");
32}examples/sierpinski_triangle.rs (line 14)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(200))
11 .token("G", TurtleAction::Forward(200))
12 .token("+", TurtleAction::Rotate(120))
13 .token("-", TurtleAction::Rotate(-120))
14 .axiom("F - G - G")
15 .rule("F => F - G + F + G - F")
16 .rule("G => G G");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(7);
20
21 let options = ImageRendererOptionsBuilder::new()
22 .padding(20)
23 .thickness(8.0)
24 .fill_color(Rgb([255u8, 255u8, 255u8]))
25 .line_color(Rgb([0u8, 100u8, 0u8]))
26 .build();
27
28 renderer
29 .render(&system, &options)
30 .save("sierpinski_triangle.png")
31 .expect("Failed to save to sierpinski_triangle.png");
32}examples/dragon_curve.rs (line 16)
7fn main() {
8 let mut builder = TurtleLSystemBuilder::new();
9
10 builder
11 .token("X", TurtleAction::Nothing)
12 .token("Y", TurtleAction::Nothing)
13 .token("F", TurtleAction::Forward(30))
14 .token("+", TurtleAction::Rotate(-90))
15 .token("-", TurtleAction::Rotate(90))
16 .axiom("F X")
17 .rule("X => X + Y F +")
18 .rule("Y => - F X - Y");
19
20 let (mut system, renderer) = builder.finish();
21 system.step_by(15);
22
23 let options = ImageRendererOptionsBuilder::new()
24 .padding(10)
25 .thickness(8.0)
26 .fill_color(Rgb([255u8, 255u8, 255u8]))
27 .line_color(Rgb([100u8, 0u8, 0u8]))
28 .build();
29
30 renderer
31 .render(&system, &options)
32 .save("dragon_curve.png")
33 .expect("Failed to save to dragon_curve.png");
34}Additional examples can be found in:
Sourcepub fn rule<'a, S: Into<&'a str>>(&mut self, rule: S) -> &mut Self
pub fn rule<'a, S: Into<&'a str>>(&mut self, rule: S) -> &mut Self
Add a transformation rule to the builder.
Examples found in repository?
examples/dragon_curve_data.rs (line 15)
5fn main() {
6 let mut builder = TurtleLSystemBuilder::new();
7
8 builder
9 .token("X", TurtleAction::Nothing)
10 .token("Y", TurtleAction::Nothing)
11 .token("F", TurtleAction::Forward(30))
12 .token("+", TurtleAction::Rotate(-90))
13 .token("-", TurtleAction::Rotate(90))
14 .axiom("F X")
15 .rule("X => X + Y F +")
16 .rule("Y => - F X - Y");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(15);
20
21 let rv = renderer.render(&system, &DataRendererOptions::default());
22 println!("Dragon curve builder generated {} lines", rv.len());
23}More examples
examples/koch_curve.rs (line 14)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(30))
11 .token("+", TurtleAction::Rotate(90))
12 .token("-", TurtleAction::Rotate(-90))
13 .axiom("F")
14 .rule("F => F + F - F - F + F");
15
16 let (mut system, renderer) = builder.finish();
17 system.step_by(7);
18
19 let options = ImageRendererOptionsBuilder::new()
20 .padding(10)
21 .thickness(4.0)
22 .fill_color(Rgb([255u8, 255u8, 255u8]))
23 .line_color(Rgb([0u8, 0u8, 100u8]))
24 .build();
25
26 renderer
27 .render(&system, &options)
28 .save("koch_curve.png")
29 .expect("Failed to save koch_curve.png");
30}examples/koch_curve_video.rs (line 14)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(30))
11 .token("+", TurtleAction::Rotate(90))
12 .token("-", TurtleAction::Rotate(-90))
13 .axiom("F")
14 .rule("F => F + F - F - F + F");
15
16 let (mut system, renderer) = builder.finish();
17 system.step_by(4);
18
19 let options = VideoRendererOptionsBuilder::new()
20 .filename("koch_curve.gif")
21 .fps(20)
22 .skip_by(5)
23 .padding(10)
24 .thickness(4.0)
25 .fill_color(Rgb([255u8, 255u8, 255u8]))
26 .line_color(Rgb([0u8, 0u8, 100u8]))
27 .progress_bar(true)
28 .build();
29
30 renderer.render(&system, &options);
31}examples/sierpinski_arrowhead.rs (line 15)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("A", TurtleAction::Forward(200))
11 .token("B", TurtleAction::Forward(200))
12 .token("+", TurtleAction::Rotate(60))
13 .token("-", TurtleAction::Rotate(-60))
14 .axiom("A")
15 .rule("A => B - A - B")
16 .rule("B => A + B + A");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(7);
20
21 let options = ImageRendererOptionsBuilder::new()
22 .padding(20)
23 .thickness(15.0)
24 .fill_color(Rgb([255u8, 255u8, 255u8]))
25 .line_color(Rgb([0u8, 100u8, 0u8]))
26 .build();
27
28 renderer
29 .render(&system, &options)
30 .save("sierpinski_arrowhead.png")
31 .expect("Failed to save to sierpinski_arrowhead.png");
32}examples/sierpinski_triangle.rs (line 15)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(200))
11 .token("G", TurtleAction::Forward(200))
12 .token("+", TurtleAction::Rotate(120))
13 .token("-", TurtleAction::Rotate(-120))
14 .axiom("F - G - G")
15 .rule("F => F - G + F + G - F")
16 .rule("G => G G");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(7);
20
21 let options = ImageRendererOptionsBuilder::new()
22 .padding(20)
23 .thickness(8.0)
24 .fill_color(Rgb([255u8, 255u8, 255u8]))
25 .line_color(Rgb([0u8, 100u8, 0u8]))
26 .build();
27
28 renderer
29 .render(&system, &options)
30 .save("sierpinski_triangle.png")
31 .expect("Failed to save to sierpinski_triangle.png");
32}examples/dragon_curve.rs (line 17)
7fn main() {
8 let mut builder = TurtleLSystemBuilder::new();
9
10 builder
11 .token("X", TurtleAction::Nothing)
12 .token("Y", TurtleAction::Nothing)
13 .token("F", TurtleAction::Forward(30))
14 .token("+", TurtleAction::Rotate(-90))
15 .token("-", TurtleAction::Rotate(90))
16 .axiom("F X")
17 .rule("X => X + Y F +")
18 .rule("Y => - F X - Y");
19
20 let (mut system, renderer) = builder.finish();
21 system.step_by(15);
22
23 let options = ImageRendererOptionsBuilder::new()
24 .padding(10)
25 .thickness(8.0)
26 .fill_color(Rgb([255u8, 255u8, 255u8]))
27 .line_color(Rgb([100u8, 0u8, 0u8]))
28 .build();
29
30 renderer
31 .render(&system, &options)
32 .save("dragon_curve.png")
33 .expect("Failed to save to dragon_curve.png");
34}Additional examples can be found in:
Sourcepub fn finish(self) -> (LSystem, TurtleRenderer<TurtleLSystemState>)
pub fn finish(self) -> (LSystem, TurtleRenderer<TurtleLSystemState>)
Consumes the builder, returning the generated LSystem and a Renderer
which can associate tokens in the LSystem to turtle actions.
Examples found in repository?
examples/dragon_curve_data.rs (line 18)
5fn main() {
6 let mut builder = TurtleLSystemBuilder::new();
7
8 builder
9 .token("X", TurtleAction::Nothing)
10 .token("Y", TurtleAction::Nothing)
11 .token("F", TurtleAction::Forward(30))
12 .token("+", TurtleAction::Rotate(-90))
13 .token("-", TurtleAction::Rotate(90))
14 .axiom("F X")
15 .rule("X => X + Y F +")
16 .rule("Y => - F X - Y");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(15);
20
21 let rv = renderer.render(&system, &DataRendererOptions::default());
22 println!("Dragon curve builder generated {} lines", rv.len());
23}More examples
examples/koch_curve.rs (line 16)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(30))
11 .token("+", TurtleAction::Rotate(90))
12 .token("-", TurtleAction::Rotate(-90))
13 .axiom("F")
14 .rule("F => F + F - F - F + F");
15
16 let (mut system, renderer) = builder.finish();
17 system.step_by(7);
18
19 let options = ImageRendererOptionsBuilder::new()
20 .padding(10)
21 .thickness(4.0)
22 .fill_color(Rgb([255u8, 255u8, 255u8]))
23 .line_color(Rgb([0u8, 0u8, 100u8]))
24 .build();
25
26 renderer
27 .render(&system, &options)
28 .save("koch_curve.png")
29 .expect("Failed to save koch_curve.png");
30}examples/koch_curve_video.rs (line 16)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(30))
11 .token("+", TurtleAction::Rotate(90))
12 .token("-", TurtleAction::Rotate(-90))
13 .axiom("F")
14 .rule("F => F + F - F - F + F");
15
16 let (mut system, renderer) = builder.finish();
17 system.step_by(4);
18
19 let options = VideoRendererOptionsBuilder::new()
20 .filename("koch_curve.gif")
21 .fps(20)
22 .skip_by(5)
23 .padding(10)
24 .thickness(4.0)
25 .fill_color(Rgb([255u8, 255u8, 255u8]))
26 .line_color(Rgb([0u8, 0u8, 100u8]))
27 .progress_bar(true)
28 .build();
29
30 renderer.render(&system, &options);
31}examples/sierpinski_arrowhead.rs (line 18)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("A", TurtleAction::Forward(200))
11 .token("B", TurtleAction::Forward(200))
12 .token("+", TurtleAction::Rotate(60))
13 .token("-", TurtleAction::Rotate(-60))
14 .axiom("A")
15 .rule("A => B - A - B")
16 .rule("B => A + B + A");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(7);
20
21 let options = ImageRendererOptionsBuilder::new()
22 .padding(20)
23 .thickness(15.0)
24 .fill_color(Rgb([255u8, 255u8, 255u8]))
25 .line_color(Rgb([0u8, 100u8, 0u8]))
26 .build();
27
28 renderer
29 .render(&system, &options)
30 .save("sierpinski_arrowhead.png")
31 .expect("Failed to save to sierpinski_arrowhead.png");
32}examples/sierpinski_triangle.rs (line 18)
6fn main() {
7 let mut builder = TurtleLSystemBuilder::new();
8
9 builder
10 .token("F", TurtleAction::Forward(200))
11 .token("G", TurtleAction::Forward(200))
12 .token("+", TurtleAction::Rotate(120))
13 .token("-", TurtleAction::Rotate(-120))
14 .axiom("F - G - G")
15 .rule("F => F - G + F + G - F")
16 .rule("G => G G");
17
18 let (mut system, renderer) = builder.finish();
19 system.step_by(7);
20
21 let options = ImageRendererOptionsBuilder::new()
22 .padding(20)
23 .thickness(8.0)
24 .fill_color(Rgb([255u8, 255u8, 255u8]))
25 .line_color(Rgb([0u8, 100u8, 0u8]))
26 .build();
27
28 renderer
29 .render(&system, &options)
30 .save("sierpinski_triangle.png")
31 .expect("Failed to save to sierpinski_triangle.png");
32}examples/dragon_curve.rs (line 20)
7fn main() {
8 let mut builder = TurtleLSystemBuilder::new();
9
10 builder
11 .token("X", TurtleAction::Nothing)
12 .token("Y", TurtleAction::Nothing)
13 .token("F", TurtleAction::Forward(30))
14 .token("+", TurtleAction::Rotate(-90))
15 .token("-", TurtleAction::Rotate(90))
16 .axiom("F X")
17 .rule("X => X + Y F +")
18 .rule("Y => - F X - Y");
19
20 let (mut system, renderer) = builder.finish();
21 system.step_by(15);
22
23 let options = ImageRendererOptionsBuilder::new()
24 .padding(10)
25 .thickness(8.0)
26 .fill_color(Rgb([255u8, 255u8, 255u8]))
27 .line_color(Rgb([100u8, 0u8, 0u8]))
28 .build();
29
30 renderer
31 .render(&system, &options)
32 .save("dragon_curve.png")
33 .expect("Failed to save to dragon_curve.png");
34}Additional examples can be found in:
Trait Implementations§
Source§impl Clone for TurtleLSystemBuilder
impl Clone for TurtleLSystemBuilder
Source§fn clone(&self) -> TurtleLSystemBuilder
fn clone(&self) -> TurtleLSystemBuilder
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for TurtleLSystemBuilder
impl !RefUnwindSafe for TurtleLSystemBuilder
impl !Send for TurtleLSystemBuilder
impl !Sync for TurtleLSystemBuilder
impl Unpin for TurtleLSystemBuilder
impl !UnwindSafe for TurtleLSystemBuilder
Blanket Implementations§
Source§impl<Src, Scheme> ApproxFrom<Src, Scheme> for Srcwhere
Scheme: ApproxScheme,
impl<Src, Scheme> ApproxFrom<Src, Scheme> for Srcwhere
Scheme: ApproxScheme,
Source§fn approx_from(src: Src) -> Result<Src, <Src as ApproxFrom<Src, Scheme>>::Err>
fn approx_from(src: Src) -> Result<Src, <Src as ApproxFrom<Src, Scheme>>::Err>
Convert the given value into an approximately equivalent representation.
Source§impl<Dst, Src, Scheme> ApproxInto<Dst, Scheme> for Srcwhere
Dst: ApproxFrom<Src, Scheme>,
Scheme: ApproxScheme,
impl<Dst, Src, Scheme> ApproxInto<Dst, Scheme> for Srcwhere
Dst: ApproxFrom<Src, Scheme>,
Scheme: ApproxScheme,
Source§type Err = <Dst as ApproxFrom<Src, Scheme>>::Err
type Err = <Dst as ApproxFrom<Src, Scheme>>::Err
The error type produced by a failed conversion.
Source§fn approx_into(self) -> Result<Dst, <Src as ApproxInto<Dst, Scheme>>::Err>
fn approx_into(self) -> Result<Dst, <Src as ApproxInto<Dst, Scheme>>::Err>
Convert the subject into an approximately equivalent representation.
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, Dst> ConvAsUtil<Dst> for T
impl<T, Dst> ConvAsUtil<Dst> for T
Source§impl<T> ConvUtil for T
impl<T> ConvUtil for T
Source§fn approx_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
fn approx_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
Approximate the subject to a given type with the default scheme.
Source§fn approx_as_by<Dst, Scheme>(self) -> Result<Dst, Self::Err>
fn approx_as_by<Dst, Scheme>(self) -> Result<Dst, Self::Err>
Approximate the subject to a given type with a specific scheme.
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more