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