From 2308b7c198117a55233c8db2b69485081634dc81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Orvisk=C3=BD?= <orvisky.tomas@centrum.cz> Date: Sat, 3 Feb 2024 13:02:59 +0100 Subject: [PATCH] added more examples --- examples/scenes/animals.py | 64 +++++++++++++++++++++++++++++++++++ examples/scenes/class_tree.py | 19 +++++++++++ 2 files changed, 83 insertions(+) create mode 100644 examples/scenes/animals.py create mode 100644 examples/scenes/class_tree.py diff --git a/examples/scenes/animals.py b/examples/scenes/animals.py new file mode 100644 index 0000000..241d9d1 --- /dev/null +++ b/examples/scenes/animals.py @@ -0,0 +1,64 @@ +from pyplaml import * + + +class MyScene(ZoomedScene): + def construct(self): + self.camera.background_color = WHITE + Text.set_default(font_size=16) + + header = Text("PyPLAML exmaple", font_size=44, color=BLACK, weight=BOLD) + self.play(Write(header), Create(Underline(header, color=BLACK))) + + # Prepare classes for diagram + animal = DiagramClass("Animal", attributes=[ + ClassAttribute('name', modifier=AttributeModifier.PRIVATE), + ClassAttribute('pet()', True) + ]) + animal.set_abstract(True) + dog = DiagramClass("Dog") + cat = DiagramClass("Cat") + + # Prepare edges between classes + dog.add_edge( + DiagramEdge(dog, animal, target_rel=Relation.EXTENSION, edge_text="inherits from")) + cat.add_edge(DiagramEdge(cat, animal, target_rel=Relation.EXTENSION)) + + # Prepare diagram with a layout + diagram = Diagram(DotLayout()) + diagram.add(animal, dog, cat, *dog.get_edges(), *cat.get_edges()) # remember to add the edges + diagram.apply_layout(1, 0.75) # after all objects are in the diagram, we can apply the layout + + diagram.move_to(ORIGIN).shift(DOWN * 3) + self.play(self.camera.auto_zoom(self.mobjects + [diagram], margin=2)) + self.play(FadeIn(diagram)) + + self.play(dog.animate.shift(LEFT)) + self.play(cat.animate.shift(RIGHT)) + + self.play(animal.animate.rotate(45 * DEGREES)) + self.play(animal.animate.rotate(-90 * DEGREES)) + self.play(animal.animate.rotate(45 * DEGREES)) + + self.play(FadeOut(animal), FadeOut(*dog.get_edges()), FadeOut(*cat.get_edges())) + + dog.add_attributes([ + ClassAttribute('void bark()', True) + ]) + + self.play(Indicate(dog)) + + self.play(VGroup(dog, cat).animate.arrange(DOWN, buff=2).shift(DOWN * 3)) + + dog_cat_assoc_edge = dog.add_edge(DiagramEdge(dog, cat, target_rel=Relation.ASSOCIATION)) + self.play(GrowFromEdge( + dog_cat_assoc_edge, + dog.get_edge_center(DOWN)) + ) + + self.play(Indicate(dog)) + self.play(Indicate(dog_cat_assoc_edge)) + self.play(Indicate(cat)) + + self.play(Swap(cat, dog)) + + self.wait(2) diff --git a/examples/scenes/class_tree.py b/examples/scenes/class_tree.py new file mode 100644 index 0000000..8b11b57 --- /dev/null +++ b/examples/scenes/class_tree.py @@ -0,0 +1,19 @@ +from pyplaml import * + + +class MyScene(ZoomedScene): + def construct(self): + self.camera.background_color = WHITE + Text.set_default(font_size=16) + + diag = PUMLParser().parse_file("examples/plantuml/02_class_tree.puml") + diag.layout = DotLayout() + diag.apply_layout(1.5, 1.2) + + self.add(diag) + self.camera.auto_zoom(self.mobjects, margin=1, animate=False) + + self.play(diag["C5"].animate.shift(LEFT*2)) + self.play(diag["C7"].animate.shift(UP*2)) + + self.wait(2) -- GitLab