geodynamic


Namegeodynamic JSON
Version 0.0.27 PyPI version JSON
download
home_pagehttps://gitlab.mathem.ru/
SummaryGeometric tools for parsing GeoGebra construction, proccess with manim animation and export to SVG
upload_time2024-08-14 14:13:38
maintainerNone
docs_urlNone
authorivaleo
requires_python>=3.9
licenseNone
keywords geometry dynamic geogebra manim animation svg python
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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"
}
        
Elapsed time: 2.42134s