# GeoDynamic
## Installation
```bash
pip install --upgrade geodynamic
```
## Using in terminal
```bash
geodynamic test.ggb -s pandora.json -px 240 auto
```
*Description:*
```
usage: geodynamic ggbfile [-o OUTPUT] [-px PX PX] [-s STYLE] [-d DEBUG]
positional arguments:
ggbfile GeoGebra file to parse
options:
-o OUTPUT, --output OUTPUT SVG file to export into
-px PX PX image width and height in px (values: num or auto)
-s STYLE, --style STYLE JSON file with style definitions
-d DEBUG, --debug DEBUG print options
-h, --help show this help message and exit
```
## Using in code
1. Preparing code `test.py`:
```python
from geodynamic.manim_dynamic import *
class TestScene(GeoDynamic):
def construct(self):
self.loadGeoGebra('test.ggb', style_json_file = 'pandora.json', px_size = [400, 'auto'])
self.exportSVG('test.svg')
```
2. Run compilation:
```bash
manim 'test.py' TestScene
```
## Style definitions in JSON
Here is an example of JSON-file for styling images:
```json
{
"name": "pandora",
"version": 0.1,
"style": {
"dot": {
"main": 7,
"bold": 9,
"aux": 5
},
"line": {
"main": 2,
"bold": 2.5,
"aux": 1.5
},
"angle": {
"line": 1,
"r_default": 20,
"r_shift": 3,
"r_right": 14
},
"strich": {
"width": 1,
"len": 12,
"shift": 4
},
"arrow": {
"width": 7.5,
"length": 10.5
},
"color": {
"black": "#000000",
"main": "#2581b5",
"light": "#bef3fc",
"aux": "#000000",
"acc": "#ef60ab",
"acc_light": "#ffd2ee"
},
"font": {
"size": 17
}
},
"technic": {
"line_caps": "round",
"right_angle_joint": "miter",
"polygon_boundary_layer": "top",
"points_display": "only_labels",
"crop_padding": 4,
"scale_export": 0.75
},
"ggb_export": {
"colors": {
"#1565c0": "main",
"#1565c0 0.1": "main 0",
"#d32f2f": "acc",
"#d32f2f 0.1": "acc_light 1",
"#616161": "aux",
"#000000 0.6": "main",
"#000000 0.1": "light 1",
"#1565c0 0": "white 1",
"#d32f2f 0": "white 1"
},
"dot": {
"5": "main"
},
"line": {
"5": "main",
"3": "aux"
}
}
}
```
*Description:*
**technic:**
*round* - закруглять концы всех отрезков
*butt* - обрезать концы всех отрезков
*square* - концы отрезков завершаются квадратами
```json
"line_caps": "round" | "butt" | "square",
```
*round* - скруглять соединение уголка в отображении отметки прямого угла
```json
"right_angle_joint": "round" | "bevel" | "miter"
```
*top* - отображать границу многоугольников поверх остальных линий (Важно! это касается именно дополнительных отрезков-сторон, создаваемых автоматически в GeoGebra)
```json
"polygon_boundary_layer": "top" | "auto"
```
*only_labels* - скрывать все точки (оставляя их надписи, если они есть)
*only_points* - скрывать надписи (оставляя точки, если они видимые)
```json
"points_display": "only_labels" | "only_points" | "auto"
```
обрезать картинку по содержимому, оставляя поле 4px
```json
"crop_padding": 4
```
вспомогательный коэффициент растяжения/сжатия всех параметров при экспорте в svg (должен влиять и на размеры и на толщины, стили…)
```json
"scale_export": 0.75, 1
```
**ggb_export:**
конвертирует конкретные цвета из GeoGebra в другие цвета c возможным параметром прозрачности (цвет либо конкретный, либо по имени из стилевика)
```json
"colors": {}
```
конвертирует определенную ширину линии из GeoGebra в другую заданную ширину (величина либо конкретная, либо по имени из стилевика)
```json
"line": {}
```
конвертирует определенный размер точек из GeoGebra в другой заданный размер (величина либо конкретная, либо по имени из стилевика)
```json
"dot": {}
```
Raw data
{
"_id": null,
"home_page": "https://gitlab.mathem.ru/",
"name": "geodynamic",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "geometry dynamic geogebra manim animation svg python",
"author": "ivaleo",
"author_email": "ivaleotion@gmail.com",
"download_url": null,
"platform": null,
"description": "# GeoDynamic\n\n## Installation\n\n```bash\npip install --upgrade geodynamic\n```\n\n## Using in terminal\n\n```bash\ngeodynamic test.ggb -s pandora.json -px 240 auto\n```\n\n*Description:*\n\n```\nusage: geodynamic ggbfile [-o OUTPUT] [-px PX PX] [-s STYLE] [-d DEBUG]\n\npositional arguments:\n ggbfile GeoGebra file to parse\n\noptions:\n -o OUTPUT, --output OUTPUT SVG file to export into\n -px PX PX image width and height in px (values: num or auto)\n -s STYLE, --style STYLE JSON file with style definitions \n -d DEBUG, --debug DEBUG print options\n\n -h, --help show this help message and exit\n```\n\n## Using in code\n\n1. Preparing code `test.py`:\n\n```python\nfrom geodynamic.manim_dynamic import *\n\nclass TestScene(GeoDynamic):\n def construct(self): \n self.loadGeoGebra('test.ggb', style_json_file = 'pandora.json', px_size = [400, 'auto']) \n self.exportSVG('test.svg')\n```\n\n2. Run compilation:\n\n```bash\nmanim 'test.py' TestScene\n```\n\n\n## Style definitions in JSON\n\nHere is an example of JSON-file for styling images:\n\n```json\n{\n \"name\": \"pandora\",\n \"version\": 0.1,\n \"style\": {\n \"dot\": {\n \"main\": 7,\n \"bold\": 9,\n \"aux\": 5\n },\n \"line\": {\n \"main\": 2,\n \"bold\": 2.5,\n \"aux\": 1.5\n },\n \"angle\": {\n \"line\": 1,\n \"r_default\": 20,\n \"r_shift\": 3,\n \"r_right\": 14\n },\n \"strich\": {\n \"width\": 1,\n \"len\": 12,\n \"shift\": 4\n },\n \"arrow\": {\n \"width\": 7.5,\n \"length\": 10.5\n },\n \"color\": {\n \"black\": \"#000000\",\n \"main\": \"#2581b5\",\n \"light\": \"#bef3fc\",\n \"aux\": \"#000000\",\n \"acc\": \"#ef60ab\",\n \"acc_light\": \"#ffd2ee\"\n },\n \"font\": {\n \"size\": 17\n }\n },\n \"technic\": {\n \"line_caps\": \"round\",\n \"right_angle_joint\": \"miter\",\n \"polygon_boundary_layer\": \"top\",\n \"points_display\": \"only_labels\",\n \"crop_padding\": 4,\n \"scale_export\": 0.75\n },\n \"ggb_export\": {\n \"colors\": {\n \"#1565c0\": \"main\",\n \"#1565c0 0.1\": \"main 0\",\n \"#d32f2f\": \"acc\",\n \"#d32f2f 0.1\": \"acc_light 1\",\n \"#616161\": \"aux\",\n \"#000000 0.6\": \"main\",\n \"#000000 0.1\": \"light 1\",\n \"#1565c0 0\": \"white 1\",\n \"#d32f2f 0\": \"white 1\"\n },\n \"dot\": {\n \"5\": \"main\"\n },\n \"line\": {\n \"5\": \"main\",\n \"3\": \"aux\"\n }\n }\n}\n\n```\n\n\n*Description:*\n\n**technic:**\n\n*round* - \u0437\u0430\u043a\u0440\u0443\u0433\u043b\u044f\u0442\u044c \u043a\u043e\u043d\u0446\u044b \u0432\u0441\u0435\u0445 \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432\n*butt* - \u043e\u0431\u0440\u0435\u0437\u0430\u0442\u044c \u043a\u043e\u043d\u0446\u044b \u0432\u0441\u0435\u0445 \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432\n*square* - \u043a\u043e\u043d\u0446\u044b \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0442\u0441\u044f \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430\u043c\u0438\n```json\n \"line_caps\": \"round\" | \"butt\" | \"square\", \n```\n\n*round* - \u0441\u043a\u0440\u0443\u0433\u043b\u044f\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u0433\u043e\u043b\u043a\u0430 \u0432 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043e\u0442\u043c\u0435\u0442\u043a\u0438 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0443\u0433\u043b\u0430\n```json\n \"right_angle_joint\": \"round\" | \"bevel\" | \"miter\" \n```\n\n*top* - \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043f\u043e\u0432\u0435\u0440\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 (\u0412\u0430\u0436\u043d\u043e! \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432-\u0441\u0442\u043e\u0440\u043e\u043d, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 GeoGebra)\n```json\n \"polygon_boundary_layer\": \"top\" | \"auto\"\n```\n\n*only_labels* - \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438 (\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0438\u0445 \u043d\u0430\u0434\u043f\u0438\u0441\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c)\n*only_points* - \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0434\u043f\u0438\u0441\u0438 (\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0442\u043e\u0447\u043a\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0432\u0438\u0434\u0438\u043c\u044b\u0435)\n```json\n \"points_display\": \"only_labels\" | \"only_points\" | \"auto\"\n```\n\n\u043e\u0431\u0440\u0435\u0437\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u043f\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043f\u043e\u043b\u0435 4px\n```json\n \"crop_padding\": 4 \n```\n\n\u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0440\u0430\u0441\u0442\u044f\u0436\u0435\u043d\u0438\u044f/\u0441\u0436\u0430\u0442\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435 \u0432 svg (\u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043b\u0438\u044f\u0442\u044c \u0438 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438 \u043d\u0430 \u0442\u043e\u043b\u0449\u0438\u043d\u044b, \u0441\u0442\u0438\u043b\u0438\u2026)\n```json\n \"scale_export\": 0.75, 1 \n```\n\n**ggb_export:**\n\n\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u0438\u0437 GeoGebra \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 (\u0446\u0432\u0435\u0442 \u043b\u0438\u0431\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439, \u043b\u0438\u0431\u043e \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0438\u0437 \u0441\u0442\u0438\u043b\u0435\u0432\u0438\u043a\u0430)\n```json\n \"colors\": {}\n```\n\n\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0448\u0438\u0440\u0438\u043d\u0443 \u043b\u0438\u043d\u0438\u0438 \u0438\u0437 GeoGebra \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0437\u0430\u0434\u0430\u043d\u043d\u0443\u044e \u0448\u0438\u0440\u0438\u043d\u0443 (\u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u043b\u0438\u0431\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f, \u043b\u0438\u0431\u043e \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0438\u0437 \u0441\u0442\u0438\u043b\u0435\u0432\u0438\u043a\u0430)\n```json\n \"line\": {}\n```\n\n\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0447\u0435\u043a \u0438\u0437 GeoGebra \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 (\u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u043b\u0438\u0431\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f, \u043b\u0438\u0431\u043e \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0438\u0437 \u0441\u0442\u0438\u043b\u0435\u0432\u0438\u043a\u0430)\n```json\n \"dot\": {}\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "Geometric tools for parsing GeoGebra construction, proccess with manim animation and export to SVG",
"version": "0.0.27",
"project_urls": {
"Homepage": "https://gitlab.mathem.ru/"
},
"split_keywords": [
"geometry",
"dynamic",
"geogebra",
"manim",
"animation",
"svg",
"python"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "6bbc952676729bc00210f4e3a2c85b618110f487125b4ed4ca49d2ed8a3bb165",
"md5": "b9ff6c887800f82189ce665321370f8d",
"sha256": "6ed3bd75dc9b21d10e8a014d5b38e506cdaddf4b1de4b5369ba75a2c03280adc"
},
"downloads": -1,
"filename": "geodynamic-0.0.27-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b9ff6c887800f82189ce665321370f8d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 33644,
"upload_time": "2024-08-14T14:13:38",
"upload_time_iso_8601": "2024-08-14T14:13:38.117769Z",
"url": "https://files.pythonhosted.org/packages/6b/bc/952676729bc00210f4e3a2c85b618110f487125b4ed4ca49d2ed8a3bb165/geodynamic-0.0.27-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-14 14:13:38",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "geodynamic"
}