manim-fa-chemistry (نسخهی فارسی)
این ریپو نسخهی فارسیسازیشدهی manim-Chemistry
است که برای کار با پلاگین manim-fa
بازنویسی شده تا بتوان با آن ویدیوهای آموزشی شیمی به زبان فارسی ساخت. جدول
تناوبی، نامگذاری مولکولها و فرمولهای شیمیایی اکنون از فونت Vazirmatn و
رندر راستچین صحیح (به کمک FaText) پشتیبانی میکنند؛ بقیهی رفتار کتابخانه
(پارس فایلهای .mol/.sdf/...، مولکولهای سهبعدی، اوربیتالها و نمودار
بور) بدون تغییر و کاملاً سازگار با نسخهی فعلی Manim (v0.21) باقی مانده است.
مثال سریع فارسی
from manim import *
from manim_chemistry import *
class PeriodicTableFa(Scene):
def construct(self):
# بهصورت پیشفرض از دادههای فارسی (Elements_FA.csv) استفاده میکند
self.add(PeriodicTable())
class NamedMoleculeFa(Scene):
def construct(self):
morphine = NamedMolecule.from_mol_file(
name="مورفین",
filename="morphine.mol",
)
self.add(morphine)
class NamedFormulaFa(Scene):
def construct(self):
self.add(NamedFormula(metal_name="سدیم", non_metal_name="کلرید", formula="NaCl"))
برای استفاده از دادههای انگلیسی اصلی، فایل Elements_EN.csv را بهصورت
دستی به PeriodicTable(data_file=...) بدهید.
مستندات
برای توضیحات کاملتر، مستندات پروژهی اصلی (به انگلیسی) را ببینید.
فهرست مطالب:
- نصب
- manim-Chemistry چیست؟
- manim-Chemistry الان چه کارهایی میتواند بکند؟
- ساخت مولکولهای دوبعدی
- ساخت مولکول سهبعدی
- ساخت جدول تناوبی
- ساخت اوربیتالهای اتمی
- ساخت نمودار بور
- خواندن فایلهای .mol
- نمونهکارها
- ساختهشده با manim_chemistry
- راه ارتباطی
- مشارکتکنندگان بزرگ
نصب
میتوانید با pip نصب کنید:
pip install manim-fa-chemistry
یا ریپو را کلون کرده و از همانجا نصب کنید:
git clone https://github.com/Tabesh2020/manim-fa-chemistry.git
cd manim-fa-chemistry
python -m pip install .
یا
git clone https://github.com/Tabesh2020/manim-fa-chemistry.git
cd manim-fa-chemistry
python -m pip install -e .
اگر پکیج را قبلاً نصب کردهاید و فقط میخواهید آن را به آخرین نسخه بهروزرسانی کنید:
python -m pip install --upgrade manim-fa-chemistry
manim-Chemistry چیست؟
manim-Chemistry یک پلاگین برای Manim است که ساخت انیمیشنهای شیمی را آسانتر میکند.
تا جایی که نویسندهی اصلی اطلاع دارد، تنها پلاگین دیگر مرتبط با شیمی chanim است که تلاش میکند پکیج chemfig را به Manim وارد کند (و کار فوقالعادهای هم انجام میدهد!).
فلسفهی manim-Chemistry مسیر متفاوتی را دنبال میکند: این پلاگین سعی میکند ابزارهای Manim را با فایلهای دادهی شیمیایی (.mol، .sdf، .json، .asnt و .xlm) ترکیب کند تا با کلاسهایی ساده اما کاربردی، انیمیشنهای زیبای شیمیایی مثل جدول تناوبی یا ساختارهای دو و سهبعدی بسازد.
همچنین، manim-Chemistry تلاش میکند تا حد امکان همهچیز را از صفر بسازد. یعنی از کتابخانههایی مثل Mendeleev، RDKit، PyMOL، Open Babel و مانند آنها پرهیز میشود. دلیلش این است که وابستگی به پکیجهای شخصثالثی که ممکن است نگهداری سنگینی بخواهند، کم شود. با این حال، کاربران میتوانند قدرت آن کتابخانهها را با manim-Chemistry ترکیب کنند تا کارشان راحتتر شود. تنها کتابخانهی شخصثالثی که استفاده شده PubChem است، بهخاطر سادگی وارد کردن مستقیم مولکولها از وبسایتش.
پروژهی اصلی هنوز در حال توسعه است و تاریخ مشخصی برای انتشار نهایی ندارد.
manim-Chemistry الان چه کارهایی میتواند بکند؟
در ادامه خلاصهای از قابلیتهای manim-Chemistry آمده است. چون پروژهی اصلی هنوز در حال توسعه است، ممکن است این خلاصه کاملاً بهروز نباشد. برای دید بهتر، نمونهکارها (examples) را ببینید. همچنین فایل TODO میتواند نشان بدهد چه چیزهایی در راه است. اگر پیشنهادی برای پلاگین اصلی دارید، در ریپوی upstream ایشو یا پولریکوئست باز کنید.
ساخت مولکولهای دوبعدی
برای ساخت مولکول دوبعدی فقط کافی است یک فایل .mol با دادهی اتمها و پیوندها داشته باشید. فایل morphine.mol داخل پوشهی examples را ببینید تا بدانید ساختار فایل چه شکلی باید باشد.
برای ساخت یک صحنه با یک مولکول دوبعدی، ساختار کد باید اینطور باشد:
from manim import *
from manim_chemistry import *
class TwoDMoleculeScene(Scene):
def construct(self):
morphine = MMoleculeObject.molecule_from_file("morphine.mol")
self.add(morphine)
مثل همیشه میتوانید Manim را اجرا کنید:
manim .\examples.py -ps
نتیجه اینطوری میشود:
خیلی خوب به نظر نمیرسد، درسته؟ پیوندهای دوگانه در جای درستی قرار نگرفتهاند. میتوانیم این را حل کنیم!
میتوانید یک گزینه را روی True بگذارید تا شمارهی پیوندها را ببینید. کار مشابهی هم برای اتمها میتوانید انجام دهید. این شمارهگذاری از فایل .mol میآید و ربطی به ساختار شیمیایی ندارد.
from manim import *
from manim_chemistry import *
class TwoDMoleculeScene(Scene):
def construct(self):
morphine = MMoleculeObject.molecule_from_file("morphine.mol", add_bonds_numbering=True)
self.add(morphine)
نتیجه:
پس باید پیوندهای شمارهی ۷ و ۲۰ را بچرخانیم. میتوانیم با اضافه کردن اندیس آنها به لیست rotate_bonds این کار را انجام دهیم:
from manim import *
from manim_chemistry import *
class TwoDMoleculeScene(Scene):
def construct(self):
morphine = MMoleculeObject.molecule_from_file("morphine.mol", rotate_bonds=[7, 20])
self.add(morphine)
نتیجه:
حالا شد!
مولکولهای نامگذاریشده (Named Molecules):
شاید بخواهید به یک مولکول یک نام هم اضافه کنید. کار بسیار سادهای است، اما انجام همهچیز در یک آبجکت واحد راحت است. میتوانید یک NamedMolecule بسازید، شبیه به همان روشی که یک MMoleculeObject میسازید:
from manim import *
from manim_chemistry import *
class NamedMoleculeExample(Scene):
def construct(self):
named_molecule = NamedMolecule.molecule_from_file(name="مورفین", filename="morphine.mol")
self.add(named_molecule)
میتوانید یک مولکول یا یک متن از پیش ساختهشده هم بدهید و کلاس NamedMolecule آنها را با هم گروه میکند. این کنترل بیشتری به کاربر میدهد.
GraphMolecule:
یک نوع دیگر از مولکولهای دوبعدی، GraphMolecule است. اینها بر پایهی کلاس Graph در Manim ساخته شدهاند که قابلیتهای زیادی به آنها میدهد!
میتوانید تقریباً به همان شکلی که با MMolecule و NamedMolecule کار کردید، از اینها هم استفاده کنید:
from manim import *
from manim_chemistry import *
class GraphMoleculeExample(Scene):
def construct(self):
graph_molecule = GraphMolecule.molecule_from_file(filepath="morphine.mol")
self.add(graph_molecule)
بفرمایید!
همچنین میتوانید با تنظیم label=True هنگام ساخت GraphMolecule، برچسب هم اضافه کنید:
from manim import *
from manim_chemistry import *
class GraphMoleculeExample(Scene):
def construct(self):
graph_molecule = GraphMolecule.molecule_from_file(
mol_file="morphine.mol",
label=True
)
self.add(graph_molecule)
با استفاده از label=True و numeric_label=True مولکول را با اتمهای برچسبخورده بر اساس فایل mol میگیرید:
from manim import *
from manim_chemistry import *
class GraphMoleculeExample(Scene):
def construct(self):
graph_molecule = GraphMolecule.molecule_from_file(
mol_file="morphine.mol",
label=True,
numeric_label=True
)
self.add(graph_molecule)
انتخاب بخشی از مولکول و انیمیشنهای سفارشی در GraphMolecule:
قدرت گرافها واقعاً در GraphMolecule نمایان میشود. یکی از نمونههای این قدرت استفاده از networkx برای گرفتن بخشی از مولکول با مشخص کردن اتم شروع و پایان است. مثلاً میتوانیم بخشی از مولکول را رنگ کنیم:
class GraphMoleculeExample(Scene):
def construct(self):
molecule = GraphMolecule.molecule_from_file(asset, label=True, numeric_label=True)
atoms_and_bonds = molecule.get_connected_atoms_and_bonds(1, 3)
atoms_and_bonds.set_color(GREEN)
self.add(molecule)
همچنین میتوانید با GMAnimationBuilder انیمیشنهای سفارشی هم بسازید: rotate_atoms_about_bond و change_color:
ساخت مولکول سهبعدی:
ساخت یک مولکول سهبعدی کمی تلاش بیشتری میخواهد. به دو چیز نیاز داریم:
۱. یک فایل .mol (مثل قبل)
۲. یک فایل دادهی csv با دادهی اتمها. نمونهای از آن را داخل پوشهی examples با نام "Elementos.csv" پیدا میکنید.
فایل .mol پارس میشود و فایل csv برخی دادهها، مخصوصاً رنگ، را به manim-Chemistry میگوید. با استفاده از همان فایل قبلی میتوانیم یک ساختار سهبعدی برای مورفین بسازیم:
from manim import *
from manim_chemistry import *
class Draw3DMorphine(ThreeDScene):
def construct(self):
config.renderer = "opengl"
three_d_morphine = ThreeDMolecule.molecule_from_file("morphine.mol")
self.add(three_d_morphine)
self.wait()
برای اجرای این کد باید Manim را با رندرر opengl اجرا کنید:
manim .\examples.py Draw3DMorphine -ps --renderer=opengl
نتیجه این است!
ساخت جدول تناوبی:
مثل قبل، برای رسم همهچیز به یک فایل منبع نیاز داریم. باز هم میتوانید فایل خودتان را از روی یک کپی از "Elementos.csv" بسازید.
میتوانید قاب یک عنصر را اینطور بسازید:
from manim import *
from manim_chemistry import *
class DrawCarbonElement(Scene):
def construct(self):
carbon = MElementObject.from_csv_file_data(filename="Elementos.csv", atomic_number=6)
self.add(carbon)
و همینه!
برای ساخت کل جدول تناوبی، باید دادهی هر عنصر داخل آن فایل منبع باشد. فایل Elementos.csv از قبل این داده را دارد، پس فقط کافیست آن را کپی کرده و متناسب با نیازتان تغییر دهید. با رنگبندی cpk و کد زیر، آن جدول تناوبی زیبا را میگیریم:
from manim import *
from manim_chemistry import *
class DrawPeriodicTable(Scene):
def construct(self):
self.add(PeriodicTable(data_file="Elementos.csv"))
ساخت اوربیتالهای اتمی:
اوربیتالهای مولکولی برای یک اسکریپت پایتون ساده بسیار پیچیده و سنگین هستند، اما میتوانیم اوربیتالهای اتمی را با انتخاب سطح l و m بهسادگی بگیریم:
from manim import *
from manim_chemistry import *
class DrawPOrbital(Scene):
def construct(self):
orbital = Orbital(l=1, m=-1)
self.add(orbital)
اینجا هم باید از رندرر opengl استفاده کنید:
manim .\examples.py DrawPOrbital -ps --renderer=opengl
ساخت نمودار بور:
نمودارهای بور خیلی قدیمیاند، اما رسم آنها میتواند برای انتقال برخی ایدهها مفید باشد. اینجا فقط کافی است تعداد پروتون، الکترون و نوترون را مشخص کنید تا یک نمودار زیبا بگیرید:
from manim import *
from manim_chemistry import *
class DrawBohrDiagram(Scene):
def construct(self):
diagram = BohrAtom(e=14, p=14, n=10)
self.add(diagram)
نمودار زیبایتان را داشته باشید!
نمونهکارها:
داخل این ریپو یک پوشهی examples با فایلها و داراییهای پایه وجود دارد که ممکن است مفید باشند. حتماً آنها را ببینید!
ساختهشده با manim_chemistry
چند نمونه از کارهای ساختهشده با manim_chemistry را ببینید. خوشحال میشویم انیمیشنها و ویدیوهای خودتان را هم به این لیست اضافه کنید!
فولرین:
ساختارهای بتا و آلفای قلع:
ویدیوهایی با manimChemistry:
https://www.youtube.com/watch?v=L7OXe94_WmA
راه ارتباطی
این ریپو فورک فارسی manim-fa-chemistry است — برای مشکلات مربوط به فارسیسازی (برچسبها، فونت، یکپارچهسازی FaText)، لطفاً در
Tabesh2020/manim-fa-chemistry ایشو باز کنید.
برای پروژهی اصلی و upstream یعنی manim-Chemistry، میتوانید همانجا ایشو یا پولریکوئست باز کنید، یا مستقیم با نویسندهی اصلی تماس بگیرید:
- ایمیل: unmoldequimica@gmail.com
- یوتیوب: https://www.youtube.com/@unmoldequimica
- توییتر: https://twitter.com/unmoldequimica
مشارکتکنندگان بزرگ!
- @chemnerd28
- @Ant-28
- @davidmariscalf (David Mariscal Fernández)
تشکر ویژه از @Rodrigo-Tenorio برای کمکش در ساخت نسخهی قابلانتشار این پکیج.
Release files for manim-fa-chemistry 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| manim_fa_chemistry-0.1.0.tar.gz | 6.2 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| manim_fa_chemistry-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 6.2 MB
Release files / manim_fa_chemistry-0.1.0.tar.gz
| Download URL | manim_fa_chemistry-0.1.0.tar.gz |
|---|---|
| Size | 6.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5d88a64f6f2abfdd5c3e4905f33cc285eff274e6930beb92cb398b25eb393e3b
|
|
BLAKE2b-256 checksum How to use checksums |
18e871bc77fe8971ce74c28fffbde8a76448ff2cfdf0da2d13b734cb9ab2ccd9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / manim_fa_chemistry-0.1.0-py3-none-any.whl
| Download URL | manim_fa_chemistry-0.1.0-py3-none-any.whl |
|---|---|
| Size | 77.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bdebfea5c509d994b77aeb3caec28809f2d92b5054b4d5db8c5351c318d81998
|
|
BLAKE2b-256 checksum How to use checksums |
92e212d2e9f0a5d28f0b5532f2d49ee6a16aa782b3ddb1acdd1afc49f55e42c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|