File size: 2,895 Bytes
7d0bb4d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
from pathlib import Path

from manim import Scene, ThreeDScene, config

from manim_chemistry import (BohrAtom, GraphMolecule, MElementObject,
                             MMoleculeObject, Orbital, PeriodicTable,
                             ThreeDMolecule, sdf_parser)

script_path = Path(__file__).absolute().parent
files_path = script_path / "element_files"


# 2D Molecule example
class Draw2DMorphine(Scene):
    # Two D Manim Chemistry objects require Cairo renderer
    config.renderer = "cairo"

    def construct(self):
        morphine = MMoleculeObject.from_mol_file(filename=files_path / "morphine.mol")
        self.add(morphine)

# 2D Molecule from SDF file
class Draw2DMorphineSDF(Scene):
    config.renderer = "cairo"

    def construct(self):
        parts = sdf_parser(file=files_path / "morphine.sdf")
        atoms, bonds = parts[0]
        morphine = MMoleculeObject(atoms, bonds)
        self.add(morphine)


# 2D Graph Molecule example
class DrawGraphMorphine(Scene):
    # Two D Manim Chemistry objects require Cairo renderer
    config.renderer = "cairo"

    def construct(self):
        self.add(GraphMolecule.build_from_mol(mol_file=files_path / "morphine.mol"))

# 2D Graph Molecule example
class DrawLabeledGraphMorphine(Scene):
    # Two D Manim Chemistry objects require Cairo renderer
    config.renderer = "cairo"

    def construct(self):
        self.add(
            GraphMolecule.build_from_mol(
                mol_file=files_path / "morphine.mol", label=True
            )
        )


# 3D Molecule example
class Draw3DMorphine(ThreeDScene):
    # Three D Manim Chemistry objects require Opengl renderer
    config.renderer = "opengl"

    def construct(self):
        self.add(
            ThreeDMolecule.from_mol_file(
                filename=files_path / "morphine3d.mol",
                source_csv=files_path / "Elementos.csv",
            )
        )
        self.wait()


# Element example
class DrawCarbonElement(Scene):
    # Two D Manim Chemistry objects require Cairo renderer
    config.renderer = "cairo"

    def construct(self):
        self.add(
            MElementObject.from_csv_file_data(
                filename=files_path / "Elementos.csv", atomic_number=6
            )
        )


# Periodic Table example
class DrawPeriodicTable(Scene):
    # Two D Manim Chemistry objects require Cairo renderer
    config.renderer = "cairo"

    def construct(self):
        self.add(PeriodicTable(data_file=files_path / "Elementos.csv"))


# Orbitals example
class DrawPOrbital(ThreeDScene):
    # Three D Manim Chemistry objects require Opengl renderer
    config.renderer = "opengl"

    def construct(self):
        self.add(Orbital(l=1, m=-1))


# Bohr diagram example
class BohrDiagram(Scene):
    # Two D Manim Chemistry objects require Cairo renderer
    config.renderer = "cairo"

    def construct(self):
        self.add(BohrAtom())