├── .gitignore ├── LICENSE ├── README.md ├── demo ├── airplane.png ├── bathtub.png ├── bottles.png ├── car.png ├── guitar.png ├── knife.png └── mug.png ├── learningpatches ├── __init__.py ├── coons_utils.py ├── datasets.py ├── interfaces.py ├── models.py └── utils.py ├── requirements.txt ├── scripts ├── run.py └── train.py └── templates ├── airplanes ├── adjacencies.txt ├── edges.txt ├── junction_order.txt ├── topology.txt └── vertices.txt ├── bathtubs ├── adjacencies.txt ├── edges.txt ├── junction_order.txt ├── topology.txt └── vertices.txt ├── bottles ├── adjacencies.txt ├── edges.txt ├── junction_order.txt ├── topology.txt └── vertices.txt ├── cars ├── adjacencies.txt ├── edges.txt ├── junction_order.txt ├── topology.txt └── vertices.txt ├── guitars ├── adjacencies.txt ├── edges.txt ├── junction_order.txt ├── topology.txt └── vertices.txt ├── guns ├── adjacencies.txt ├── edges.txt ├── junction_order.txt ├── topology.txt └── vertices.txt ├── knives ├── adjacencies.txt ├── edges.txt ├── junction_order.txt ├── topology.txt └── vertices.txt ├── mugs ├── adjacencies.txt ├── edges.txt ├── junction_order.txt ├── topology.txt └── vertices.txt ├── sphere24 ├── adjacencies.txt ├── edges.txt ├── junction_order.txt ├── topology.txt └── vertices.txt └── sphere54 ├── adjacencies.txt ├── edges.txt ├── junction_order.txt ├── topology.txt └── vertices.txt /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | 131 | models 132 | *obj 133 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Dima Smirnov 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## LearningPatches | [Webpage](https://people.csail.mit.edu/smirnov/learning-patches/) | [Paper](https://openreview.net/forum?id=Gu5WqN9J3Fn) | [Video](https://youtu.be/mxpkK9hHfFE) 2 | 3 | Learning Manifold Patch-Based Representations of Man-Made Shapes 4 | 5 | **Learning Manifold Patch-Based Representations of Man-Made Shapes**
6 | Dmitriy Smirnov, Mikhail Bessmeltsev, Justin Solomon
7 | [International Conference on Learning Representations (ICLR) 2021](https://iclr.cc/Conferences/2021/) 8 | 9 | ### Set-up 10 | To install the code, run: 11 | ``` 12 | conda create -n learningpatches python=3.6 -y 13 | conda activate learningpatches 14 | conda install pytorch=1.3.1 torchvision cudatoolkit=10.2 -c pytorch -y 15 | pip install -r requirements.txt 16 | ``` 17 | 18 | Also, be sure to execute `export PYTHONPATH=:$PYTHONPATH` prior to running any of the scripts. 19 | 20 | ### Demo 21 | First, download the pretrained models for each shape category: 22 | ``` 23 | wget -O models.zip https://www.dropbox.com/s/ntt1ytpjwx2385i/learningpatches_models.zip?dl=0 24 | unzip models.zip 25 | ``` 26 | 27 | Then, run the following to generate an OBJ file with the 3D model for a given input sketch PNG image: 28 | ``` 29 | python scripts/run.py demo/airplane.png airplanes out.obj --no-turbines 30 | ``` 31 | Make sure to specify `airplanes`, `bathtubs`, `bottles`, `cars`, `guitars`, 32 | `guns`, `knives`, or `guns` as the shape category. Optionally, for the airplanes 33 | category, the `--no-turbines` flag does not output the turbine patches in the 34 | 3D model. 35 | 36 | The `demo` directory contains PNGs of some sample input sketches. 37 | 38 | Note that the meshes output by the demo script may have non-manifold discontinuities between patches due to 39 | discretization artifacts. This can be avoided by choosing the number of subdivisions based on patch boundary 40 | arc lengths. The results shown in the paper are all computed in this way. 41 | 42 | ### BibTeX 43 | ``` 44 | @inproceedings{smirnov2021patches, 45 | title={Learning Manifold Patch-Based Representations of Man-Made Shapes}, 46 | author={Smirnov, Dmitriy and Bessmeltsev, Mikhail and Solomon, Justin}, 47 | year={2021}, 48 | booktitle={International Conference on Learning Representations (ICLR)} 49 | } 50 | ``` 51 | -------------------------------------------------------------------------------- /demo/airplane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dmsm/LearningPatches/12384b3e1e93cdbbdbb5a63fec8b4f7631eafe50/demo/airplane.png -------------------------------------------------------------------------------- /demo/bathtub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dmsm/LearningPatches/12384b3e1e93cdbbdbb5a63fec8b4f7631eafe50/demo/bathtub.png -------------------------------------------------------------------------------- /demo/bottles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dmsm/LearningPatches/12384b3e1e93cdbbdbb5a63fec8b4f7631eafe50/demo/bottles.png -------------------------------------------------------------------------------- /demo/car.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dmsm/LearningPatches/12384b3e1e93cdbbdbb5a63fec8b4f7631eafe50/demo/car.png -------------------------------------------------------------------------------- /demo/guitar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dmsm/LearningPatches/12384b3e1e93cdbbdbb5a63fec8b4f7631eafe50/demo/guitar.png -------------------------------------------------------------------------------- /demo/knife.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dmsm/LearningPatches/12384b3e1e93cdbbdbb5a63fec8b4f7631eafe50/demo/knife.png -------------------------------------------------------------------------------- /demo/mug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dmsm/LearningPatches/12384b3e1e93cdbbdbb5a63fec8b4f7631eafe50/demo/mug.png -------------------------------------------------------------------------------- /learningpatches/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dmsm/LearningPatches/12384b3e1e93cdbbdbb5a63fec8b4f7631eafe50/learningpatches/__init__.py -------------------------------------------------------------------------------- /learningpatches/coons_utils.py: -------------------------------------------------------------------------------- 1 | import torch as th 2 | from torch.nn import functional as F 3 | 4 | 5 | def coons_mtds(s, t, params): 6 | # params [..., 12, 3] 7 | params = params[...,None] 8 | det = ((params[...,0,0,:]*(s - 1)**3 - params[...,9,0,:]*(s - 1)**3 - s*(3*params[...,3,0,:]*(t - 1)**2 - 3*params[...,4,0,:]*(t - 1)**2 + 3*params[...,5,0,:]*t**2 - 3*params[...,6,0,:]*t**2 + 6*params[...,5,0,:]*t*(t - 1) - 3*params[...,4,0,:]*t*(2*t - 2)) + params[...,3,0,:]*s - params[...,6,0,:]*s + (s - 1)*(3*params[...,0,0,:]*(t - 1)**2 - 3*params[...,11,0,:]*(t - 1)**2 - 3*params[...,9,0,:]*t**2 + 3*params[...,10,0,:]*t**2 + 6*params[...,10,0,:]*t*(t - 1) - 3*params[...,11,0,:]*t*(2*t - 2)) - params[...,0,0,:]*(s - 1) + params[...,9,0,:]*(s - 1) - params[...,3,0,:]*s**3 + params[...,6,0,:]*s**3 - 3*params[...,1,0,:]*s*(s - 1)**2 + 3*params[...,2,0,:]*s**2*(s - 1) - 3*params[...,7,0,:]*s**2*(s - 1) + 3*params[...,8,0,:]*s*(s - 1)**2)**2 + (params[...,0,1,:]*(s - 1)**3 - params[...,9,1,:]*(s - 1)**3 - s*(3*params[...,3,1,:]*(t - 1)**2 - 3*params[...,4,1,:]*(t - 1)**2 + 3*params[...,5,1,:]*t**2 - 3*params[...,6,1,:]*t**2 + 6*params[...,5,1,:]*t*(t - 1) - 3*params[...,4,1,:]*t*(2*t - 2)) + params[...,3,1,:]*s - params[...,6,1,:]*s + (s - 1)*(3*params[...,0,1,:]*(t - 1)**2 - 3*params[...,11,1,:]*(t - 1)**2 - 3*params[...,9,1,:]*t**2 + 3*params[...,10,1,:]*t**2 + 6*params[...,10,1,:]*t*(t - 1) - 3*params[...,11,1,:]*t*(2*t - 2)) - params[...,0,1,:]*(s - 1) + params[...,9,1,:]*(s - 1) - params[...,3,1,:]*s**3 + params[...,6,1,:]*s**3 - 3*params[...,1,1,:]*s*(s - 1)**2 + 3*params[...,2,1,:]*s**2*(s - 1) - 3*params[...,7,1,:]*s**2*(s - 1) + 3*params[...,8,1,:]*s*(s - 1)**2)**2 + (params[...,0,2,:]*(s - 1)**3 - params[...,9,2,:]*(s - 1)**3 - s*(3*params[...,3,2,:]*(t - 1)**2 - 3*params[...,4,2,:]*(t - 1)**2 + 3*params[...,5,2,:]*t**2 - 3*params[...,6,2,:]*t**2 + 6*params[...,5,2,:]*t*(t - 1) - 3*params[...,4,2,:]*t*(2*t - 2)) + params[...,3,2,:]*s - params[...,6,2,:]*s + (s - 1)*(3*params[...,0,2,:]*(t - 1)**2 - 3*params[...,11,2,:]*(t - 1)**2 - 3*params[...,9,2,:]*t**2 + 3*params[...,10,2,:]*t**2 + 6*params[...,10,2,:]*t*(t - 1) - 3*params[...,11,2,:]*t*(2*t - 2)) - params[...,0,2,:]*(s - 1) + params[...,9,2,:]*(s - 1) - params[...,3,2,:]*s**3 + params[...,6,2,:]*s**3 - 3*params[...,1,2,:]*s*(s - 1)**2 + 3*params[...,2,2,:]*s**2*(s - 1) - 3*params[...,7,2,:]*s**2*(s - 1) + 3*params[...,8,2,:]*s*(s - 1)**2)**2)*((params[...,0,0,:]*(t - 1)**3 - params[...,3,0,:]*(t - 1)**3 + t*(3*params[...,8,0,:]*(s - 1)**2 - 3*params[...,9,0,:]*(s - 1)**2 + 3*params[...,6,0,:]*s**2 - 3*params[...,7,0,:]*s**2 - 6*params[...,7,0,:]*s*(s - 1) + 3*params[...,8,0,:]*s*(2*s - 2)) - params[...,6,0,:]*t + params[...,9,0,:]*t + (t - 1)*(3*params[...,0,0,:]*(s - 1)**2 - 3*params[...,1,0,:]*(s - 1)**2 + 3*params[...,2,0,:]*s**2 - 3*params[...,3,0,:]*s**2 + 6*params[...,2,0,:]*s*(s - 1) - 3*params[...,1,0,:]*s*(2*s - 2)) - params[...,0,0,:]*(t - 1) + params[...,3,0,:]*(t - 1) + params[...,6,0,:]*t**3 - params[...,9,0,:]*t**3 + 3*params[...,4,0,:]*t*(t - 1)**2 - 3*params[...,5,0,:]*t**2*(t - 1) + 3*params[...,10,0,:]*t**2*(t - 1) - 3*params[...,11,0,:]*t*(t - 1)**2)**2 + (params[...,0,1,:]*(t - 1)**3 - params[...,3,1,:]*(t - 1)**3 + t*(3*params[...,8,1,:]*(s - 1)**2 - 3*params[...,9,1,:]*(s - 1)**2 + 3*params[...,6,1,:]*s**2 - 3*params[...,7,1,:]*s**2 - 6*params[...,7,1,:]*s*(s - 1) + 3*params[...,8,1,:]*s*(2*s - 2)) - params[...,6,1,:]*t + params[...,9,1,:]*t + (t - 1)*(3*params[...,0,1,:]*(s - 1)**2 - 3*params[...,1,1,:]*(s - 1)**2 + 3*params[...,2,1,:]*s**2 - 3*params[...,3,1,:]*s**2 + 6*params[...,2,1,:]*s*(s - 1) - 3*params[...,1,1,:]*s*(2*s - 2)) - params[...,0,1,:]*(t - 1) + params[...,3,1,:]*(t - 1) + params[...,6,1,:]*t**3 - params[...,9,1,:]*t**3 + 3*params[...,4,1,:]*t*(t - 1)**2 - 3*params[...,5,1,:]*t**2*(t - 1) + 3*params[...,10,1,:]*t**2*(t - 1) - 3*params[...,11,1,:]*t*(t - 1)**2)**2 + (params[...,0,2,:]*(t - 1)**3 - params[...,3,2,:]*(t - 1)**3 + t*(3*params[...,8,2,:]*(s - 1)**2 - 3*params[...,9,2,:]*(s - 1)**2 + 3*params[...,6,2,:]*s**2 - 3*params[...,7,2,:]*s**2 - 6*params[...,7,2,:]*s*(s - 1) + 3*params[...,8,2,:]*s*(2*s - 2)) - params[...,6,2,:]*t + params[...,9,2,:]*t + (t - 1)*(3*params[...,0,2,:]*(s - 1)**2 - 3*params[...,1,2,:]*(s - 1)**2 + 3*params[...,2,2,:]*s**2 - 3*params[...,3,2,:]*s**2 + 6*params[...,2,2,:]*s*(s - 1) - 3*params[...,1,2,:]*s*(2*s - 2)) - params[...,0,2,:]*(t - 1) + params[...,3,2,:]*(t - 1) + params[...,6,2,:]*t**3 - params[...,9,2,:]*t**3 + 3*params[...,4,2,:]*t*(t - 1)**2 - 3*params[...,5,2,:]*t**2*(t - 1) + 3*params[...,10,2,:]*t**2*(t - 1) - 3*params[...,11,2,:]*t*(t - 1)**2)**2) - ((params[...,0,0,:]*(s - 1)**3 - params[...,9,0,:]*(s - 1)**3 - s*(3*params[...,3,0,:]*(t - 1)**2 - 3*params[...,4,0,:]*(t - 1)**2 + 3*params[...,5,0,:]*t**2 - 3*params[...,6,0,:]*t**2 + 6*params[...,5,0,:]*t*(t - 1) - 3*params[...,4,0,:]*t*(2*t - 2)) + params[...,3,0,:]*s - params[...,6,0,:]*s + (s - 1)*(3*params[...,0,0,:]*(t - 1)**2 - 3*params[...,11,0,:]*(t - 1)**2 - 3*params[...,9,0,:]*t**2 + 3*params[...,10,0,:]*t**2 + 6*params[...,10,0,:]*t*(t - 1) - 3*params[...,11,0,:]*t*(2*t - 2)) - params[...,0,0,:]*(s - 1) + params[...,9,0,:]*(s - 1) - params[...,3,0,:]*s**3 + params[...,6,0,:]*s**3 - 3*params[...,1,0,:]*s*(s - 1)**2 + 3*params[...,2,0,:]*s**2*(s - 1) - 3*params[...,7,0,:]*s**2*(s - 1) + 3*params[...,8,0,:]*s*(s - 1)**2)*(params[...,0,0,:]*(t - 1)**3 - params[...,3,0,:]*(t - 1)**3 + t*(3*params[...,8,0,:]*(s - 1)**2 - 3*params[...,9,0,:]*(s - 1)**2 + 3*params[...,6,0,:]*s**2 - 3*params[...,7,0,:]*s**2 - 6*params[...,7,0,:]*s*(s - 1) + 3*params[...,8,0,:]*s*(2*s - 2)) - params[...,6,0,:]*t + params[...,9,0,:]*t + (t - 1)*(3*params[...,0,0,:]*(s - 1)**2 - 3*params[...,1,0,:]*(s - 1)**2 + 3*params[...,2,0,:]*s**2 - 3*params[...,3,0,:]*s**2 + 6*params[...,2,0,:]*s*(s - 1) - 3*params[...,1,0,:]*s*(2*s - 2)) - params[...,0,0,:]*(t - 1) + params[...,3,0,:]*(t - 1) + params[...,6,0,:]*t**3 - params[...,9,0,:]*t**3 + 3*params[...,4,0,:]*t*(t - 1)**2 - 3*params[...,5,0,:]*t**2*(t - 1) + 3*params[...,10,0,:]*t**2*(t - 1) - 3*params[...,11,0,:]*t*(t - 1)**2) + (params[...,0,1,:]*(s - 1)**3 - params[...,9,1,:]*(s - 1)**3 - s*(3*params[...,3,1,:]*(t - 1)**2 - 3*params[...,4,1,:]*(t - 1)**2 + 3*params[...,5,1,:]*t**2 - 3*params[...,6,1,:]*t**2 + 6*params[...,5,1,:]*t*(t - 1) - 3*params[...,4,1,:]*t*(2*t - 2)) + params[...,3,1,:]*s - params[...,6,1,:]*s + (s - 1)*(3*params[...,0,1,:]*(t - 1)**2 - 3*params[...,11,1,:]*(t - 1)**2 - 3*params[...,9,1,:]*t**2 + 3*params[...,10,1,:]*t**2 + 6*params[...,10,1,:]*t*(t - 1) - 3*params[...,11,1,:]*t*(2*t - 2)) - params[...,0,1,:]*(s - 1) + params[...,9,1,:]*(s - 1) - params[...,3,1,:]*s**3 + params[...,6,1,:]*s**3 - 3*params[...,1,1,:]*s*(s - 1)**2 + 3*params[...,2,1,:]*s**2*(s - 1) - 3*params[...,7,1,:]*s**2*(s - 1) + 3*params[...,8,1,:]*s*(s - 1)**2)*(params[...,0,1,:]*(t - 1)**3 - params[...,3,1,:]*(t - 1)**3 + t*(3*params[...,8,1,:]*(s - 1)**2 - 3*params[...,9,1,:]*(s - 1)**2 + 3*params[...,6,1,:]*s**2 - 3*params[...,7,1,:]*s**2 - 6*params[...,7,1,:]*s*(s - 1) + 3*params[...,8,1,:]*s*(2*s - 2)) - params[...,6,1,:]*t + params[...,9,1,:]*t + (t - 1)*(3*params[...,0,1,:]*(s - 1)**2 - 3*params[...,1,1,:]*(s - 1)**2 + 3*params[...,2,1,:]*s**2 - 3*params[...,3,1,:]*s**2 + 6*params[...,2,1,:]*s*(s - 1) - 3*params[...,1,1,:]*s*(2*s - 2)) - params[...,0,1,:]*(t - 1) + params[...,3,1,:]*(t - 1) + params[...,6,1,:]*t**3 - params[...,9,1,:]*t**3 + 3*params[...,4,1,:]*t*(t - 1)**2 - 3*params[...,5,1,:]*t**2*(t - 1) + 3*params[...,10,1,:]*t**2*(t - 1) - 3*params[...,11,1,:]*t*(t - 1)**2) + (params[...,0,2,:]*(s - 1)**3 - params[...,9,2,:]*(s - 1)**3 - s*(3*params[...,3,2,:]*(t - 1)**2 - 3*params[...,4,2,:]*(t - 1)**2 + 3*params[...,5,2,:]*t**2 - 3*params[...,6,2,:]*t**2 + 6*params[...,5,2,:]*t*(t - 1) - 3*params[...,4,2,:]*t*(2*t - 2)) + params[...,3,2,:]*s - params[...,6,2,:]*s + (s - 1)*(3*params[...,0,2,:]*(t - 1)**2 - 3*params[...,11,2,:]*(t - 1)**2 - 3*params[...,9,2,:]*t**2 + 3*params[...,10,2,:]*t**2 + 6*params[...,10,2,:]*t*(t - 1) - 3*params[...,11,2,:]*t*(2*t - 2)) - params[...,0,2,:]*(s - 1) + params[...,9,2,:]*(s - 1) - params[...,3,2,:]*s**3 + params[...,6,2,:]*s**3 - 3*params[...,1,2,:]*s*(s - 1)**2 + 3*params[...,2,2,:]*s**2*(s - 1) - 3*params[...,7,2,:]*s**2*(s - 1) + 3*params[...,8,2,:]*s*(s - 1)**2)*(params[...,0,2,:]*(t - 1)**3 - params[...,3,2,:]*(t - 1)**3 + t*(3*params[...,8,2,:]*(s - 1)**2 - 3*params[...,9,2,:]*(s - 1)**2 + 3*params[...,6,2,:]*s**2 - 3*params[...,7,2,:]*s**2 - 6*params[...,7,2,:]*s*(s - 1) + 3*params[...,8,2,:]*s*(2*s - 2)) - params[...,6,2,:]*t + params[...,9,2,:]*t + (t - 1)*(3*params[...,0,2,:]*(s - 1)**2 - 3*params[...,1,2,:]*(s - 1)**2 + 3*params[...,2,2,:]*s**2 - 3*params[...,3,2,:]*s**2 + 6*params[...,2,2,:]*s*(s - 1) - 3*params[...,1,2,:]*s*(2*s - 2)) - params[...,0,2,:]*(t - 1) + params[...,3,2,:]*(t - 1) + params[...,6,2,:]*t**3 - params[...,9,2,:]*t**3 + 3*params[...,4,2,:]*t*(t - 1)**2 - 3*params[...,5,2,:]*t**2*(t - 1) + 3*params[...,10,2,:]*t**2*(t - 1) - 3*params[...,11,2,:]*t*(t - 1)**2))**2 9 | det = det.clamp_min_(1e-10).sqrt_() 10 | return det 11 | 12 | def coons_normals(s, t, params): 13 | params = params[...,None] 14 | normals = th.stack([(params[...,0,2,:]*(s - 1)**3 - params[...,9,2,:]*(s - 1)**3 - s*(3*params[...,3,2,:]*(t - 1)**2 - 3*params[...,4,2,:]*(t - 1)**2 + 3*params[...,5,2,:]*t**2 - 3*params[...,6,2,:]*t**2 + 6*params[...,5,2,:]*t*(t - 1) - 3*params[...,4,2,:]*t*(2*t - 2)) + params[...,3,2,:]*s - params[...,6,2,:]*s + (s - 1)*(3*params[...,0,2,:]*(t - 1)**2 - 3*params[...,11,2,:]*(t - 1)**2 - 3*params[...,9,2,:]*t**2 + 3*params[...,10,2,:]*t**2 + 6*params[...,10,2,:]*t*(t - 1) - 3*params[...,11,2,:]*t*(2*t - 2)) - params[...,0,2,:]*(s - 1) + params[...,9,2,:]*(s - 1) - params[...,3,2,:]*s**3 + params[...,6,2,:]*s**3 - 3*params[...,1,2,:]*s*(s - 1)**2 + 3*params[...,2,2,:]*s**2*(s - 1) - 3*params[...,7,2,:]*s**2*(s - 1) + 3*params[...,8,2,:]*s*(s - 1)**2)*(params[...,0,1,:]*(t - 1)**3 - params[...,3,1,:]*(t - 1)**3 + t*(3*params[...,8,1,:]*(s - 1)**2 - 3*params[...,9,1,:]*(s - 1)**2 + 3*params[...,6,1,:]*s**2 - 3*params[...,7,1,:]*s**2 - 6*params[...,7,1,:]*s*(s - 1) + 3*params[...,8,1,:]*s*(2*s - 2)) - params[...,6,1,:]*t + params[...,9,1,:]*t + (t - 1)*(3*params[...,0,1,:]*(s - 1)**2 - 3*params[...,1,1,:]*(s - 1)**2 + 3*params[...,2,1,:]*s**2 - 3*params[...,3,1,:]*s**2 + 6*params[...,2,1,:]*s*(s - 1) - 3*params[...,1,1,:]*s*(2*s - 2)) - params[...,0,1,:]*(t - 1) + params[...,3,1,:]*(t - 1) + params[...,6,1,:]*t**3 - params[...,9,1,:]*t**3 + 3*params[...,4,1,:]*t*(t - 1)**2 - 3*params[...,5,1,:]*t**2*(t - 1) + 3*params[...,10,1,:]*t**2*(t - 1) - 3*params[...,11,1,:]*t*(t - 1)**2) - (params[...,0,1,:]*(s - 1)**3 - params[...,9,1,:]*(s - 1)**3 - s*(3*params[...,3,1,:]*(t - 1)**2 - 3*params[...,4,1,:]*(t - 1)**2 + 3*params[...,5,1,:]*t**2 - 3*params[...,6,1,:]*t**2 + 6*params[...,5,1,:]*t*(t - 1) - 3*params[...,4,1,:]*t*(2*t - 2)) + params[...,3,1,:]*s - params[...,6,1,:]*s + (s - 1)*(3*params[...,0,1,:]*(t - 1)**2 - 3*params[...,11,1,:]*(t - 1)**2 - 3*params[...,9,1,:]*t**2 + 3*params[...,10,1,:]*t**2 + 6*params[...,10,1,:]*t*(t - 1) - 3*params[...,11,1,:]*t*(2*t - 2)) - params[...,0,1,:]*(s - 1) + params[...,9,1,:]*(s - 1) - params[...,3,1,:]*s**3 + params[...,6,1,:]*s**3 - 3*params[...,1,1,:]*s*(s - 1)**2 + 3*params[...,2,1,:]*s**2*(s - 1) - 3*params[...,7,1,:]*s**2*(s - 1) + 3*params[...,8,1,:]*s*(s - 1)**2)*(params[...,0,2,:]*(t - 1)**3 - params[...,3,2,:]*(t - 1)**3 + t*(3*params[...,8,2,:]*(s - 1)**2 - 3*params[...,9,2,:]*(s - 1)**2 + 3*params[...,6,2,:]*s**2 - 3*params[...,7,2,:]*s**2 - 6*params[...,7,2,:]*s*(s - 1) + 3*params[...,8,2,:]*s*(2*s - 2)) - params[...,6,2,:]*t + params[...,9,2,:]*t + (t - 1)*(3*params[...,0,2,:]*(s - 1)**2 - 3*params[...,1,2,:]*(s - 1)**2 + 3*params[...,2,2,:]*s**2 - 3*params[...,3,2,:]*s**2 + 6*params[...,2,2,:]*s*(s - 1) - 3*params[...,1,2,:]*s*(2*s - 2)) - params[...,0,2,:]*(t - 1) + params[...,3,2,:]*(t - 1) + params[...,6,2,:]*t**3 - params[...,9,2,:]*t**3 + 3*params[...,4,2,:]*t*(t - 1)**2 - 3*params[...,5,2,:]*t**2*(t - 1) + 3*params[...,10,2,:]*t**2*(t - 1) - 3*params[...,11,2,:]*t*(t - 1)**2), (params[...,0,0,:]*(s - 1)**3 - params[...,9,0,:]*(s - 1)**3 - s*(3*params[...,3,0,:]*(t - 1)**2 - 3*params[...,4,0,:]*(t - 1)**2 + 3*params[...,5,0,:]*t**2 - 3*params[...,6,0,:]*t**2 + 6*params[...,5,0,:]*t*(t - 1) - 3*params[...,4,0,:]*t*(2*t - 2)) + params[...,3,0,:]*s - params[...,6,0,:]*s + (s - 1)*(3*params[...,0,0,:]*(t - 1)**2 - 3*params[...,11,0,:]*(t - 1)**2 - 3*params[...,9,0,:]*t**2 + 3*params[...,10,0,:]*t**2 + 6*params[...,10,0,:]*t*(t - 1) - 3*params[...,11,0,:]*t*(2*t - 2)) - params[...,0,0,:]*(s - 1) + params[...,9,0,:]*(s - 1) - params[...,3,0,:]*s**3 + params[...,6,0,:]*s**3 - 3*params[...,1,0,:]*s*(s - 1)**2 + 3*params[...,2,0,:]*s**2*(s - 1) - 3*params[...,7,0,:]*s**2*(s - 1) + 3*params[...,8,0,:]*s*(s - 1)**2)*(params[...,0,2,:]*(t - 1)**3 - params[...,3,2,:]*(t - 1)**3 + t*(3*params[...,8,2,:]*(s - 1)**2 - 3*params[...,9,2,:]*(s - 1)**2 + 3*params[...,6,2,:]*s**2 - 3*params[...,7,2,:]*s**2 - 6*params[...,7,2,:]*s*(s - 1) + 3*params[...,8,2,:]*s*(2*s - 2)) - params[...,6,2,:]*t + params[...,9,2,:]*t + (t - 1)*(3*params[...,0,2,:]*(s - 1)**2 - 3*params[...,1,2,:]*(s - 1)**2 + 3*params[...,2,2,:]*s**2 - 3*params[...,3,2,:]*s**2 + 6*params[...,2,2,:]*s*(s - 1) - 3*params[...,1,2,:]*s*(2*s - 2)) - params[...,0,2,:]*(t - 1) + params[...,3,2,:]*(t - 1) + params[...,6,2,:]*t**3 - params[...,9,2,:]*t**3 + 3*params[...,4,2,:]*t*(t - 1)**2 - 3*params[...,5,2,:]*t**2*(t - 1) + 3*params[...,10,2,:]*t**2*(t - 1) - 3*params[...,11,2,:]*t*(t - 1)**2) - (params[...,0,2,:]*(s - 1)**3 - params[...,9,2,:]*(s - 1)**3 - s*(3*params[...,3,2,:]*(t - 1)**2 - 3*params[...,4,2,:]*(t - 1)**2 + 3*params[...,5,2,:]*t**2 - 3*params[...,6,2,:]*t**2 + 6*params[...,5,2,:]*t*(t - 1) - 3*params[...,4,2,:]*t*(2*t - 2)) + params[...,3,2,:]*s - params[...,6,2,:]*s + (s - 1)*(3*params[...,0,2,:]*(t - 1)**2 - 3*params[...,11,2,:]*(t - 1)**2 - 3*params[...,9,2,:]*t**2 + 3*params[...,10,2,:]*t**2 + 6*params[...,10,2,:]*t*(t - 1) - 3*params[...,11,2,:]*t*(2*t - 2)) - params[...,0,2,:]*(s - 1) + params[...,9,2,:]*(s - 1) - params[...,3,2,:]*s**3 + params[...,6,2,:]*s**3 - 3*params[...,1,2,:]*s*(s - 1)**2 + 3*params[...,2,2,:]*s**2*(s - 1) - 3*params[...,7,2,:]*s**2*(s - 1) + 3*params[...,8,2,:]*s*(s - 1)**2)*(params[...,0,0,:]*(t - 1)**3 - params[...,3,0,:]*(t - 1)**3 + t*(3*params[...,8,0,:]*(s - 1)**2 - 3*params[...,9,0,:]*(s - 1)**2 + 3*params[...,6,0,:]*s**2 - 3*params[...,7,0,:]*s**2 - 6*params[...,7,0,:]*s*(s - 1) + 3*params[...,8,0,:]*s*(2*s - 2)) - params[...,6,0,:]*t + params[...,9,0,:]*t + (t - 1)*(3*params[...,0,0,:]*(s - 1)**2 - 3*params[...,1,0,:]*(s - 1)**2 + 3*params[...,2,0,:]*s**2 - 3*params[...,3,0,:]*s**2 + 6*params[...,2,0,:]*s*(s - 1) - 3*params[...,1,0,:]*s*(2*s - 2)) - params[...,0,0,:]*(t - 1) + params[...,3,0,:]*(t - 1) + params[...,6,0,:]*t**3 - params[...,9,0,:]*t**3 + 3*params[...,4,0,:]*t*(t - 1)**2 - 3*params[...,5,0,:]*t**2*(t - 1) + 3*params[...,10,0,:]*t**2*(t - 1) - 3*params[...,11,0,:]*t*(t - 1)**2), (params[...,0,1,:]*(s - 1)**3 - params[...,9,1,:]*(s - 1)**3 - s*(3*params[...,3,1,:]*(t - 1)**2 - 3*params[...,4,1,:]*(t - 1)**2 + 3*params[...,5,1,:]*t**2 - 3*params[...,6,1,:]*t**2 + 6*params[...,5,1,:]*t*(t - 1) - 3*params[...,4,1,:]*t*(2*t - 2)) + params[...,3,1,:]*s - params[...,6,1,:]*s + (s - 1)*(3*params[...,0,1,:]*(t - 1)**2 - 3*params[...,11,1,:]*(t - 1)**2 - 3*params[...,9,1,:]*t**2 + 3*params[...,10,1,:]*t**2 + 6*params[...,10,1,:]*t*(t - 1) - 3*params[...,11,1,:]*t*(2*t - 2)) - params[...,0,1,:]*(s - 1) + params[...,9,1,:]*(s - 1) - params[...,3,1,:]*s**3 + params[...,6,1,:]*s**3 - 3*params[...,1,1,:]*s*(s - 1)**2 + 3*params[...,2,1,:]*s**2*(s - 1) - 3*params[...,7,1,:]*s**2*(s - 1) + 3*params[...,8,1,:]*s*(s - 1)**2)*(params[...,0,0,:]*(t - 1)**3 - params[...,3,0,:]*(t - 1)**3 + t*(3*params[...,8,0,:]*(s - 1)**2 - 3*params[...,9,0,:]*(s - 1)**2 + 3*params[...,6,0,:]*s**2 - 3*params[...,7,0,:]*s**2 - 6*params[...,7,0,:]*s*(s - 1) + 3*params[...,8,0,:]*s*(2*s - 2)) - params[...,6,0,:]*t + params[...,9,0,:]*t + (t - 1)*(3*params[...,0,0,:]*(s - 1)**2 - 3*params[...,1,0,:]*(s - 1)**2 + 3*params[...,2,0,:]*s**2 - 3*params[...,3,0,:]*s**2 + 6*params[...,2,0,:]*s*(s - 1) - 3*params[...,1,0,:]*s*(2*s - 2)) - params[...,0,0,:]*(t - 1) + params[...,3,0,:]*(t - 1) + params[...,6,0,:]*t**3 - params[...,9,0,:]*t**3 + 3*params[...,4,0,:]*t*(t - 1)**2 - 3*params[...,5,0,:]*t**2*(t - 1) + 3*params[...,10,0,:]*t**2*(t - 1) - 3*params[...,11,0,:]*t*(t - 1)**2) - (params[...,0,0,:]*(s - 1)**3 - params[...,9,0,:]*(s - 1)**3 - s*(3*params[...,3,0,:]*(t - 1)**2 - 3*params[...,4,0,:]*(t - 1)**2 + 3*params[...,5,0,:]*t**2 - 3*params[...,6,0,:]*t**2 + 6*params[...,5,0,:]*t*(t - 1) - 3*params[...,4,0,:]*t*(2*t - 2)) + params[...,3,0,:]*s - params[...,6,0,:]*s + (s - 1)*(3*params[...,0,0,:]*(t - 1)**2 - 3*params[...,11,0,:]*(t - 1)**2 - 3*params[...,9,0,:]*t**2 + 3*params[...,10,0,:]*t**2 + 6*params[...,10,0,:]*t*(t - 1) - 3*params[...,11,0,:]*t*(2*t - 2)) - params[...,0,0,:]*(s - 1) + params[...,9,0,:]*(s - 1) - params[...,3,0,:]*s**3 + params[...,6,0,:]*s**3 - 3*params[...,1,0,:]*s*(s - 1)**2 + 3*params[...,2,0,:]*s**2*(s - 1) - 3*params[...,7,0,:]*s**2*(s - 1) + 3*params[...,8,0,:]*s*(s - 1)**2)*(params[...,0,1,:]*(t - 1)**3 - params[...,3,1,:]*(t - 1)**3 + t*(3*params[...,8,1,:]*(s - 1)**2 - 3*params[...,9,1,:]*(s - 1)**2 + 3*params[...,6,1,:]*s**2 - 3*params[...,7,1,:]*s**2 - 6*params[...,7,1,:]*s*(s - 1) + 3*params[...,8,1,:]*s*(2*s - 2)) - params[...,6,1,:]*t + params[...,9,1,:]*t + (t - 1)*(3*params[...,0,1,:]*(s - 1)**2 - 3*params[...,1,1,:]*(s - 1)**2 + 3*params[...,2,1,:]*s**2 - 3*params[...,3,1,:]*s**2 + 6*params[...,2,1,:]*s*(s - 1) - 3*params[...,1,1,:]*s*(2*s - 2)) - params[...,0,1,:]*(t - 1) + params[...,3,1,:]*(t - 1) + params[...,6,1,:]*t**3 - params[...,9,1,:]*t**3 + 3*params[...,4,1,:]*t*(t - 1)**2 - 3*params[...,5,1,:]*t**2*(t - 1) + 3*params[...,10,1,:]*t**2*(t - 1) - 3*params[...,11,1,:]*t*(t - 1)**2)], dim=-1) 15 | return F.normalize(normals, p=2, dim=-1) 16 | -------------------------------------------------------------------------------- /learningpatches/datasets.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import numpy as np 4 | from PIL import Image 5 | import torch as th 6 | from torchvision import transforms 7 | 8 | 9 | class SketchDataset(th.utils.data.Dataset): 10 | """Dataset of pairs of sketch images and target 3D geometry.""" 11 | 12 | def __init__(self, args, jitter=True, val=False): 13 | """Initialize dataset with optional jittering of input images.""" 14 | self.args = args 15 | self._jitter = transforms.Compose([ 16 | transforms.Pad(20, fill=(255, 255, 255)), 17 | transforms.RandomRotation(15, resample=Image.BILINEAR), 18 | transforms.CenterCrop(args.im_size), 19 | transforms.RandomResizedCrop(args.im_size, (0.9, 1), (1, 1)), 20 | transforms.RandomHorizontalFlip(p=0.5), 21 | transforms.ColorJitter( 22 | brightness=0.2, contrast=0.2, saturation=0.2, hue=0.2), 23 | transforms.ToTensor() 24 | ]) if jitter else transforms.ToTensor() 25 | 26 | self.root = args.data 27 | self.turbine_files = [f.strip() for f in 28 | open(os.path.join(self.root, 'turbines.txt'), 29 | 'r').readlines()] \ 30 | if os.path.exists(os.path.join(self.root, 'turbines.txt')) else [] 31 | 32 | if args.wheels: 33 | self.files = [] 34 | for f in sorted([f for f in os.listdir(self.root) 35 | if os.path.isdir(os.path.join(self.root, f))]): 36 | if np.load(os.path.join(self.root, f, 'wheels.npy')).sum() < \ 37 | int(args.n_samples*0.1232): 38 | continue 39 | else: 40 | self.files.append(f) 41 | else: 42 | self.files = sorted([f for f in os.listdir( 43 | self.root) if os.path.isdir(os.path.join(self.root, f))]) 44 | cutoff = int(0.9*len(self.files)) 45 | if val: 46 | self.files = self.files[cutoff:] 47 | else: 48 | self.files = self.files[:cutoff] 49 | 50 | def __repr__(self): 51 | return "SketchDataset | {} entries".format(len(self)) 52 | 53 | def __len__(self): 54 | return len(self.files) 55 | 56 | def get(self, name): 57 | idx = self.files.index(name) 58 | return self[idx] 59 | 60 | def __getitem__(self, idx): 61 | model = self.files[idx] 62 | 63 | fnames = [f for f in os.listdir(os.path.join( 64 | self.root, model, 'pngs')) if f.endswith('.png')] 65 | 66 | ims = [] 67 | if self.args.p2m: 68 | ims = self._jitter( 69 | Image.open( 70 | os.path.join(self.root, model, 'pngs', 71 | np.random.choice(fnames)) 72 | ).convert('RGB'))[None] 73 | 74 | else: 75 | views = set() 76 | for f in fnames: 77 | views.add(f.split('_')[0].replace('.png', '')) 78 | n_views = np.random.randint( 79 | 1, min(self.args.n_views, len(views))+1) 80 | selected_views = np.random.choice( 81 | list(views), size=n_views, replace=False) 82 | fnames_per_view = [ 83 | [f for f in fnames if f.startswith(v)] for v in selected_views] 84 | 85 | for fnames in fnames_per_view: 86 | f = np.random.choice(fnames) 87 | im = self._jitter(Image.open(os.path.join( 88 | self.root, model, 'pngs', f)).convert('RGB')) 89 | ims.append(im) 90 | 91 | ims = th.stack(ims, dim=0) 92 | ims = th.cat([ims, ims[:1].expand( 93 | self.args.n_views-n_views, -1, -1, -1)], dim=0) 94 | 95 | samples = np.load(os.path.join(self.root, model, 96 | 'samples.npy')).astype(np.float32) 97 | perm = np.random.permutation(samples.shape[0]) 98 | points, normals = np.split(samples[perm], 2, axis=1) 99 | 100 | ratio = 0. 101 | if self.args.wheels: 102 | wheel_mask = np.load(os.path.join( 103 | self.root, model, 'wheels.npy'))[perm] 104 | ratio = wheel_mask.sum() / wheel_mask.size 105 | 106 | wheel_points = points[wheel_mask][:int(self.args.n_samples*0.1232)] 107 | wheel_normals = normals[wheel_mask][:int( 108 | self.args.n_samples*0.1232)] 109 | 110 | points = points[np.logical_not(wheel_mask)] 111 | normals = normals[np.logical_not(wheel_mask)] 112 | 113 | points = points[:self.args.n_samples] 114 | normals = normals[:self.args.n_samples] 115 | else: 116 | wheel_points = wheel_normals = np.array([]) 117 | 118 | points = points[:self.args.n_samples] 119 | normals = normals[:self.args.n_samples] 120 | 121 | return { 122 | 'fname': model, 123 | 'ims': ims, 124 | 'points': th.from_numpy(points), 125 | 'normals': th.from_numpy(normals), 126 | 'wheel_points': th.from_numpy(wheel_points), 127 | 'wheel_normals': th.from_numpy(wheel_normals), 128 | 'turbines': model in self.turbine_files, 129 | 'ratio': th.tensor(ratio), 130 | } 131 | -------------------------------------------------------------------------------- /learningpatches/interfaces.py: -------------------------------------------------------------------------------- 1 | import itertools 2 | 3 | import numpy as np 4 | import torch as th 5 | from ttools.training import ModelInterface 6 | 7 | from . import utils 8 | 9 | 10 | class ReconstructionInterface(ModelInterface): 11 | def __init__(self, model, args, vertex_idxs, face_idxs, junctions, 12 | edge_data, vertex_t, adjacencies, junction_order, 13 | template_normals, symmetries=None): 14 | self.model = model 15 | 16 | self.vertex_idxs = vertex_idxs 17 | self.face_idxs = face_idxs 18 | self.junctions = junctions 19 | self.edge_data = edge_data 20 | self.vertex_t = vertex_t 21 | self.junction_order = junction_order 22 | self.template_normals = template_normals[None] 23 | 24 | self.args = args 25 | 26 | self.n_samples_per_loop_side = int( 27 | np.ceil(np.sqrt(args.n_samples / face_idxs.shape[0]))) 28 | 29 | self.optimizer = th.optim.Adam(self.model.parameters(), lr=args.lr) 30 | 31 | self.edge_idxs = [[0, 1, 2, 3], [3, 4, 5, 6], 32 | [6, 7, 8, 9], [9, 10, 11, 0]] 33 | 34 | self.nonadjacent_patch_pairs = [] 35 | self.adjacent_patch_pairs = [] 36 | for i1, i2 in list( 37 | itertools.combinations(range(face_idxs.shape[0]), 2)): 38 | if args.wheels and ( 39 | i1 in [5, 11, 17, 23] or i2 in [5, 11, 17, 23]): 40 | continue 41 | if i2 in adjacencies[i1]: 42 | e1 = adjacencies[i1][i2] 43 | self.adjacent_patch_pairs.append((i1, i2, e1)) 44 | else: 45 | self.nonadjacent_patch_pairs.append((i1, i2)) 46 | 47 | self.d_points_to_tris = utils.PointToTriangleDistance.apply 48 | 49 | p_edge0, p_edge1, p_edge2, p_edge3 = [], [], [], [] 50 | for i in range(self.n_samples_per_loop_side): 51 | for j in range(self.n_samples_per_loop_side): 52 | n = self.n_samples_per_loop_side 53 | 54 | if i > 0: 55 | p_edge0.append(i + j*self.n_samples_per_loop_side) 56 | if i < n-1: 57 | p_edge2.append(i + j*self.n_samples_per_loop_side) 58 | if j > 0: 59 | p_edge3.append(i + j*self.n_samples_per_loop_side) 60 | if j < n-1: 61 | p_edge1.append(i + j*self.n_samples_per_loop_side) 62 | self.grid_point_edges = (p_edge0, p_edge1, p_edge2, p_edge3) 63 | 64 | self.triangulation = [] 65 | t_edge0, t_edge1, t_edge2, t_edge3 = [], [], [], [] 66 | for i in range(self.n_samples_per_loop_side-1): 67 | for j in range(self.n_samples_per_loop_side-1): 68 | n = self.n_samples_per_loop_side-1 69 | 70 | if i > 1: 71 | t_edge0.extend( 72 | [len(self.triangulation), len(self.triangulation)+1]) 73 | if i < n-2: 74 | t_edge2.extend( 75 | [len(self.triangulation), len(self.triangulation)+1]) 76 | if j > 1: 77 | t_edge3.extend( 78 | [len(self.triangulation), len(self.triangulation)+1]) 79 | if j < n-2: 80 | t_edge1.extend( 81 | [len(self.triangulation), len(self.triangulation)+1]) 82 | 83 | self.triangulation.extend( 84 | [[i + j*self.n_samples_per_loop_side, 85 | i + (j+1)*self.n_samples_per_loop_side, 86 | i + (j+1)*self.n_samples_per_loop_side + 1], 87 | [i + j*self.n_samples_per_loop_side, 88 | i + j*self.n_samples_per_loop_side + 1, 89 | i + (j+1)*self.n_samples_per_loop_side + 1]]) 90 | self.triangulation_edges = (t_edge0, t_edge1, t_edge2, t_edge3) 91 | 92 | _loss = Loss(args, self.triangulation_edges, self.triangulation, 93 | self.grid_point_edges, self.n_samples_per_loop_side, 94 | self.d_points_to_tris, self.edge_idxs, 95 | self.nonadjacent_patch_pairs, self.adjacent_patch_pairs, 96 | self.template_normals, symmetries) 97 | self._compute_losses = th.nn.DataParallel( 98 | _loss) if args.cuda else _loss 99 | 100 | if args.cuda: 101 | self.model.cuda() 102 | self._compute_losses.cuda() 103 | 104 | def forward(self, batch): 105 | ims = batch['ims'] 106 | if self.args.cuda: 107 | ims = ims.cuda() 108 | 109 | params = self.model(ims) 110 | vertices, patches = utils.process_patches( 111 | params, self.vertex_idxs, self.face_idxs, self.edge_data, 112 | self.junctions, self.junction_order, self.vertex_t) 113 | 114 | st = th.empty(patches.shape[0], patches.shape[1], 115 | self.n_samples_per_loop_side**2, 2).uniform_().to(params) 116 | 117 | points = utils.coons_sample(st[..., 0], st[..., 1], patches) 118 | normals = utils.coons_normals(st[..., 0], st[..., 1], patches) 119 | mtds = utils.coons_mtds(st[..., 0], st[..., 1], patches) 120 | 121 | return {'patches': patches, 'points': points, 'normals': normals, 122 | 'mtds': mtds, 'st': st, 'params': params, 'vertices': vertices} 123 | 124 | def training_step(self, batch): 125 | self.model.train() 126 | self.optimizer.zero_grad() 127 | 128 | losses_dict = self._compute_losses(batch, self.forward(batch)) 129 | loss = losses_dict['loss'] 130 | loss.mean().backward() 131 | self.optimizer.step() 132 | 133 | return {k: v.mean().item() for k, v in losses_dict.items()} 134 | 135 | def init_validation(self): 136 | losses = ['loss', 'chamferloss', 'normalsloss', 'collisionloss', 137 | 'planarloss', 'templatenormalsloss', 'symmetryloss'] 138 | ret = {loss: 0 for loss in losses} 139 | ret['count'] = 0 140 | return ret 141 | 142 | def validation_step(self, batch, running_data): 143 | self.model.eval() 144 | count = running_data['count'] 145 | n = batch['ims'].shape[0] 146 | losses_dict = self._compute_losses(batch, self.forward(batch)) 147 | loss = losses_dict['loss'] 148 | chamferloss = losses_dict['chamferloss'] 149 | normalsloss = losses_dict['normalsloss'] 150 | collisionloss = losses_dict['collisionloss'] 151 | planarloss = losses_dict['planarloss'] 152 | templatenormalsloss = losses_dict['templatenormalsloss'] 153 | symmetryloss = losses_dict['symmetryloss'] 154 | return { 155 | 'loss': (running_data['loss']*count + 156 | loss.mean().item()*n) / (count+n), 157 | 'chamferloss': (running_data['chamferloss']*count + 158 | chamferloss.mean().item()*n) / (count+n), 159 | 'normalsloss': (running_data['normalsloss']*count + 160 | normalsloss.mean().item()*n) / (count+n), 161 | 'collisionloss': (running_data['collisionloss']*count + 162 | collisionloss.mean().item()*n) / (count+n), 163 | 'planarloss': (running_data['planarloss']*count + 164 | planarloss.mean().item()*n) / (count+n), 165 | 'templatenormalsloss': (running_data['templatenormalsloss']*count + 166 | templatenormalsloss.mean().item()*n) 167 | / (count+n), 168 | 'symmetryloss': (running_data['symmetryloss']*count 169 | + symmetryloss.mean().item()*n) / (count+n), 170 | 'count': count + n 171 | } 172 | 173 | 174 | wheel_idxs = list(range(24)) 175 | no_wheel_idxs = list(range(24, 43)) 176 | 177 | 178 | class Loss(th.nn.Module): 179 | def __init__(self, args, triangulation_edges, triangulation, 180 | grid_point_edges, n_samples_per_loop_side, d_points_to_tris, 181 | edge_idxs, nonadjacent_patch_pairs, adjacent_patch_pairs, 182 | template_normals, symmetries): 183 | super(Loss, self).__init__() 184 | self.args = args 185 | self.triangulation_edges = triangulation_edges 186 | self.triangulation = triangulation 187 | self.grid_point_edges = grid_point_edges 188 | self.d_points_to_tris = d_points_to_tris 189 | self.edge_idxs = edge_idxs 190 | self.nonadjacent_patch_pairs = nonadjacent_patch_pairs 191 | self.adjacent_patch_pairs = adjacent_patch_pairs 192 | self.symmetries = symmetries 193 | 194 | linspace = th.linspace(0, 1, n_samples_per_loop_side) 195 | s_grid, t_grid = th.meshgrid(linspace, linspace) 196 | self.s_grid = th.nn.Parameter(s_grid.flatten(), requires_grad=False) 197 | self.t_grid = th.nn.Parameter(t_grid.flatten(), requires_grad=False) 198 | self.template_normals = th.nn.Parameter( 199 | template_normals, requires_grad=False) 200 | 201 | def forward(self, batch, fwd_data): 202 | patches = fwd_data['patches'] # [b, n_patches, 12, 3] 203 | points = fwd_data['points'] 204 | normals = fwd_data['normals'] 205 | mtds = fwd_data['mtds'] 206 | vertices = fwd_data['vertices'] 207 | 208 | target_points = batch['points'].to(points) # [b, n_points, 3] 209 | target_normals = batch['normals'].to(normals) 210 | if self.args.wheels: 211 | wheel_target_points = batch['wheel_points'].to(points) 212 | wheel_target_normals = batch['wheel_normals'].to(normals) 213 | 214 | b, n_patches, _, _ = patches.shape 215 | 216 | st = fwd_data['st'] 217 | 218 | if self.symmetries is not None: 219 | xs, ys = self.symmetries 220 | xs_ = vertices[:, xs] 221 | ys_ = vertices[:, ys] * vertices.new_tensor([[[-1, 1, 1]]]) 222 | symmetryloss = th.sum((xs_ - ys_)**2, dim=-1).mean() 223 | else: 224 | symmetryloss = patches.new_zeros(1) 225 | 226 | if self.args.wheels: 227 | mtds = mtds.view(b, -1) 228 | 229 | wheel_points = points[:, wheel_idxs] 230 | no_wheel_points = points[:, no_wheel_idxs] 231 | 232 | wheel_normals = normals[:, wheel_idxs] 233 | no_wheel_normals = normals[:, no_wheel_idxs] 234 | 235 | wheel_chamferloss_a, wheel_chamferloss_b, wheel_normalsloss_a, \ 236 | wheel_normalsloss_b = utils.compute_chamfer_losses( 237 | wheel_points, wheel_normals, wheel_target_points, 238 | wheel_target_normals, self.args.w_normals > 0) 239 | no_wheel_chamferloss_a, no_wheel_chamferloss_b, \ 240 | no_wheel_normalsloss_a, no_wheel_normalsloss_b = \ 241 | utils.compute_chamfer_losses(no_wheel_points, no_wheel_normals, 242 | target_points, target_normals, 243 | self.args.w_normals > 0) 244 | 245 | chamferloss_a = th.cat( 246 | [wheel_chamferloss_a, no_wheel_chamferloss_a], dim=1) 247 | normalsloss_a = th.cat( 248 | [wheel_normalsloss_a, no_wheel_normalsloss_a], dim=1) 249 | 250 | ratio = batch['ratio'] 251 | n_wheel_pts = wheel_target_points.shape[1] 252 | n_no_wheel_pts = target_points.shape[1] 253 | n_pts = n_wheel_pts + n_no_wheel_pts 254 | ratio_wheel = ratio * n_pts/n_wheel_pts 255 | ratio_no_wheel = (1-ratio) * n_pts/n_no_wheel_pts 256 | 257 | chamferloss_a = th.sum(mtds*chamferloss_a, dim=-1) / mtds.sum(-1) 258 | chamferloss_b = ratio_wheel * \ 259 | wheel_chamferloss_b.mean( 260 | 1) + ratio_no_wheel * no_wheel_chamferloss_b.mean(1) 261 | chamferloss = ((chamferloss_a+chamferloss_b).mean() / 2).view(1) 262 | 263 | normalsloss_a = th.sum(mtds*normalsloss_a, dim=-1) / mtds.sum(-1) 264 | normalsloss_b = ratio_wheel * \ 265 | wheel_normalsloss_b.mean( 266 | 1) + ratio_no_wheel * no_wheel_normalsloss_b.mean(1) 267 | normalsloss = ((normalsloss_a+normalsloss_b).mean() / 2).view(1) 268 | 269 | elif self.args.seperate_turbines: 270 | turbine_idxs = [x for x in range(76) if x not in [72, 73, 74, 75]] 271 | no_turbine_idxs = [x for x in range(76) 272 | if x not in [10, 12, 14, 17, 19, 20, 21, 24, 25, 273 | 27, 28, 29, 30, 31, 32, 33, 34, 274 | 66]] 275 | 276 | turbine_points = points[batch['turbines']] 277 | turbine_points = turbine_points[:, turbine_idxs] 278 | no_turbine_points = points[batch['turbines']] 279 | no_turbine_points = no_turbine_points[:, no_turbine_idxs] 280 | 281 | turbine_normals = normals[batch['turbines']] 282 | turbine_normals = turbine_normals[:, turbine_idxs] 283 | no_turbine_normals = normals[batch['turbines']] 284 | no_turbine_normals = no_turbine_normals[:, no_turbine_idxs] 285 | 286 | turbine_mtds = mtds[batch['turbines']] 287 | turbine_mtds = turbine_mtds[:, turbine_idxs] 288 | no_turbine_mtds = mtds[batch['turbines']] 289 | no_turbine_mtds = no_turbine_mtds[:, no_turbine_idxs] 290 | 291 | turbine_patches = patches[batch['turbines']] 292 | turbine_patches = turbine_patches[:, turbine_idxs] 293 | no_turbine_patches = patches[batch['turbines']] 294 | no_turbine_patches = no_turbine_patches[:, no_turbine_idxs] 295 | 296 | turbine_target_points = target_points[batch['turbines']] 297 | no_turbine_target_points = target_points[batch['turbines']] 298 | 299 | turbine_target_normals = target_normals[batch['turbines']] 300 | no_turbine_target_normals = target_normals[batch['turbines']] 301 | 302 | if turbine_points.shape[0] > 0: 303 | turbine_mtds = turbine_mtds.view(turbine_mtds.shape[0], -1) 304 | turbine_chamferloss_a, turbine_chamferloss_b, \ 305 | turbine_normalsloss_a, turbine_normalsloss_b = \ 306 | utils.compute_chamfer_losses(turbine_points, 307 | turbine_normals, 308 | turbine_target_points, 309 | turbine_target_normals, 310 | self.args.w_normals > 0) 311 | turbine_chamferloss_a = th.sum( 312 | turbine_mtds*turbine_chamferloss_a, 313 | dim=-1) / turbine_mtds.sum(-1) 314 | turbine_chamferloss_b = turbine_chamferloss_b.mean(1) 315 | turbine_chamferloss = ( 316 | (turbine_chamferloss_a + 317 | turbine_chamferloss_b).mean() / 2).view(1) 318 | turbine_normalsloss_a = th.sum( 319 | turbine_mtds*turbine_normalsloss_a, 320 | dim=-1) / turbine_mtds.sum(-1) 321 | turbine_normalsloss_b = turbine_normalsloss_b.mean(-1) 322 | turbine_normalsloss = ( 323 | (turbine_normalsloss_a + 324 | turbine_normalsloss_b).mean() / 2).view(1) 325 | else: 326 | turbine_chamferloss = turbine_normalsloss = points.new_zeros(1) 327 | 328 | if no_turbine_points.shape[0] > 0: 329 | no_turbine_mtds = no_turbine_mtds.view( 330 | no_turbine_mtds.shape[0], -1) 331 | no_turbine_chamferloss_a, no_turbine_chamferloss_b, \ 332 | no_turbine_normalsloss_a, no_turbine_normalsloss_b = \ 333 | utils.compute_chamfer_losses(no_turbine_points, 334 | no_turbine_normals, 335 | no_turbine_target_points, 336 | no_turbine_target_normals, 337 | self.args.w_normals > 0) 338 | no_turbine_chamferloss_a = th.sum( 339 | no_turbine_mtds*no_turbine_chamferloss_a, 340 | dim=-1) / no_turbine_mtds.sum(-1) 341 | no_turbine_chamferloss_b = no_turbine_chamferloss_b.mean(1) 342 | no_turbine_chamferloss = ( 343 | (no_turbine_chamferloss_a + 344 | no_turbine_chamferloss_b).mean() / 2).view(1) 345 | no_turbine_normalsloss_a = th.sum( 346 | no_turbine_mtds*no_turbine_normalsloss_a, 347 | dim=-1) / no_turbine_mtds.sum(-1) 348 | no_turbine_normalsloss_b = no_turbine_normalsloss_b.mean(-1) 349 | no_turbine_normalsloss = ( 350 | (no_turbine_normalsloss_a + 351 | no_turbine_normalsloss_b).mean() / 2).view(1) 352 | else: 353 | no_turbine_chamferloss = no_turbine_normalsloss = \ 354 | points.new_zeros(1) 355 | 356 | ratio_turbine = turbine_points.shape[0] / b 357 | chamferloss = ratio_turbine*turbine_chamferloss + \ 358 | (1-ratio_turbine)*no_turbine_chamferloss 359 | normalsloss = ratio_turbine*turbine_normalsloss + \ 360 | (1-ratio_turbine)*no_turbine_normalsloss 361 | 362 | del turbine_normals, turbine_target_normals, no_turbine_normals, \ 363 | no_turbine_target_normals, turbine_points, \ 364 | turbine_target_points, no_turbine_points, \ 365 | no_turbine_target_points 366 | else: 367 | mtds = mtds.view(b, -1) 368 | 369 | chamferloss_a, chamferloss_b, normalsloss_a, normalsloss_b = \ 370 | utils.compute_chamfer_losses( 371 | points, normals, target_points, target_normals, 372 | self.args.w_normals > 0) 373 | chamferloss_a = th.sum(mtds*chamferloss_a, dim=-1) / mtds.sum(-1) 374 | chamferloss_b = chamferloss_b.mean(1) 375 | chamferloss = ((chamferloss_a+chamferloss_b).mean() / 2).view(1) 376 | normalsloss_a = th.sum(mtds*normalsloss_a, dim=-1) / mtds.sum(-1) 377 | normalsloss_b = normalsloss_b.mean(-1) 378 | normalsloss = ((normalsloss_a+normalsloss_b).mean() / 2).view(1) 379 | 380 | mtds = mtds.view(b, n_patches, -1) 381 | 382 | if self.args.w_templatenormals: 383 | templatenormalsloss = th.sum( 384 | (self.template_normals - normals)**2, dim=-1) 385 | templatenormalsloss = th.sum( 386 | mtds*templatenormalsloss, dim=-1) / mtds.sum(-1) 387 | else: 388 | templatenormalsloss = th.zeros_like(chamferloss) 389 | 390 | del target_normals, normals, target_points 391 | 392 | if self.args.w_planar > 0: 393 | planarloss = utils.planar_patch_loss(st, points, mtds) 394 | else: 395 | planarloss = th.zeros_like(chamferloss) 396 | 397 | del points, mtds 398 | 399 | if self.args.w_collision > 0: 400 | collisionloss = chamferloss.new_zeros([b, 0]) 401 | grid_points = utils.coons_sample(self.s_grid, self.t_grid, patches) 402 | triangles = grid_points[:, :, self.triangulation] 403 | 404 | i1s, i2s, e1s = zip(*self.adjacent_patch_pairs) 405 | points1 = grid_points[:, i1s] 406 | point_idxs = th.tensor([self.grid_point_edges[e] 407 | for e in e1s]).to(points1.device) 408 | point_idxs = point_idxs[None, :, :, None].expand(b, -1, -1, 3) 409 | points1 = th.gather(points1, 2, point_idxs) 410 | points2 = grid_points[:, i2s] 411 | 412 | triangles1 = triangles[:, i1s] 413 | triangle_idxs = th.tensor( 414 | [self.triangulation_edges[e] for e in e1s] 415 | ).to(triangles1.device) 416 | triangle_idxs = triangle_idxs[None, :, :, 417 | None, None].expand(b, -1, -1, 3, 3) 418 | triangles1 = th.gather(triangles1, 2, triangle_idxs) 419 | triangles2 = triangles[:, i2s] 420 | 421 | idxs = utils.bboxes_intersect( 422 | points1, points2, dim=2).any(0).nonzero().squeeze(1) 423 | n_adjacent_intersections = idxs.shape[0] 424 | 425 | if n_adjacent_intersections > 0: 426 | points1 = points1[:, idxs].view([-1] + list(points1.shape[2:])) 427 | points2 = points2[:, idxs].view([-1] + list(points2.shape[2:])) 428 | triangles1 = triangles1[:, idxs].view( 429 | [-1] + list(triangles1.shape[2:])) 430 | triangles2 = triangles2[:, idxs].view( 431 | [-1] + list(triangles2.shape[2:])) 432 | d1 = self.d_points_to_tris(points1, triangles2) 433 | d2 = self.d_points_to_tris(points2, triangles1) 434 | d = th.min(d1, d2).view(b, -1) 435 | collisionloss = th.cat( 436 | [collisionloss, th.exp(-(d/self.args.sigma_collision)**2)], 437 | dim=1) 438 | 439 | i1s, i2s = zip(*self.nonadjacent_patch_pairs) 440 | idxs = utils.bboxes_intersect( 441 | grid_points[:, i1s], grid_points[:, i2s], dim=2 442 | ).any(0).nonzero().squeeze(1) 443 | n_nonadjacent_intersections = idxs.shape[0] 444 | i1s = th.tensor(i1s).to(grid_points.device)[idxs] 445 | i2s = th.tensor(i2s).to(grid_points.device)[idxs] 446 | 447 | if n_nonadjacent_intersections > 0: 448 | points1 = grid_points[:, i1s].view( 449 | [-1] + list(grid_points.shape[2:])) 450 | points2 = grid_points[:, i2s].view( 451 | [-1] + list(grid_points.shape[2:])) 452 | triangles1 = triangles[:, i1s].view( 453 | [-1] + list(triangles.shape[2:])) 454 | triangles2 = triangles[:, i2s].view( 455 | [-1] + list(triangles.shape[2:])) 456 | d1 = self.d_points_to_tris(points1, triangles2) 457 | d2 = self.d_points_to_tris(points2, triangles1) 458 | d = th.min(d1, d2).view(b, -1) 459 | collisionloss = th.cat( 460 | [collisionloss, th.exp(-(d/self.args.sigma_collision)**2)], 461 | dim=1) 462 | 463 | del triangles 464 | 465 | if n_adjacent_intersections + n_nonadjacent_intersections > 0: 466 | collisionloss = collisionloss.sum(-1).mean() 467 | else: 468 | collisionloss = th.zeros_like(chamferloss) 469 | else: 470 | collisionloss = th.zeros_like(chamferloss) 471 | 472 | loss = chamferloss + self.args.w_normals*normalsloss + \ 473 | self.args.w_collision*collisionloss + \ 474 | self.args.w_planar*planarloss + \ 475 | self.args.w_templatenormals*templatenormalsloss + \ 476 | self.args.w_symmetry*symmetryloss 477 | 478 | return { 479 | 'loss': loss, 480 | 'chamferloss': chamferloss, 481 | 'normalsloss': normalsloss, 482 | 'collisionloss': collisionloss, 483 | 'planarloss': planarloss, 484 | 'templatenormalsloss': templatenormalsloss, 485 | 'symmetryloss': symmetryloss, 486 | } 487 | -------------------------------------------------------------------------------- /learningpatches/models.py: -------------------------------------------------------------------------------- 1 | import torch as th 2 | import torch.nn as nn 3 | from torchvision.models import resnet18 4 | 5 | 6 | class ReconstructionModel(nn.Module): 7 | """Sketch to patch model that encodes an image and outputs parameters.""" 8 | 9 | def __init__(self, output_dim, init=None): 10 | """Construct the model according to the necessary output dimension.""" 11 | super(ReconstructionModel, self).__init__() 12 | 13 | self.encode = resnet18(num_classes=1024) 14 | self.decode = nn.Sequential( 15 | nn.LayerNorm(1024), 16 | nn.LeakyReLU(), 17 | nn.Linear(1024, 512), 18 | nn.LayerNorm(512), 19 | nn.LeakyReLU(), 20 | nn.Linear(512, 256), 21 | nn.LayerNorm(256), 22 | nn.LeakyReLU(), 23 | ) 24 | self.out = nn.Linear(256, output_dim) 25 | 26 | if init is not None: 27 | nn.init.zeros_(self.out.weight) 28 | with th.no_grad(): 29 | self.out.bias.data = init.clone() 30 | 31 | def forward(self, ims): 32 | """Process one our more images, corresponding to different views.""" 33 | codes = th.stack([self.encode(im.squeeze(1)) 34 | for im in th.split(ims, 1, dim=1)], dim=-1) 35 | return self.out(self.decode(codes.max(-1)[0])) 36 | -------------------------------------------------------------------------------- /learningpatches/utils.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import torch as th 3 | 4 | from .coons_utils import * 5 | 6 | 7 | def subbezier(t1, t2, params): 8 | """Compute control points for cubic Bezier curve between t1 and t2. 9 | 10 | t1 -- [batch_size] 11 | t2 -- [batch_size] 12 | params -- [batch_size, 4, 3] 13 | """ 14 | def dB_dt(t): 15 | return params[:, 0]*(-3*(1-t)**2) + params[:, 1]*(3*(1-4*t+3*t**2)) \ 16 | + params[:, 2]*(3*(2*t-3*t**2)) + params[:, 3]*(3*t**2) 17 | 18 | t1 = t1[:, None] 19 | t2 = t2[:, None] 20 | sub_pts = th.empty_like(params) 21 | sub_pts[:, 0] = bezier_sample(t1[:, :, None], params).squeeze(1) 22 | sub_pts[:, 3] = bezier_sample(t2[:, :, None], params).squeeze(1) 23 | sub_pts[:, 1] = (t2-t1)*dB_dt(t1)/3 + sub_pts[:, 0] 24 | sub_pts[:, 2] = sub_pts[:, 3] - (t2-t1)*dB_dt(t2)/3 25 | return sub_pts 26 | 27 | 28 | def bezier_sample(t, params): 29 | """Sample points from cubic Bezier curves defined by params at t values.""" 30 | A = params.new_tensor([[1, 0, 0, 0], 31 | [-3, 3, 0, 0], 32 | [3, -6, 3, 0], 33 | [-1, 3, -3, 1]]) 34 | 35 | t = t.pow(t.new_tensor([0, 1, 2, 3])) # [n_samples, 4] 36 | 37 | points = t @ A @ params # [..., n_samples, 3] 38 | return points 39 | 40 | 41 | def coons_sample(s, t, params): 42 | """Sample points from Coons patch defined by params at s, t values. 43 | 44 | params -- [..., 12, 3] 45 | """ 46 | sides = [params[..., :4, :], params[..., 3:7, :], 47 | params[..., 6:10, :], params[..., [9, 10, 11, 0], :]] 48 | corners = [params[..., [0], :], params[..., [3], :], 49 | params[..., [9], :], params[..., [6], :]] 50 | 51 | s = s[..., None] 52 | t = t[..., None] 53 | B = corners[0] * (1-s) * (1-t) + corners[1] * s * (1-t) + \ 54 | corners[2] * (1-s) * t + corners[3] * s * t # [..., n_samples, 3] 55 | 56 | Lc = bezier_sample(s, sides[0]) * (1-t) + bezier_sample(1-s, sides[2]) * t 57 | Ld = bezier_sample(t, sides[1]) * s + bezier_sample(1-t, sides[3]) * (1-s) 58 | return Lc + Ld - B 59 | 60 | 61 | def batched_cdist_l2(x1, x2): 62 | """Compute batched l2 cdist.""" 63 | x1_norm = x1.pow(2).sum(-1, keepdim=True) 64 | x2_norm = x2.pow(2).sum(-1, keepdim=True) 65 | res = th.baddbmm( 66 | x2_norm.transpose(-2, -1), 67 | x1, 68 | x2.transpose(-2, -1), 69 | alpha=-2 70 | ).add_(x1_norm).clamp_min_(1e-10).sqrt_() 71 | return res 72 | 73 | 74 | def planar_patch_loss(params, points, mtds): 75 | """Compute planar patch loss from control points, samples, and Jacobians. 76 | 77 | params -- [..., 2] 78 | points -- [..., 3] 79 | """ 80 | X = th.cat([params.new_ones(list(params.shape[:-1]) + [1]), params], 81 | dim=-1) 82 | b = th.inverse(X.transpose(-1, -2) @ X) @ X.transpose(-1, -2) @ points 83 | distances = (X @ b - points).pow(2).sum(-1) 84 | return th.sum(distances*mtds, dim=-1) / mtds.sum(-1) 85 | 86 | 87 | def dot(a, b): 88 | """Dot product.""" 89 | return th.sum(a*b, dim=-1, keepdim=True) 90 | 91 | 92 | def dot2(a): 93 | """Squared norm.""" 94 | return dot(a, a) 95 | 96 | 97 | def d_points_to_tris(points, triangles): 98 | """Compute distance frome each point to the corresponding triangle. 99 | 100 | points -- [b, n, 3] 101 | triangles -- [b, n, 3, 3] 102 | """ 103 | v21 = triangles[:, :, 1]-triangles[:, :, 0] 104 | v32 = triangles[:, :, 2]-triangles[:, :, 1] 105 | v13 = triangles[:, :, 0]-triangles[:, :, 2] 106 | p1 = points - triangles[:, :, 0] 107 | p2 = points - triangles[:, :, 1] 108 | p3 = points - triangles[:, :, 2] 109 | nor = th.cross(v21, v13, dim=-1) 110 | 111 | cond = dot(th.cross(v21, nor, dim=-1), p1).sign() \ 112 | + dot(th.cross(v32, nor, dim=-1), p2).sign() \ 113 | + dot(th.cross(v13, nor, dim=-1), p3).sign() < 2 114 | cond = cond.float() 115 | result = cond * th.stack([ 116 | dot2(v21 * th.clamp(dot(v21, p1) / dot2(v21), 0, 1) - p1), 117 | dot2(v32 * th.clamp(dot(v32, p2) / dot2(v32), 0, 1) - p2), 118 | dot2(v13 * th.clamp(dot(v13, p3) / dot2(v13), 0, 1) - p3) 119 | ], dim=-1).min(-1)[0] + (1-cond) * dot(nor, p1) * dot(nor, p1) / dot2(nor) 120 | return result.squeeze(-1).min(-1)[0] 121 | 122 | 123 | class PointToTriangleDistance(th.autograd.Function): 124 | """Autograd function for computing smallest point to triangle distance.""" 125 | 126 | @staticmethod 127 | def forward(ctx, points, triangles): 128 | """Compute smallest distance between each point and triangle batch. 129 | 130 | points -- [batch_size, n_points, 3] 131 | triangles -- [batch_size, n_triagles, 3, 3] 132 | """ 133 | b = points.shape[0] 134 | 135 | v21 = triangles[:, None, :, 1]-triangles[:, None, :, 0] 136 | v32 = triangles[:, None, :, 2]-triangles[:, None, :, 1] 137 | v13 = triangles[:, None, :, 0]-triangles[:, None, :, 2] 138 | p1 = points[:, :, None] - triangles[:, None, :, 0] 139 | p2 = points[:, :, None] - triangles[:, None, :, 1] 140 | p3 = points[:, :, None] - triangles[:, None, :, 2] 141 | nor = th.cross(v21, v13, dim=-1) 142 | 143 | cond = dot(th.cross(v21, nor, dim=-1), p1).sign() \ 144 | + dot(th.cross(v32, nor, dim=-1), p2).sign() \ 145 | + dot(th.cross(v13, nor, dim=-1), p3).sign() < 2 146 | cond = cond.float() 147 | result = cond * th.stack([ 148 | dot2(v21 * th.clamp(dot(v21, p1) / dot2(v21), 0, 1) - p1), 149 | dot2(v32 * th.clamp(dot(v32, p2) / dot2(v32), 0, 1) - p2), 150 | dot2(v13 * th.clamp(dot(v13, p3) / dot2(v13), 0, 1) - p3) 151 | ], dim=-1).min(-1)[0] + (1-cond) \ 152 | * dot(nor, p1) * dot(nor, p1) / dot2(nor) 153 | result = result.squeeze(-1) 154 | 155 | _, nearest_tris_idxs = result.min(-1) # [b, n_points] 156 | _, nearest_points_idxs = result.min(-2) # [b, n_tris] 157 | ctx.save_for_backward( 158 | points, triangles, nearest_tris_idxs, nearest_points_idxs) 159 | 160 | return result.view(b, -1).min(-1)[0] 161 | 162 | @staticmethod 163 | def backward(ctx, grad_output): 164 | """Only consider the closest point-triangle pair for gradient.""" 165 | points, triangles, nearest_tris_idxs, nearest_points_idxs = \ 166 | ctx.saved_tensors 167 | grad_points = grad_tris = None 168 | 169 | if ctx.needs_input_grad[0]: 170 | idx = nearest_tris_idxs[..., None, None].expand( 171 | list(nearest_tris_idxs.shape) + [3, 3]) 172 | nearest_tris = triangles.gather(index=idx, dim=1) 173 | with th.enable_grad(): 174 | distance = d_points_to_tris(points, nearest_tris) 175 | grad_points = th.autograd.grad(outputs=distance, inputs=points, 176 | grad_outputs=grad_output, 177 | only_inputs=True)[0] 178 | if ctx.needs_input_grad[1]: 179 | idx = nearest_points_idxs[..., None].expand( 180 | list(nearest_points_idxs.shape) + [3]) 181 | nearest_points = points.gather(index=idx, dim=1) 182 | with th.enable_grad(): 183 | distance = d_points_to_tris(nearest_points, triangles) 184 | grad_tris = th.autograd.grad(outputs=distance, 185 | inputs=triangles, 186 | grad_outputs=grad_output, 187 | only_inputs=True)[0] 188 | 189 | return grad_points, grad_tris 190 | 191 | 192 | def bboxes_intersect(points1, points2, dim=1): 193 | """Compute whether bounding boxes of two point clouds intersect.""" 194 | min1 = points1.min(dim)[0] 195 | max1 = points1.max(dim)[0] 196 | min2 = points2.min(dim)[0] 197 | max2 = points2.max(dim)[0] 198 | center1 = (min1 + max1)/2 199 | center2 = (min2 + max2)/2 200 | size1 = max1 - min1 201 | size2 = max2 - min2 202 | return ((center1 - center2).abs() * 2 <= size1 + size2).all(-1) 203 | 204 | 205 | def logit(x): 206 | """Inverse of softmax.""" 207 | return np.log(x / (1-x)) 208 | 209 | 210 | def compute_chamfer_losses(points, normals, target_points, target_normals, 211 | compute_normals=True): 212 | """Compute area-weighted Chamfer and normals losses.""" 213 | b = points.shape[0] 214 | points = points.view(b, -1, 3) 215 | 216 | # [b, n_total_samples, n_points] 217 | distances = batched_cdist_l2(points, target_points) 218 | 219 | chamferloss_a, idx_a = distances.min(2) # [b, n_total_samples] 220 | chamferloss_b, idx_b = distances.min(1) 221 | 222 | if compute_normals: 223 | normals = normals.view(b, -1, 3) 224 | 225 | # [b, n_total_samples, 1, 3] 226 | idx_a = idx_a[..., None, None].expand(-1, -1, -1, 3) 227 | nearest_target_normals = \ 228 | target_normals[:, None].expand(list(distances.shape) + [3]) \ 229 | .gather(index=idx_a, dim=2).squeeze(2) # [b, n_total_samples, 3] 230 | 231 | # [b, 1, n_points, 3] 232 | idx_b = idx_b[..., None, :, None].expand(-1, -1, -1, 3) 233 | nearest_normals = \ 234 | normals[:, :, None].expand(list(distances.shape) + [3]) \ 235 | .gather(index=idx_b, dim=1).squeeze(1) # [b, n_points, 3] 236 | 237 | normalsloss_a = th.sum((nearest_target_normals - normals)**2, dim=-1) 238 | normalsloss_b = th.sum((nearest_normals - target_normals)**2, dim=-1) 239 | else: 240 | normalsloss_a = th.zeros_like(chamferloss_a) 241 | normalsloss_b = th.zeros_like(chamferloss_b) 242 | 243 | return chamferloss_a, chamferloss_b, normalsloss_a, normalsloss_b 244 | 245 | 246 | def process_patches(params, vertex_idxs, face_idxs, edge_data, junctions, 247 | junction_order, vertex_t): 248 | """Process all junction curves to compute explicit patch control poitns.""" 249 | vertices = params.clone()[:, vertex_idxs] 250 | 251 | for i in junction_order: 252 | edge = junctions[i] 253 | t = th.sigmoid(params[:, vertex_t[i]]) 254 | vertex = bezier_sample(t[:, None, None], vertices[:, edge]).squeeze(1) 255 | vertices = vertices.clone() 256 | vertices[:, i] = vertex 257 | 258 | for a, b, c, d in edge_data[i]: 259 | if a not in junctions: 260 | a, b, c, d = d, c, b, a 261 | 262 | edge = junctions[a] 263 | t_a = th.sigmoid(params[:, vertex_t[a]]) 264 | v0_a, _, _, v3_a = edge 265 | if d == v0_a: 266 | t_d = th.zeros_like(t_a) 267 | elif d == v3_a: 268 | t_d = th.ones_like(t_a) 269 | else: 270 | v0_d, _, _, v3_d = junctions[d] 271 | t_d = th.sigmoid(params[:, vertex_t[d]]) 272 | if v0_a == v0_d and v3_a == v3_d: 273 | pass 274 | elif v0_a == v3_d and v3_a == v0_d: 275 | t_d = 1 - t_d 276 | else: 277 | edge = junctions[d] 278 | if a == v0_d: 279 | t_a = th.zeros_like(t_d) 280 | elif a == v3_d: 281 | t_a = th.ones_like(t_d) 282 | 283 | curve = subbezier(t_a, t_d, vertices[:, edge])[:, 1:-1] 284 | vertices = vertices.clone() 285 | vertices[:, [b, c]] = curve 286 | 287 | patches = vertices[:, face_idxs] 288 | 289 | return vertices, patches 290 | 291 | 292 | def tri_area(tri): 293 | """Compute the area of a triangle form its vertices.""" 294 | a = tri[:, 0] 295 | b = tri[:, 1] 296 | c = tri[:, 2] 297 | ab = b - a 298 | ac = c - a 299 | return th.cross(ab, ac).abs().norm(2, dim=1) / 2 300 | 301 | 302 | def write_obj(file, patches, res=30): 303 | """Write Coons patches to an obj file.""" 304 | linspace = th.linspace(0, 1, res).to(patches) 305 | s_grid, t_grid = th.meshgrid(linspace, linspace) 306 | verts = coons_sample(s_grid.flatten(), 307 | t_grid.flatten(), patches).cpu().numpy() 308 | n_verts = verts.shape[1] 309 | with open(file, 'w') as f: 310 | for p, patch in enumerate(verts): 311 | for x, y, z in patch: 312 | f.write(f'v {x} {y} {z}\n') 313 | for i in range(res-1): 314 | for j in range(res-1): 315 | f.write( 316 | f'f {i*res + j+2 + p*n_verts} {i*res + j+1 + p*n_verts} {(i+1)*res + j+1 + p*n_verts}\n') 317 | f.write( 318 | f'f {(i+1)*res + j+2 + p*n_verts} {i*res + j+2 + p*n_verts} {(i+1)*res + j+1 + p*n_verts}\n') 319 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Pillow==8.1.0 2 | torch-tools==0.1.4 3 | -------------------------------------------------------------------------------- /scripts/run.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import ast 3 | from collections import defaultdict 4 | import os 5 | 6 | import numpy as np 7 | from PIL import Image 8 | import torch as th 9 | from torchvision.transforms.functional import to_tensor 10 | import ttools 11 | 12 | from learningpatches.models import ReconstructionModel 13 | from learningpatches import utils 14 | 15 | th.manual_seed(123) 16 | th.backends.cudnn.deterministic = True 17 | th.backends.cudnn.benchmark = True 18 | np.random.seed(123) 19 | 20 | turbine_idxs = [x for x in range(76) if x not in [72, 73, 74, 75]] 21 | no_turbine_idxs = [x for x in range(76) if x not in 22 | [10, 12, 14, 17, 19, 20, 21, 24, 25, 27, 28, 29, 30, 31, 32, 23 | 33, 34, 66]] 24 | 25 | 26 | def main(args): 27 | device = "cuda" if th.cuda.is_available() and args.cuda else "cpu" 28 | 29 | edge_data = [line.strip().split(' ') for line in open( 30 | os.path.join('templates', args.category, 'edges.txt'), 'r')] 31 | edge_data = [(int(a), int(b), int(c), int(d)) for a, b, c, d in edge_data] 32 | junction_order = [int(line.strip()) for line in open( 33 | os.path.join('templates', args.category, 'junction_order.txt'), 'r')] 34 | topology = ast.literal_eval( 35 | open(os.path.join('templates', args.category, 36 | 'topology.txt'), 'r').read()) 37 | adjacencies = {} 38 | for i, l in enumerate( 39 | open(os.path.join('templates', args.category, 'adjacencies.txt'), 40 | 'r')): 41 | adj = {} 42 | for x in l.strip().split(','): 43 | if x != '': 44 | j, edge = x.strip().split(' edge ') 45 | adj[int(j)] = int(edge) 46 | adjacencies[i] = adj 47 | 48 | vertex_t = {} 49 | init_params = [] 50 | junctions = {} 51 | vertex_idxs = np.zeros( 52 | [len(open(os.path.join( 53 | 'templates', args.category, 'vertices.txt'), 'r').readlines()), 3], 54 | dtype=np.int64) 55 | processed_vertices = [] 56 | for i, l in enumerate( 57 | open(os.path.join('templates', args.category, 'vertices.txt'), 58 | 'r')): 59 | value = l.strip().split(' ') 60 | if value[0] == 'Junction': 61 | v_type, v0, v1, v2, v3, t_init = value 62 | vertex_t[i] = len(init_params) 63 | init_params.append(utils.logit(float(t_init))) 64 | junctions[i] = (int(v0), int(v1), int(v2), int(v3)) 65 | elif value[0] == 'RegularVertex': 66 | _, a, b, c = value 67 | vertex_idxs[i] = [len(init_params), len( 68 | init_params)+1, len(init_params)+2] 69 | init_params.extend([float(a), float(b), float(c)]) 70 | processed_vertices.append(i) 71 | 72 | edge_data_ = defaultdict(list) 73 | processed_edges = [] 74 | for i in junction_order: 75 | processed_vertices.append(i) 76 | for a, b, c, d in edge_data: 77 | if a in processed_vertices and \ 78 | d in processed_vertices and \ 79 | (a, b, c, d) not in processed_edges: 80 | edge_data_[i].append((a, b, c, d)) 81 | processed_edges.append((a, b, c, d)) 82 | edge_data = edge_data_ 83 | 84 | face_idxs = np.empty([len(topology), 12]) 85 | for i, patch in enumerate(topology): 86 | for j, k in enumerate(patch): 87 | face_idxs[i, j] = k 88 | face_idxs = th.from_numpy(face_idxs.astype(np.int64)) 89 | 90 | init_params = th.tensor(init_params).squeeze().float() 91 | 92 | model = ReconstructionModel(len(init_params), init=init_params) 93 | model.to(device) 94 | model.eval() 95 | 96 | checkpointer = ttools.Checkpointer(f'models/{args.category}', model) 97 | extras, _ = checkpointer.load_latest() 98 | if extras is not None: 99 | print(f"Loaded checkpoint (epoch {extras['epoch']})") 100 | else: 101 | print("Unable to load checkpoint") 102 | 103 | with th.no_grad(): 104 | im = to_tensor(Image.open(args.input).convert('RGB')).to(device) 105 | params = model(im[None, None]) 106 | _, patches = utils.process_patches( 107 | params, vertex_idxs, face_idxs, edge_data, 108 | junctions, junction_order, vertex_t) 109 | if args.category == 'airplanes': 110 | if args.turbines: 111 | patches = patches.squeeze(0)[turbine_idxs] 112 | else: 113 | patches = patches.squeeze(0)[no_turbine_idxs] 114 | else: 115 | patches = patches.squeeze(0) 116 | utils.write_obj(args.output, patches) 117 | 118 | 119 | if __name__ == '__main__': 120 | parser = argparse.ArgumentParser() 121 | parser.add_argument("input", type=str) 122 | parser.add_argument("category", choices=[ 123 | 'airplanes', 'guitars', 'bathtubs', 'knives', 'cars', 124 | 'bottles', 'guns', 'mugs'], default='airplanes') 125 | parser.add_argument("output", type=str) 126 | parser.add_argument("--cuda", dest='cuda', action='store_true') 127 | parser.add_argument("--no_cuda", dest='cuda', action='store_false') 128 | parser.add_argument("--turbines", dest='cuda', action='store_true') 129 | parser.add_argument("--no_turbines", dest='cuda', action='store_false') 130 | parser.set_defaults(cuda=True, turbines=True) 131 | args = parser.parse_args() 132 | main(args) 133 | -------------------------------------------------------------------------------- /scripts/train.py: -------------------------------------------------------------------------------- 1 | import ast 2 | from collections import defaultdict 3 | import datetime 4 | import os 5 | import logging 6 | 7 | import numpy as np 8 | import torch as th 9 | from torch.utils.data import DataLoader 10 | from torch.utils.tensorboard import SummaryWriter 11 | import ttools 12 | 13 | from learningpatches import datasets 14 | from learningpatches.interfaces import ReconstructionInterface 15 | from learningpatches.models import ReconstructionModel 16 | from learningpatches import utils 17 | 18 | 19 | LOG = logging.getLogger(__name__) 20 | 21 | th.manual_seed(123) 22 | th.backends.cudnn.deterministic = True 23 | th.backends.cudnn.benchmark = True 24 | np.random.seed(123) 25 | 26 | 27 | def _worker_init_fn(worker_id): 28 | np.random.seed(worker_id) 29 | 30 | 31 | def main(args): 32 | data = datasets.SketchDataset(args) 33 | dataloader = DataLoader(data, batch_size=args.bs, 34 | num_workers=args.num_worker_threads, 35 | worker_init_fn=_worker_init_fn, shuffle=True, 36 | drop_last=True) 37 | LOG.info(data) 38 | 39 | val_data = datasets.SketchDataset(args, val=True) 40 | val_dataloader = DataLoader(val_data, batch_size=args.bs, 41 | num_workers=args.num_worker_threads, 42 | worker_init_fn=_worker_init_fn) 43 | 44 | edge_data = [line.strip().split(' ') for line in open( 45 | os.path.join(args.template_dir, 'edges.txt'), 'r')] 46 | edge_data = [(int(a), int(b), int(c), int(d)) for a, b, c, d in edge_data] 47 | junction_order = [int(line.strip()) for line in open( 48 | os.path.join(args.template_dir, 'junction_order.txt'), 'r')] 49 | topology = ast.literal_eval( 50 | open(os.path.join(args.template_dir, 'topology.txt'), 'r').read()) 51 | adjacencies = {} 52 | for i, l in enumerate( 53 | open(os.path.join(args.template_dir, 'adjacencies.txt'), 'r')): 54 | adj = {} 55 | for x in l.strip().split(','): 56 | if x != '': 57 | j, edge = x.strip().split(' edge ') 58 | adj[int(j)] = int(edge) 59 | adjacencies[i] = adj 60 | 61 | vertex_t = {} 62 | init_params = [] 63 | junctions = {} 64 | vertex_idxs = np.zeros( 65 | [len(open(os.path.join( 66 | args.template_dir, 'vertices.txt'), 'r').readlines()), 3], 67 | dtype=np.int64) 68 | processed_vertices = [] 69 | for i, l in enumerate( 70 | open(os.path.join(args.template_dir, 'vertices.txt'), 'r')): 71 | value = l.strip().split(' ') 72 | if value[0] == 'Junction': 73 | v_type, v0, v1, v2, v3, t_init = value 74 | vertex_t[i] = len(init_params) 75 | init_params.append(utils.logit(float(t_init))) 76 | junctions[i] = (int(v0), int(v1), int(v2), int(v3)) 77 | elif value[0] == 'RegularVertex': 78 | _, a, b, c = value 79 | vertex_idxs[i] = [len(init_params), len( 80 | init_params)+1, len(init_params)+2] 81 | init_params.extend([float(a), float(b), float(c)]) 82 | processed_vertices.append(i) 83 | 84 | edge_data_ = defaultdict(list) 85 | processed_edges = [] 86 | for i in junction_order: 87 | processed_vertices.append(i) 88 | for a, b, c, d in edge_data: 89 | if a in processed_vertices and \ 90 | d in processed_vertices and \ 91 | (a, b, c, d) not in processed_edges: 92 | edge_data_[i].append((a, b, c, d)) 93 | processed_edges.append((a, b, c, d)) 94 | edge_data = edge_data_ 95 | 96 | face_idxs = np.empty([len(topology), 12]) 97 | for i, patch in enumerate(topology): 98 | for j, k in enumerate(patch): 99 | face_idxs[i, j] = k 100 | face_idxs = th.from_numpy(face_idxs.astype(np.int64)) 101 | 102 | init_params = th.tensor(init_params).squeeze() 103 | init_patches = utils.process_patches( 104 | init_params[None], vertex_idxs, face_idxs, edge_data, junctions, 105 | junction_order, vertex_t)[1][0] 106 | st = th.empty(init_patches.shape[0], 1, 2).fill_(0.5).to(init_params) 107 | template_normals = utils.coons_normals( 108 | st[..., 0], st[..., 1], init_patches) 109 | 110 | model = ReconstructionModel(len(init_params), init=init_params) 111 | 112 | if args.symmetries: 113 | xs, ys = [], [] 114 | for line in open(os.path.join(args.data, 'symmetries.txt'), 'r'): 115 | x, y = line.strip().split(' ') 116 | xs.append(int(x)) 117 | ys.append(int(y)) 118 | symmetries = (xs, ys) 119 | else: 120 | symmetries = None 121 | interface = ReconstructionInterface( 122 | model, args, vertex_idxs, face_idxs, junctions, edge_data, vertex_t, 123 | adjacencies, junction_order, template_normals, symmetries) 124 | checkpointer = ttools.Checkpointer( 125 | args.checkpoint_dir, model=model, optimizers=interface.optimizer) 126 | extras, meta = checkpointer.load_latest() 127 | 128 | keys = ['loss', 'chamferloss', 'normalsloss', 'collisionloss', 129 | 'planarloss', 'templatenormalsloss', 'symmetryloss'] 130 | 131 | writer = SummaryWriter( 132 | os.path.join(args.checkpoint_dir, 'summaries', 133 | datetime.datetime.now().strftime('train-%m%d%y-%H%M%S')), 134 | flush_secs=1) 135 | val_writer = SummaryWriter( 136 | os.path.join(args.checkpoint_dir, 'summaries', 137 | datetime.datetime.now().strftime('val-%m%d%y-%H%M%S')), 138 | flush_secs=1) 139 | 140 | trainer = ttools.Trainer(interface) 141 | trainer.add_callback( 142 | ttools.callbacks.TensorBoardLoggingCallback(keys=keys, writer=writer, 143 | val_writer=val_writer, 144 | frequency=5)) 145 | trainer.add_callback(ttools.callbacks.ProgressBarCallback(keys=keys)) 146 | trainer.add_callback(ttools.callbacks.CheckpointingCallback( 147 | checkpointer, max_files=1, max_epochs=2)) 148 | 149 | starting_epoch = extras['epoch'] if extras is not None else None 150 | trainer.train(dataloader, num_epochs=args.num_epochs, 151 | val_dataloader=val_dataloader, starting_epoch=starting_epoch) 152 | 153 | 154 | if __name__ == '__main__': 155 | parser = ttools.BasicArgumentParser() 156 | parser.add_argument("--im_size", type=int, default=128) 157 | parser.add_argument("--template_dir", type=str) 158 | parser.add_argument("--w_normals", type=float, default=0.008) 159 | parser.add_argument("--w_collision", type=float, default=1e-5) 160 | parser.add_argument("--sigma_collision", type=float, default=1e-6) 161 | parser.add_argument("--w_planar", type=float, default=2) 162 | parser.add_argument("--w_templatenormals", type=float, default=1e-4) 163 | parser.add_argument("--w_symmetry", type=float, default=1) 164 | parser.add_argument("--n_samples", type=int, default=7000) 165 | parser.add_argument("--n_views", type=int, default=4) 166 | parser.add_argument('--seperate-turbines', 167 | dest='seperate_turbines', action='store_true') 168 | parser.add_argument('--no-seperate-turbines', 169 | dest='seperate_turbines', action='store_false') 170 | parser.add_argument('--wheels', dest='wheels', action='store_true') 171 | parser.add_argument('--no-wheels', dest='wheels', action='store_false') 172 | parser.add_argument('--p2m', dest='p2m', action='store_true') 173 | parser.add_argument('--no-p2m', dest='p2m', action='store_false') 174 | parser.add_argument('--symmetries', dest='symmetries', action='store_true') 175 | parser.add_argument('--no-symmetries', 176 | dest='symmetries', action='store_false') 177 | parser.set_defaults(seperate_turbines=False, wheels=False, p2m=False, 178 | symmetries=False, num_worker_threads=8, lr=1e-4, bs=8) 179 | args = parser.parse_args() 180 | ttools.set_logger(args.debug) 181 | main(args) 182 | -------------------------------------------------------------------------------- /templates/airplanes/adjacencies.txt: -------------------------------------------------------------------------------- 1 | 2 edge 2, 4 edge 1, 41 edge 3, 42 edge 0, 51 edge 3, 67 edge 0, 2 | 2 edge 3, 3 edge 2, 4 edge 0, 41 edge 3, 67 edge 1, 3 | 0 edge 3, 1 edge 1, 3 edge 2, 4 edge 0, 41 edge 2, 51 edge 3, 4 | 1 edge 1, 2 edge 1, 26 edge 3, 36 edge 1, 41 edge 1, 48 edge 3, 54 edge 1, 56 edge 0, 67 edge 2, 5 | 0 edge 3, 1 edge 1, 2 edge 2, 67 edge 0, 6 | 7 edge 2, 9 edge 3, 18 edge 2, 23 edge 1, 50 edge 0, 65 edge 1, 7 | 7 edge 3, 9 edge 2, 18 edge 0, 43 edge 0, 50 edge 1, 8 | 5 edge 3, 6 edge 1, 9 edge 2, 18 edge 0, 23 edge 0, 43 edge 1, 9 | 40 edge 3, 42 edge 2, 44 edge 0, 48 edge 1, 49 edge 2, 65 edge 3, 10 | 5 edge 2, 6 edge 0, 7 edge 3, 50 edge 1, 11 | 12 edge 0, 16 edge 1, 24 edge 3, 47 edge 2, 55 edge 1, 66 edge 2, 73 edge 1 12 | 31 edge 1, 32 edge 1, 33 edge 2, 37 edge 2, 39 edge 0, 57 edge 3, 60 edge 1, 64 edge 0, 74 edge 1 13 | 10 edge 1, 16 edge 1, 20 edge 3, 24 edge 2, 28 edge 0, 38 edge 0, 55 edge 0, 72 edge 0, 73 edge 0 14 | 38 edge 3, 55 edge 2, 59 edge 0, 63 edge 1, 15 | 17 edge 2, 19 edge 3, 21 edge 0, 58 edge 2, 61 edge 1, 70 edge 1, 75 edge 1 16 | 41 edge 3, 42 edge 3, 45 edge 1, 49 edge 2, 51 edge 3, 54 edge 0, 59 edge 1, 63 edge 1, 17 | 10 edge 1, 12 edge 2, 36 edge 0, 47 edge 1, 54 edge 0, 55 edge 2, 63 edge 3, 66 edge 1, 73 edge 1 18 | 14 edge 0, 19 edge 3, 25 edge 2, 33 edge 2, 37 edge 2, 58 edge 1, 70 edge 1, 74 edge 1, 75 edge 1 19 | 5 edge 1, 6 edge 1, 7 edge 1, 22 edge 2, 23 edge 1, 43 edge 0, 68 edge 3, 20 | 14 edge 0, 17 edge 1, 21 edge 3, 25 edge 1, 34 edge 2, 21 | 12 edge 1, 24 edge 2, 28 edge 0, 30 edge 3, 38 edge 1, 55 edge 1, 72 edge 0, 73 edge 0 22 | 14 edge 0, 19 edge 1, 32 edge 3, 34 edge 2, 60 edge 3, 61 edge 3, 70 edge 0, 74 edge 3, 75 edge 3 23 | 18 edge 1, 23 edge 1, 49 edge 2, 57 edge 0, 62 edge 0, 64 edge 3, 65 edge 2, 68 edge 0, 24 | 5 edge 0, 7 edge 0, 18 edge 3, 22 edge 2, 49 edge 2, 50 edge 1, 65 edge 1, 25 | 10 edge 0, 12 edge 3, 20 edge 3, 30 edge 2, 66 edge 1, 26 | 17 edge 0, 19 edge 3, 33 edge 1, 34 edge 2, 37 edge 1, 58 edge 1, 74 edge 0, 75 edge 0 27 | 3 edge 3, 40 edge 1, 43 edge 1, 44 edge 0, 48 edge 3, 50 edge 1, 56 edge 2, 67 edge 3, 28 | 28 edge 1, 29 edge 3, 30 edge 2, 38 edge 1, 52 edge 0, 53 edge 0, 72 edge 0 29 | 12 edge 2, 20 edge 2, 27 edge 0, 30 edge 3, 38 edge 1, 53 edge 1, 55 edge 2, 72 edge 1, 73 edge 1 30 | 27 edge 1, 30 edge 2, 47 edge 0, 52 edge 0, 53 edge 1, 66 edge 3, 72 edge 0, 73 edge 0 31 | 20 edge 3, 24 edge 0, 27 edge 2, 28 edge 3, 29 edge 1, 66 edge 1, 32 | 11 edge 0, 32 edge 1, 33 edge 3, 34 edge 2, 37 edge 0, 60 edge 1, 74 edge 0 33 | 11 edge 1, 21 edge 2, 31 edge 0, 34 edge 3, 60 edge 1, 61 edge 2, 74 edge 1, 75 edge 1 34 | 11 edge 1, 17 edge 0, 25 edge 3, 31 edge 1, 34 edge 2, 37 edge 0, 58 edge 0, 74 edge 0, 75 edge 0 35 | 19 edge 0, 21 edge 3, 25 edge 1, 31 edge 2, 32 edge 3, 33 edge 1, 36 | 37 edge 1, 57 edge 0, 58 edge 2, 62 edge 3, 37 | 3 edge 2, 16 edge 1, 47 edge 1, 52 edge 1, 54 edge 1, 56 edge 3, 63 edge 1, 69 edge 0, 38 | 11 edge 1, 17 edge 2, 25 edge 2, 31 edge 1, 33 edge 1, 35 edge 3, 57 edge 0, 58 edge 2, 74 edge 1, 75 edge 1 39 | 12 edge 3, 13 edge 1, 20 edge 3, 27 edge 3, 28 edge 3, 53 edge 3, 55 edge 2, 59 edge 0, 72 edge 3, 73 edge 3 40 | 11 edge 3, 46 edge 3, 49 edge 0, 56 edge 2, 57 edge 3, 60 edge 3, 61 edge 3, 64 edge 3, 71 edge 1, 41 | 8 edge 2, 26 edge 0, 43 edge 0, 44 edge 1, 49 edge 3, 50 edge 3, 65 edge 3, 42 | 0 edge 3, 1 edge 0, 2 edge 3, 3 edge 0, 15 edge 2, 51 edge 3, 54 edge 1, 43 | 0 edge 1, 8 edge 3, 15 edge 2, 48 edge 3, 49 edge 2, 51 edge 1, 67 edge 0, 44 | 6 edge 3, 7 edge 3, 18 edge 3, 26 edge 1, 40 edge 2, 46 edge 3, 50 edge 2, 56 edge 0, 68 edge 3, 45 | 8 edge 2, 26 edge 0, 40 edge 3, 48 edge 1, 46 | 15 edge 0, 49 edge 3, 53 edge 2, 54 edge 1, 59 edge 1, 63 edge 1, 69 edge 2, 47 | 39 edge 0, 43 edge 2, 56 edge 1, 60 edge 0, 61 edge 3, 62 edge 3, 68 edge 3, 70 edge 3, 48 | 10 edge 1, 16 edge 1, 29 edge 0, 36 edge 2, 52 edge 3, 66 edge 0, 69 edge 3, 72 edge 0, 73 edge 0 49 | 3 edge 1, 8 edge 2, 26 edge 0, 42 edge 1, 44 edge 3, 49 edge 2, 67 edge 1, 50 | 8 edge 0, 15 edge 1, 22 edge 3, 23 edge 0, 39 edge 3, 40 edge 0, 42 edge 0, 45 edge 1, 48 edge 0, 51 edge 1, 64 edge 3, 65 edge 0, 69 edge 1, 71 edge 2, 51 | 5 edge 3, 6 edge 1, 9 edge 0, 23 edge 3, 26 edge 2, 40 edge 2, 43 edge 1, 65 edge 3, 52 | 0 edge 1, 2 edge 2, 15 edge 3, 41 edge 2, 42 edge 0, 49 edge 0, 67 edge 1, 53 | 27 edge 1, 29 edge 1, 36 edge 3, 47 edge 2, 53 edge 0, 66 edge 2, 69 edge 3, 72 edge 1, 73 edge 1 54 | 27 edge 3, 28 edge 3, 29 edge 3, 38 edge 2, 45 edge 1, 52 edge 3, 59 edge 1, 69 edge 0, 72 edge 3 55 | 3 edge 1, 15 edge 0, 16 edge 3, 36 edge 2, 41 edge 0, 45 edge 0, 59 edge 0, 63 edge 3, 56 | 10 edge 1, 12 edge 1, 13 edge 3, 16 edge 1, 20 edge 2, 28 edge 2, 38 edge 2, 63 edge 0, 72 edge 1, 73 edge 1 57 | 3 edge 0, 26 edge 0, 36 edge 3, 39 edge 1, 43 edge 0, 46 edge 1, 69 edge 3, 71 edge 2, 58 | 11 edge 3, 22 edge 2, 35 edge 0, 37 edge 3, 39 edge 3, 62 edge 1, 64 edge 2, 68 edge 2, 59 | 14 edge 3, 17 edge 3, 25 edge 3, 33 edge 3, 35 edge 1, 37 edge 2, 62 edge 0, 70 edge 3, 74 edge 3, 75 edge 3 60 | 13 edge 0, 15 edge 3, 38 edge 1, 45 edge 2, 53 edge 1, 54 edge 3, 63 edge 3, 69 edge 2, 61 | 11 edge 0, 21 edge 3, 31 edge 0, 32 edge 3, 39 edge 1, 46 edge 2, 61 edge 2, 74 edge 3, 75 edge 3 62 | 14 edge 2, 21 edge 2, 32 edge 3, 39 edge 0, 46 edge 0, 60 edge 3, 70 edge 1, 74 edge 2, 75 edge 2 63 | 22 edge 3, 35 edge 0, 46 edge 2, 57 edge 3, 58 edge 1, 64 edge 3, 68 edge 2, 70 edge 1, 64 | 13 edge 0, 15 edge 2, 16 edge 3, 36 edge 3, 45 edge 2, 54 edge 2, 55 edge 3, 59 edge 1, 65 | 11 edge 3, 22 edge 0, 39 edge 2, 49 edge 1, 57 edge 3, 62 edge 0, 68 edge 0, 66 | 5 edge 0, 8 edge 2, 22 edge 3, 23 edge 3, 40 edge 1, 49 edge 2, 50 edge 0, 67 | 10 edge 0, 16 edge 1, 24 edge 3, 29 edge 1, 30 edge 2, 47 edge 1, 52 edge 1, 72 edge 1, 73 edge 1 68 | 0 edge 1, 1 edge 3, 3 edge 3, 4 edge 0, 26 edge 3, 42 edge 1, 48 edge 2, 51 edge 1, 69 | 18 edge 0, 22 edge 0, 43 edge 3, 46 edge 2, 57 edge 1, 62 edge 1, 64 edge 1, 70 edge 2, 70 | 36 edge 1, 45 edge 1, 47 edge 1, 49 edge 0, 52 edge 1, 53 edge 1, 56 edge 2, 59 edge 1, 71 edge 3, 71 | 14 edge 3, 17 edge 3, 21 edge 3, 46 edge 0, 58 edge 2, 61 edge 3, 62 edge 1, 68 edge 1, 75 edge 3 72 | 39 edge 2, 49 edge 3, 56 edge 1, 69 edge 0, 73 | 73 edge 3, 53 edge 1, 55 edge 3, 47 edge 3, 52 edge 0, 38 edge 2, 27 edge 1, 28 edge 2, 20 edge 2, 12 edge 2, 66 edge 0, 29 edge 0 74 | 72 edge 0, 16 edge 2, 38 edge 0, 52 edge 0, 47 edge 3, 55 edge 1, 10 edge 2, 12 edge 1, 20 edge 1, 28 edge 1, 66 edge 3, 29 edge 3 75 | 75 edge 2, 61 edge 2, 58 edge 2, 11 edge 0, 37 edge 3, 60 edge 1, 31 edge 0, 33 edge 3, 25 edge 3, 17 edge 3, 32 edge 1, 21 edge 1 76 | 74 edge 3, 70 edge 1, 58 edge 2, 37 edge 2, 60 edge 3, 61 edge 0, 21 edge 0, 32 edge 0, 14 edge 1, 17 edge 2, 25 edge 2, 33 edge 2 77 | -------------------------------------------------------------------------------- /templates/airplanes/edges.txt: -------------------------------------------------------------------------------- 1 | 0 1 2 3 2 | 15 16 17 18 3 | 18 19 20 21 4 | 21 26 27 9 5 | 28 29 30 31 6 | 18 34 35 36 7 | 36 37 38 28 8 | 41 42 43 44 9 | 53 54 55 56 10 | 56 57 58 59 11 | 47 65 66 53 12 | 75 76 77 78 13 | 86 87 88 89 14 | 95 96 97 98 15 | 101 102 103 104 16 | 104 105 106 95 17 | 107 108 109 86 18 | 83 110 111 112 19 | 130 131 132 133 20 | 139 140 141 142 21 | 145 146 147 148 22 | 151 152 153 154 23 | 86 157 158 159 24 | 159 160 161 151 25 | 133 162 163 164 26 | 167 168 169 136 27 | 170 171 172 53 28 | 175 176 177 178 29 | 178 179 180 170 30 | 112 192 193 194 31 | 194 195 196 189 32 | 186 197 198 199 33 | 202 203 204 178 34 | 207 208 209 210 35 | 207 215 216 175 36 | 175 217 218 47 37 | 228 229 230 183 38 | 183 231 232 167 39 | 239 240 241 28 40 | 244 245 246 247 41 | 247 256 257 107 42 | 189 258 259 250 43 | 253 263 264 265 44 | 265 266 267 260 45 | 101 272 273 274 46 | 285 286 287 199 47 | 199 288 289 277 48 | 164 290 291 101 49 | 280 292 293 228 50 | 310 311 312 313 51 | 316 317 318 31 52 | 31 319 320 310 53 | 301 321 322 104 54 | 327 328 329 115 55 | 334 335 336 337 56 | 340 341 342 343 57 | 346 347 348 236 58 | 21 353 354 355 59 | 355 356 357 139 60 | 139 358 359 360 61 | 363 364 365 0 62 | 148 368 369 75 63 | 75 370 371 363 64 | 372 373 374 239 65 | 239 375 376 346 66 | 346 377 378 56 67 | 385 386 387 388 68 | 388 389 390 145 69 | 391 392 393 343 70 | 343 394 395 372 71 | 372 396 397 398 72 | 260 401 402 89 73 | 89 403 404 154 74 | 154 405 406 313 75 | 233 409 410 36 76 | 346 424 425 426 77 | 9 429 430 360 78 | 360 431 432 148 79 | 433 434 435 244 80 | 313 436 437 433 81 | 433 438 439 385 82 | 385 440 441 327 83 | 327 442 443 247 84 | 355 448 449 316 85 | 316 450 451 151 86 | 121 454 455 159 87 | 473 474 475 307 88 | 274 482 483 98 89 | 98 484 485 391 90 | 391 488 489 490 91 | 490 491 492 130 92 | 130 493 494 285 93 | 210 502 503 334 94 | 334 504 505 95 95 | 44 506 507 426 96 | 426 508 509 78 97 | 78 510 511 207 98 | 265 514 515 221 99 | 363 518 519 36 100 | 497 524 525 398 101 | 398 526 527 170 102 | 417 528 529 388 103 | 310 532 533 464 104 | 490 536 537 497 105 | 497 538 539 473 106 | 473 540 541 133 107 | -------------------------------------------------------------------------------- /templates/airplanes/junction_order.txt: -------------------------------------------------------------------------------- 1 | 388 2 | 310 3 | 385 4 | 145 5 | 334 6 | 343 7 | 210 8 | 95 9 | 327 10 | 433 11 | 247 12 | 104 13 | 101 14 | 228 15 | 189 16 | 244 17 | 239 18 | 28 19 | 36 20 | 75 21 | 363 22 | 0 23 | 346 24 | 78 25 | 426 26 | 44 27 | 56 28 | 391 29 | 398 30 | 170 31 | 497 32 | 473 33 | 490 34 | 133 35 | 178 36 | 130 37 | 199 38 | 285 39 | 112 40 | 167 41 | 53 42 | 175 43 | 47 44 | 98 45 | 274 46 | 18 47 | 313 48 | 316 49 | 151 50 | 159 51 | 86 52 | 355 53 | 139 54 | 21 55 | 360 56 | 9 57 | 154 58 | 89 59 | 265 60 | 260 61 | -------------------------------------------------------------------------------- /templates/airplanes/topology.txt: -------------------------------------------------------------------------------- 1 | [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ], 2 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, ], 3 | [6, 24, 25, 12, 23, 22, 21, 26, 27, 9, 8, 7, ], 4 | [28, 29, 30, 31, 32, 33, 18, 34, 35, 36, 37, 38, ], 5 | [3, 39, 40, 15, 14, 13, 12, 25, 24, 6, 5, 4, ], 6 | [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, ], 7 | [53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, ], 8 | [47, 65, 66, 53, 64, 63, 62, 67, 68, 50, 49, 48, ], 9 | [69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, ], 10 | [62, 61, 60, 59, 81, 82, 41, 52, 51, 50, 68, 67, ], 11 | [83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, ], 12 | [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, ], 13 | [107, 108, 109, 86, 85, 84, 83, 110, 111, 112, 113, 114, ], 14 | [115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, ], 15 | [127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, ], 16 | [139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, ], 17 | [151, 152, 153, 154, 155, 156, 86, 157, 158, 159, 160, 161, ], 18 | [136, 135, 134, 133, 162, 163, 164, 165, 166, 167, 168, 169, ], 19 | [170, 171, 172, 53, 173, 174, 175, 176, 177, 178, 179, 180, ], 20 | [127, 138, 137, 136, 181, 182, 183, 184, 185, 186, 187, 188, ], 21 | [189, 190, 191, 107, 114, 113, 112, 192, 193, 194, 195, 196, ], 22 | [130, 129, 128, 127, 188, 187, 186, 197, 198, 199, 200, 201, ], 23 | [202, 203, 204, 178, 205, 206, 207, 208, 209, 210, 211, 212, ], 24 | [47, 46, 45, 44, 213, 214, 207, 215, 216, 175, 217, 218, ], 25 | [83, 94, 93, 92, 219, 220, 221, 222, 223, 194, 224, 225, ], 26 | [167, 166, 165, 164, 226, 227, 228, 229, 230, 183, 231, 232, ], 27 | [233, 234, 235, 236, 237, 238, 239, 240, 241, 28, 242, 243, ], 28 | [244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, ], 29 | [250, 249, 248, 247, 256, 257, 107, 191, 190, 189, 258, 259, ], 30 | [260, 261, 262, 244, 255, 254, 253, 263, 264, 265, 266, 267, ], 31 | [194, 223, 222, 221, 268, 269, 253, 252, 251, 250, 270, 271, ], 32 | [101, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, ], 33 | [277, 276, 275, 274, 283, 284, 285, 286, 287, 199, 288, 289, ], 34 | [164, 290, 291, 101, 282, 281, 280, 292, 293, 228, 227, 226, ], 35 | [186, 185, 184, 183, 294, 295, 280, 279, 278, 277, 296, 297, ], 36 | [298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, ], 37 | [310, 311, 312, 313, 314, 315, 316, 317, 318, 31, 319, 320, ], 38 | [301, 321, 322, 104, 323, 324, 164, 325, 326, 304, 303, 302, ], 39 | [327, 328, 329, 115, 126, 125, 124, 330, 331, 107, 332, 333, ], 40 | [334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, ], 41 | [346, 347, 348, 236, 349, 350, 69, 80, 79, 78, 351, 352, ], 42 | [21, 353, 354, 355, 356, 357, 139, 358, 359, 360, 361, 362, ], 43 | [363, 364, 365, 0, 366, 367, 148, 368, 369, 75, 370, 371, ], 44 | [372, 373, 374, 239, 375, 376, 346, 377, 378, 56, 379, 380, ], 45 | [236, 235, 234, 233, 381, 382, 72, 71, 70, 69, 350, 349, ], 46 | [145, 144, 143, 142, 383, 384, 385, 386, 387, 388, 389, 390, ], 47 | [391, 392, 393, 343, 394, 395, 372, 396, 397, 398, 399, 400, ], 48 | [260, 401, 402, 89, 403, 404, 154, 405, 406, 313, 407, 408, ], 49 | [233, 409, 410, 36, 411, 412, 75, 74, 73, 72, 382, 381, ], 50 | [207, 413, 414, 148, 415, 416, 417, 418, 419, 337, 420, 421, ], 51 | [41, 82, 81, 59, 422, 423, 346, 424, 425, 426, 427, 428, ], 52 | [148, 367, 366, 0, 11, 10, 9, 429, 430, 360, 431, 432, ], 53 | [433, 434, 435, 244, 262, 261, 260, 408, 407, 313, 436, 437, ], 54 | [433, 438, 439, 385, 440, 441, 327, 442, 443, 247, 444, 445, ], 55 | [142, 446, 447, 355, 448, 449, 316, 450, 451, 151, 452, 453, ], 56 | [121, 454, 455, 159, 456, 457, 107, 331, 330, 124, 123, 122, ], 57 | [31, 458, 459, 372, 460, 461, 340, 462, 463, 464, 465, 466, ], 58 | [301, 300, 299, 298, 467, 468, 202, 469, 470, 95, 471, 472, ], 59 | [473, 474, 475, 307, 306, 305, 304, 326, 325, 164, 476, 477, ], 60 | [118, 117, 116, 115, 478, 479, 385, 384, 383, 142, 480, 481, ], 61 | [274, 482, 483, 98, 484, 485, 391, 486, 487, 285, 284, 283, ], 62 | [391, 488, 489, 490, 491, 492, 130, 493, 494, 285, 487, 486, ], 63 | [298, 309, 308, 307, 495, 496, 497, 498, 499, 202, 468, 467, ], 64 | [121, 120, 119, 118, 481, 480, 142, 453, 452, 151, 500, 501, ], 65 | [202, 212, 211, 210, 502, 503, 334, 504, 505, 95, 470, 469, ], 66 | [44, 506, 507, 426, 508, 509, 78, 510, 511, 207, 214, 213, ], 67 | [92, 91, 90, 89, 512, 513, 265, 514, 515, 221, 220, 219, ], 68 | [15, 40, 39, 3, 516, 517, 363, 518, 519, 36, 520, 521, ], 69 | [170, 522, 523, 202, 499, 498, 497, 524, 525, 398, 526, 527, ], 70 | [417, 528, 529, 388, 530, 531, 310, 532, 533, 464, 534, 535, ], 71 | [490, 536, 537, 497, 538, 539, 473, 540, 541, 133, 542, 543, ], 72 | [417, 535, 534, 464, 463, 462, 340, 339, 338, 337, 419, 418, ], 73 | [260, 261, 262, 244, 245, 246, 247, 256, 257, 107, 544, 545], 74 | [260, 545, 544, 107, 108, 109, 86, 87, 88, 89, 402, 401], 75 | [101, 272, 273, 274, 283, 284, 285, 546, 547, 164, 290, 291], 76 | [285, 494, 493, 130, 131, 132, 133, 162, 163, 164, 547, 546] ] 77 | -------------------------------------------------------------------------------- /templates/airplanes/vertices.txt: -------------------------------------------------------------------------------- 1 | Junction 3 516 517 363 0.714286 2 | DependentVertex 3 | DependentVertex 4 | RegularVertex 0.11 -0.005 0.26 5 | RegularVertex 0.11 -0.005 0.26 6 | RegularVertex 0.11 -0.01 0.26 7 | RegularVertex 0.11 -0.015 0.26 8 | RegularVertex 0.085 -0.015 0.26 9 | RegularVertex 0.06 -0.015 0.26 10 | Junction 360 361 362 21 0.344828 11 | RegularVertex 0.035 -0.01 0.26 12 | RegularVertex 0.035 -0.005 0.26 13 | RegularVertex 0.11 -0.015 0.355 14 | RegularVertex 0.11 -0.01 0.355 15 | RegularVertex 0.11 -0.005 0.355 16 | RegularVertex 0.11 -0.005 0.355 17 | DependentVertex 18 | DependentVertex 19 | Junction 36 520 521 15 0.285714 20 | DependentVertex 21 | DependentVertex 22 | Junction 31 32 33 18 0.846154 23 | RegularVertex 0.06 -0.015 0.355 24 | RegularVertex 0.085 -0.015 0.355 25 | RegularVertex 0.11 -0.015 0.29 26 | RegularVertex 0.11 -0.015 0.32 27 | DependentVertex 28 | DependentVertex 29 | Junction 31 458 459 372 0.428571 30 | DependentVertex 31 | DependentVertex 32 | RegularVertex 0.035 -0.07 0.355 33 | RegularVertex 0.035 -0.045 0.355 34 | RegularVertex 0.035 -0.025 0.355 35 | DependentVertex 36 | DependentVertex 37 | Junction 28 242 243 233 0.40625 38 | DependentVertex 39 | DependentVertex 40 | RegularVertex 0.11 -0.005 0.29 41 | RegularVertex 0.11 -0.005 0.32 42 | RegularVertex -0.11 -0.005 0.26 43 | DependentVertex 44 | DependentVertex 45 | Junction 426 427 428 41 0.285714 46 | RegularVertex -0.035 -0.005 0.26 47 | RegularVertex -0.035 -0.01 0.26 48 | Junction 53 173 174 175 0.655172 49 | RegularVertex -0.06 -0.015 0.26 50 | RegularVertex -0.085 -0.015 0.26 51 | RegularVertex -0.11 -0.015 0.26 52 | RegularVertex -0.11 -0.01 0.26 53 | RegularVertex -0.11 -0.005 0.26 54 | Junction 56 379 380 372 0.153846 55 | DependentVertex 56 | DependentVertex 57 | Junction 59 422 423 346 0.714286 58 | DependentVertex 59 | DependentVertex 60 | RegularVertex -0.11 -0.005 0.355 61 | RegularVertex -0.11 -0.005 0.355 62 | RegularVertex -0.11 -0.01 0.355 63 | RegularVertex -0.11 -0.015 0.355 64 | RegularVertex -0.085 -0.015 0.355 65 | RegularVertex -0.06 -0.015 0.355 66 | DependentVertex 67 | DependentVertex 68 | RegularVertex -0.11 -0.015 0.32 69 | RegularVertex -0.11 -0.015 0.29 70 | RegularVertex -0.005 0.09 0.21 71 | RegularVertex 0.0 0.09 0.21 72 | RegularVertex 0.0 0.09 0.21 73 | RegularVertex 0.005 0.09 0.21 74 | RegularVertex 0.005 0.055 0.21 75 | RegularVertex 0.005 0.025 0.21 76 | Junction 207 413 414 148 0.571429 77 | DependentVertex 78 | DependentVertex 79 | Junction 207 413 414 148 0.428571 80 | RegularVertex -0.005 0.025 0.21 81 | RegularVertex -0.005 0.055 0.21 82 | RegularVertex -0.11 -0.005 0.32 83 | RegularVertex -0.11 -0.005 0.29 84 | RegularVertex 0.125 -0.085 -0.035 85 | RegularVertex 0.125 -0.075 -0.035 86 | RegularVertex 0.125 -0.065 -0.035 87 | Junction 159 456 457 107 0.675676 88 | DependentVertex 89 | DependentVertex 90 | Junction 154 155 156 86 0.611111 91 | RegularVertex 0.09 -0.065 -0.035 92 | RegularVertex 0.09 -0.075 -0.035 93 | RegularVertex 0.09 -0.085 -0.035 94 | RegularVertex 0.1 -0.085 -0.035 95 | RegularVertex 0.11 -0.085 -0.035 96 | Junction 343 344 345 334 0.692308 97 | DependentVertex 98 | DependentVertex 99 | Junction 343 344 345 334 0.307692 100 | RegularVertex -0.065 -0.05 -0.095 101 | RegularVertex -0.095 -0.05 -0.095 102 | Junction 104 323 324 164 0.714286 103 | DependentVertex 104 | DependentVertex 105 | Junction 95 471 472 301 0.310345 106 | DependentVertex 107 | DependentVertex 108 | RegularVertex 0.125 -0.06 -0.095 109 | DependentVertex 110 | DependentVertex 111 | DependentVertex 112 | DependentVertex 113 | Junction 194 224 225 83 0.25 114 | RegularVertex 0.125 -0.075 -0.095 115 | RegularVertex 0.125 -0.065 -0.095 116 | RegularVertex 0.325 -0.025 -0.095 117 | RegularVertex 0.325 -0.025 -0.03 118 | RegularVertex 0.325 -0.025 0.025 119 | RegularVertex 0.325 -0.025 0.09 120 | RegularVertex 0.325 -0.035 0.09 121 | RegularVertex 0.325 -0.045 0.09 122 | RegularVertex 0.325 -0.06 0.09 123 | RegularVertex 0.325 -0.06 0.025 124 | RegularVertex 0.325 -0.06 -0.03 125 | RegularVertex 0.325 -0.06 -0.095 126 | RegularVertex 0.325 -0.045 -0.095 127 | RegularVertex 0.325 -0.035 -0.095 128 | RegularVertex -0.09 -0.085 -0.035 129 | RegularVertex -0.09 -0.075 -0.035 130 | RegularVertex -0.09 -0.065 -0.035 131 | Junction 133 542 543 490 0.388889 132 | DependentVertex 133 | DependentVertex 134 | Junction 164 476 477 473 0.324324 135 | RegularVertex -0.125 -0.065 -0.035 136 | RegularVertex -0.125 -0.075 -0.035 137 | RegularVertex -0.125 -0.085 -0.035 138 | RegularVertex -0.11 -0.085 -0.035 139 | RegularVertex -0.1 -0.085 -0.035 140 | Junction 142 446 447 355 0.45283 141 | DependentVertex 142 | DependentVertex 143 | RegularVertex 0.035 -0.025 0.09 144 | RegularVertex 0.035 -0.015 0.09 145 | RegularVertex 0.035 -0.01 0.09 146 | Junction 148 415 416 417 0.212389 147 | DependentVertex 148 | DependentVertex 149 | RegularVertex 0.035 -0.005 0.21 150 | RegularVertex 0.035 -0.01 0.21 151 | RegularVertex 0.035 -0.015 0.21 152 | Junction 313 314 315 316 0.411111 153 | DependentVertex 154 | DependentVertex 155 | Junction 313 314 315 316 0.133333 156 | RegularVertex 0.065 -0.06 -0.035 157 | RegularVertex 0.095 -0.06 -0.035 158 | DependentVertex 159 | DependentVertex 160 | Junction 151 500 501 121 0.310345 161 | DependentVertex 162 | DependentVertex 163 | DependentVertex 164 | DependentVertex 165 | RegularVertex -0.125 -0.06 -0.095 166 | RegularVertex -0.125 -0.065 -0.095 167 | RegularVertex -0.125 -0.075 -0.095 168 | Junction 136 181 182 183 0.75 169 | DependentVertex 170 | DependentVertex 171 | Junction 56 379 380 372 0.307692 172 | DependentVertex 173 | DependentVertex 174 | RegularVertex -0.035 -0.015 0.305 175 | RegularVertex -0.035 -0.015 0.255 176 | Junction 178 205 206 207 0.5 177 | DependentVertex 178 | DependentVertex 179 | Junction 170 522 523 202 0.54717 180 | DependentVertex 181 | DependentVertex 182 | RegularVertex -0.125 -0.085 -0.06 183 | RegularVertex -0.125 -0.085 -0.085 184 | RegularVertex -0.125 -0.085 -0.115 185 | RegularVertex -0.11 -0.085 -0.115 186 | RegularVertex -0.1 -0.085 -0.115 187 | RegularVertex -0.09 -0.085 -0.115 188 | RegularVertex -0.09 -0.085 -0.085 189 | RegularVertex -0.09 -0.085 -0.06 190 | Junction 250 270 271 194 0.285714 191 | RegularVertex 0.125 -0.06 -0.105 192 | RegularVertex 0.125 -0.06 -0.1 193 | DependentVertex 194 | DependentVertex 195 | RegularVertex 0.125 -0.085 -0.115 196 | DependentVertex 197 | DependentVertex 198 | DependentVertex 199 | DependentVertex 200 | Junction 277 296 297 186 0.285714 201 | RegularVertex -0.09 -0.06 -0.085 202 | RegularVertex -0.09 -0.06 -0.06 203 | RegularVertex -0.035 -0.025 0.09 204 | DependentVertex 205 | DependentVertex 206 | RegularVertex -0.035 -0.015 0.21 207 | RegularVertex -0.035 -0.01 0.21 208 | RegularVertex -0.035 -0.005 0.21 209 | DependentVertex 210 | DependentVertex 211 | Junction 337 420 421 207 0.787611 212 | RegularVertex -0.035 -0.01 0.09 213 | RegularVertex -0.035 -0.015 0.09 214 | RegularVertex -0.035 -0.005 0.24 215 | RegularVertex -0.035 -0.005 0.225 216 | DependentVertex 217 | DependentVertex 218 | DependentVertex 219 | DependentVertex 220 | RegularVertex 0.09 -0.085 -0.06 221 | RegularVertex 0.09 -0.085 -0.085 222 | RegularVertex 0.09 -0.085 -0.115 223 | RegularVertex 0.1 -0.085 -0.115 224 | RegularVertex 0.11 -0.085 -0.115 225 | RegularVertex 0.125 -0.085 -0.085 226 | RegularVertex 0.125 -0.085 -0.06 227 | RegularVertex -0.125 -0.06 -0.1 228 | RegularVertex -0.125 -0.06 -0.105 229 | Junction 183 294 295 280 0.714286 230 | DependentVertex 231 | DependentVertex 232 | DependentVertex 233 | DependentVertex 234 | RegularVertex 0.005 0.09 0.355 235 | RegularVertex 0.0 0.09 0.355 236 | RegularVertex 0.0 0.09 0.355 237 | RegularVertex -0.005 0.09 0.355 238 | RegularVertex -0.005 0.035 0.355 239 | RegularVertex -0.005 -0.015 0.355 240 | Junction 31 458 459 372 0.571429 241 | DependentVertex 242 | DependentVertex 243 | RegularVertex 0.005 -0.015 0.355 244 | RegularVertex 0.005 0.035 0.355 245 | Junction 247 444 445 433 0.388889 246 | DependentVertex 247 | DependentVertex 248 | Junction 107 332 333 327 0.285714 249 | RegularVertex 0.125 -0.05 -0.1 250 | RegularVertex 0.125 -0.05 -0.105 251 | RegularVertex 0.125 -0.05 -0.115 252 | RegularVertex 0.11 -0.05 -0.115 253 | RegularVertex 0.1 -0.05 -0.115 254 | RegularVertex 0.09 -0.05 -0.115 255 | RegularVertex 0.09 -0.05 -0.105 256 | RegularVertex 0.09 -0.05 -0.1 257 | DependentVertex 258 | DependentVertex 259 | DependentVertex 260 | DependentVertex 261 | Junction 89 512 513 265 0.75 262 | RegularVertex 0.09 -0.055 -0.095 263 | RegularVertex 0.09 -0.05 -0.095 264 | DependentVertex 265 | DependentVertex 266 | Junction 221 268 269 253 0.714286 267 | DependentVertex 268 | DependentVertex 269 | RegularVertex 0.09 -0.07 -0.115 270 | RegularVertex 0.09 -0.06 -0.115 271 | RegularVertex 0.125 -0.06 -0.115 272 | RegularVertex 0.125 -0.07 -0.115 273 | DependentVertex 274 | DependentVertex 275 | Junction 98 99 100 101 0.611111 276 | RegularVertex -0.09 -0.05 -0.1 277 | RegularVertex -0.09 -0.05 -0.105 278 | RegularVertex -0.09 -0.05 -0.115 279 | RegularVertex -0.1 -0.05 -0.115 280 | RegularVertex -0.11 -0.05 -0.115 281 | RegularVertex -0.125 -0.05 -0.115 282 | RegularVertex -0.125 -0.05 -0.105 283 | RegularVertex -0.125 -0.05 -0.1 284 | RegularVertex -0.09 -0.05 -0.095 285 | RegularVertex -0.09 -0.055 -0.095 286 | Junction 199 200 201 130 0.25 287 | DependentVertex 288 | DependentVertex 289 | DependentVertex 290 | DependentVertex 291 | DependentVertex 292 | DependentVertex 293 | DependentVertex 294 | DependentVertex 295 | RegularVertex -0.125 -0.07 -0.115 296 | RegularVertex -0.125 -0.06 -0.115 297 | RegularVertex -0.09 -0.06 -0.115 298 | RegularVertex -0.09 -0.07 -0.115 299 | RegularVertex -0.325 -0.025 0.09 300 | RegularVertex -0.325 -0.025 0.025 301 | RegularVertex -0.325 -0.025 -0.03 302 | RegularVertex -0.325 -0.025 -0.095 303 | RegularVertex -0.325 -0.035 -0.095 304 | RegularVertex -0.325 -0.045 -0.095 305 | RegularVertex -0.325 -0.06 -0.095 306 | RegularVertex -0.325 -0.06 -0.03 307 | RegularVertex -0.325 -0.06 0.025 308 | RegularVertex -0.325 -0.06 0.09 309 | RegularVertex -0.325 -0.045 0.09 310 | RegularVertex -0.325 -0.035 0.09 311 | Junction 464 465 466 31 0.366197 312 | DependentVertex 313 | DependentVertex 314 | Junction 388 530 531 310 0.846154 315 | RegularVertex 0.035 -0.06 0.055 316 | RegularVertex 0.035 -0.06 0.205 317 | Junction 31 32 33 18 0.153846 318 | DependentVertex 319 | DependentVertex 320 | DependentVertex 321 | DependentVertex 322 | DependentVertex 323 | DependentVertex 324 | RegularVertex -0.125 -0.035 -0.095 325 | RegularVertex -0.125 -0.045 -0.095 326 | RegularVertex -0.19 -0.06 -0.095 327 | RegularVertex -0.255 -0.06 -0.095 328 | Junction 115 478 479 385 0.689655 329 | DependentVertex 330 | DependentVertex 331 | RegularVertex 0.255 -0.06 -0.095 332 | RegularVertex 0.19 -0.06 -0.095 333 | RegularVertex 0.125 -0.045 -0.095 334 | RegularVertex 0.125 -0.035 -0.095 335 | Junction 337 420 421 207 0.460177 336 | DependentVertex 337 | DependentVertex 338 | RegularVertex -0.035 -0.005 -0.355 339 | RegularVertex -0.035 -0.025 -0.355 340 | RegularVertex -0.035 -0.045 -0.355 341 | RegularVertex -0.035 -0.07 -0.355 342 | DependentVertex 343 | DependentVertex 344 | Junction 372 460 461 340 0.633803 345 | RegularVertex -0.035 -0.045 -0.095 346 | RegularVertex -0.035 -0.025 -0.095 347 | Junction 236 237 238 239 0.59375 348 | DependentVertex 349 | DependentVertex 350 | RegularVertex -0.005 0.09 0.305 351 | RegularVertex -0.005 0.09 0.255 352 | RegularVertex -0.005 -0.005 0.255 353 | RegularVertex -0.005 -0.005 0.305 354 | DependentVertex 355 | DependentVertex 356 | Junction 31 32 33 18 0.692308 357 | DependentVertex 358 | DependentVertex 359 | DependentVertex 360 | DependentVertex 361 | Junction 148 149 150 139 0.5 362 | RegularVertex 0.035 -0.015 0.255 363 | RegularVertex 0.035 -0.015 0.305 364 | Junction 36 411 412 75 0.655172 365 | DependentVertex 366 | DependentVertex 367 | RegularVertex 0.035 -0.005 0.24 368 | RegularVertex 0.035 -0.005 0.225 369 | DependentVertex 370 | DependentVertex 371 | DependentVertex 372 | DependentVertex 373 | RegularVertex -0.035 -0.07 0.355 374 | DependentVertex 375 | DependentVertex 376 | DependentVertex 377 | DependentVertex 378 | DependentVertex 379 | DependentVertex 380 | RegularVertex -0.035 -0.025 0.355 381 | RegularVertex -0.035 -0.045 0.355 382 | RegularVertex 0.005 0.09 0.305 383 | RegularVertex 0.005 0.09 0.255 384 | RegularVertex 0.035 -0.025 0.025 385 | RegularVertex 0.035 -0.025 -0.03 386 | Junction 388 530 531 310 0.307692 387 | DependentVertex 388 | DependentVertex 389 | Junction 148 415 416 417 0.539823 390 | DependentVertex 391 | DependentVertex 392 | Junction 343 344 345 334 0.153846 393 | DependentVertex 394 | DependentVertex 395 | DependentVertex 396 | DependentVertex 397 | DependentVertex 398 | DependentVertex 399 | Junction 56 379 380 372 0.846154 400 | RegularVertex -0.035 -0.06 0.205 401 | RegularVertex -0.035 -0.06 0.055 402 | DependentVertex 403 | DependentVertex 404 | DependentVertex 405 | DependentVertex 406 | DependentVertex 407 | DependentVertex 408 | RegularVertex 0.05 -0.06 -0.095 409 | RegularVertex 0.07 -0.06 -0.095 410 | DependentVertex 411 | DependentVertex 412 | RegularVertex 0.005 -0.005 0.305 413 | RegularVertex 0.005 -0.005 0.255 414 | RegularVertex -0.01 -0.005 0.21 415 | RegularVertex 0.01 -0.005 0.21 416 | RegularVertex 0.035 -0.005 0.02 417 | RegularVertex 0.035 -0.005 -0.165 418 | RegularVertex 0.035 -0.005 -0.355 419 | RegularVertex 0.01 -0.005 -0.355 420 | RegularVertex -0.01 -0.005 -0.355 421 | RegularVertex -0.035 -0.005 -0.165 422 | RegularVertex -0.035 -0.005 0.02 423 | RegularVertex -0.075 -0.005 0.355 424 | RegularVertex -0.04 -0.005 0.355 425 | DependentVertex 426 | DependentVertex 427 | Junction 78 351 352 346 0.344828 428 | RegularVertex -0.04 -0.005 0.26 429 | RegularVertex -0.075 -0.005 0.26 430 | DependentVertex 431 | DependentVertex 432 | DependentVertex 433 | DependentVertex 434 | Junction 388 530 531 310 0.692308 435 | DependentVertex 436 | DependentVertex 437 | DependentVertex 438 | DependentVertex 439 | DependentVertex 440 | DependentVertex 441 | DependentVertex 442 | DependentVertex 443 | DependentVertex 444 | DependentVertex 445 | RegularVertex 0.095 -0.05 -0.095 446 | RegularVertex 0.065 -0.05 -0.095 447 | RegularVertex 0.035 -0.025 0.175 448 | RegularVertex 0.035 -0.025 0.265 449 | DependentVertex 450 | DependentVertex 451 | DependentVertex 452 | DependentVertex 453 | RegularVertex 0.035 -0.045 0.09 454 | RegularVertex 0.035 -0.035 0.09 455 | DependentVertex 456 | DependentVertex 457 | RegularVertex 0.125 -0.06 0.025 458 | RegularVertex 0.125 -0.06 -0.03 459 | RegularVertex 0.01 -0.07 0.355 460 | RegularVertex -0.01 -0.07 0.355 461 | RegularVertex -0.035 -0.07 0.115 462 | RegularVertex -0.035 -0.07 -0.115 463 | RegularVertex -0.01 -0.07 -0.355 464 | RegularVertex 0.01 -0.07 -0.355 465 | RegularVertex 0.035 -0.07 -0.355 466 | RegularVertex 0.035 -0.07 -0.115 467 | RegularVertex 0.035 -0.07 0.115 468 | RegularVertex -0.225 -0.025 0.09 469 | RegularVertex -0.13 -0.025 0.09 470 | RegularVertex -0.035 -0.025 0.025 471 | RegularVertex -0.035 -0.025 -0.03 472 | RegularVertex -0.13 -0.025 -0.095 473 | RegularVertex -0.225 -0.025 -0.095 474 | Junction 307 495 496 497 0.689655 475 | DependentVertex 476 | DependentVertex 477 | RegularVertex -0.125 -0.06 -0.03 478 | RegularVertex -0.125 -0.06 0.025 479 | RegularVertex 0.225 -0.025 -0.095 480 | RegularVertex 0.13 -0.025 -0.095 481 | RegularVertex 0.13 -0.025 0.09 482 | RegularVertex 0.225 -0.025 0.09 483 | DependentVertex 484 | DependentVertex 485 | DependentVertex 486 | DependentVertex 487 | RegularVertex -0.05 -0.06 -0.095 488 | RegularVertex -0.07 -0.06 -0.095 489 | DependentVertex 490 | DependentVertex 491 | Junction 398 399 400 391 0.866667 492 | DependentVertex 493 | DependentVertex 494 | DependentVertex 495 | DependentVertex 496 | RegularVertex -0.225 -0.06 0.09 497 | RegularVertex -0.13 -0.06 0.09 498 | Junction 398 399 400 391 0.588889 499 | RegularVertex -0.035 -0.045 0.09 500 | RegularVertex -0.035 -0.035 0.09 501 | RegularVertex 0.13 -0.06 0.09 502 | RegularVertex 0.225 -0.06 0.09 503 | DependentVertex 504 | DependentVertex 505 | DependentVertex 506 | DependentVertex 507 | DependentVertex 508 | DependentVertex 509 | DependentVertex 510 | DependentVertex 511 | DependentVertex 512 | DependentVertex 513 | RegularVertex 0.09 -0.06 -0.06 514 | RegularVertex 0.09 -0.06 -0.085 515 | DependentVertex 516 | DependentVertex 517 | RegularVertex 0.075 -0.005 0.26 518 | RegularVertex 0.04 -0.005 0.26 519 | DependentVertex 520 | DependentVertex 521 | RegularVertex 0.04 -0.005 0.355 522 | RegularVertex 0.075 -0.005 0.355 523 | RegularVertex -0.035 -0.025 0.265 524 | RegularVertex -0.035 -0.025 0.175 525 | DependentVertex 526 | DependentVertex 527 | DependentVertex 528 | DependentVertex 529 | DependentVertex 530 | DependentVertex 531 | RegularVertex 0.035 -0.025 -0.095 532 | RegularVertex 0.035 -0.045 -0.095 533 | DependentVertex 534 | DependentVertex 535 | RegularVertex 0.035 -0.045 -0.355 536 | RegularVertex 0.035 -0.025 -0.355 537 | DependentVertex 538 | DependentVertex 539 | DependentVertex 540 | DependentVertex 541 | DependentVertex 542 | DependentVertex 543 | RegularVertex -0.095 -0.06 -0.035 544 | RegularVertex -0.065 -0.06 -0.035 545 | RegularVertex 0.11 -0.06 -0.095 546 | RegularVertex 0.1 -0.06 -0.095 547 | RegularVertex -0.1 -0.06 -0.095 548 | RegularVertex -0.11 -0.06 -0.095 549 | -------------------------------------------------------------------------------- /templates/bathtubs/adjacencies.txt: -------------------------------------------------------------------------------- 1 | 2 edge 3, 5 edge 2, 6 edge 0, 7 edge 0, 9 edge 3, 11 edge 1, 2 | 2 edge 1, 4 edge 3, 7 edge 0, 9 edge 2, 3 | 0 edge 1, 1 edge 3, 5 edge 2, 6 edge 1, 7 edge 0, 9 edge 2, 4 | 4 edge 1, 5 edge 2, 6 edge 0, 7 edge 1, 9 edge 2, 12 edge 3, 5 | 1 edge 2, 3 edge 0, 5 edge 0, 6 edge 1, 7 edge 1, 9 edge 3, 6 | 0 edge 3, 2 edge 3, 3 edge 3, 4 edge 3, 9 edge 3, 11 edge 0, 12 edge 2, 13 edge 1, 7 | 0 edge 1, 2 edge 1, 3 edge 1, 4 edge 1, 7 edge 1, 8 edge 3, 11 edge 0, 12 edge 2, 8 | 0 edge 1, 1 edge 2, 2 edge 1, 3 edge 0, 4 edge 3, 6 edge 0, 9 | 6 edge 1, 10 edge 3, 11 edge 0, 12 edge 2, 10 | 0 edge 1, 1 edge 3, 2 edge 0, 3 edge 2, 4 edge 2, 5 edge 1, 11 | 8 edge 1, 11 edge 0, 12 edge 2, 13 edge 3, 12 | 0 edge 1, 5 edge 1, 6 edge 1, 8 edge 2, 10 edge 3, 13 edge 0, 13 | 3 edge 3, 5 edge 3, 6 edge 3, 8 edge 2, 10 edge 1, 13 edge 0, 14 | 5 edge 3, 10 edge 1, 11 edge 0, 12 edge 2, 15 | -------------------------------------------------------------------------------- /templates/bathtubs/edges.txt: -------------------------------------------------------------------------------- 1 | 0 1 2 3 2 | 3 4 5 6 3 | 6 7 8 9 4 | 28 29 30 31 5 | 34 35 36 37 6 | 37 38 39 28 7 | 6 44 45 46 8 | 49 50 51 37 9 | 54 55 56 3 10 | 28 59 60 61 11 | 31 64 65 0 12 | 9 74 75 34 13 | -------------------------------------------------------------------------------- /templates/bathtubs/junction_order.txt: -------------------------------------------------------------------------------- 1 | 3 2 | 28 3 | 31 4 | 0 5 | 6 6 | 37 7 | 9 8 | 34 9 | -------------------------------------------------------------------------------- /templates/bathtubs/topology.txt: -------------------------------------------------------------------------------- 1 | [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ], 2 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, ], 3 | [15, 24, 25, 0, 11, 10, 9, 26, 27, 18, 17, 16, ], 4 | [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, ], 5 | [34, 33, 32, 31, 40, 41, 12, 23, 22, 21, 42, 43, ], 6 | [6, 44, 45, 46, 47, 48, 49, 50, 51, 37, 52, 53, ], 7 | [54, 55, 56, 3, 57, 58, 28, 59, 60, 61, 62, 63, ], 8 | [31, 64, 65, 0, 25, 24, 15, 14, 13, 12, 41, 40, ], 9 | [66, 67, 68, 54, 63, 62, 61, 69, 70, 71, 72, 73, ], 10 | [18, 27, 26, 9, 74, 75, 34, 43, 42, 21, 20, 19, ], 11 | [76, 77, 78, 66, 73, 72, 71, 79, 80, 81, 82, 83, ], 12 | [76, 84, 85, 46, 86, 87, 54, 68, 67, 66, 78, 77, ], 13 | [49, 88, 89, 81, 80, 79, 71, 70, 69, 61, 90, 91, ], 14 | [46, 85, 84, 76, 83, 82, 81, 89, 88, 49, 48, 47, ]] 15 | -------------------------------------------------------------------------------- /templates/bathtubs/vertices.txt: -------------------------------------------------------------------------------- 1 | Junction 3 57 58 28 0.0769231 2 | DependentVertex 3 | DependentVertex 4 | Junction 46 86 87 54 0.9 5 | DependentVertex 6 | DependentVertex 7 | Junction 46 86 87 54 0.1 8 | DependentVertex 9 | DependentVertex 10 | Junction 37 52 53 6 0.923077 11 | RegularVertex 0.275 0.14 -0.065 12 | RegularVertex 0.275 0.14 0.065 13 | RegularVertex -0.275 -0.08 0.2 14 | RegularVertex -0.09 -0.08 0.2 15 | RegularVertex 0.09 -0.08 0.2 16 | RegularVertex 0.275 -0.08 0.2 17 | RegularVertex 0.275 -0.08 0.065 18 | RegularVertex 0.275 -0.08 -0.065 19 | RegularVertex 0.275 -0.08 -0.2 20 | RegularVertex 0.09 -0.08 -0.2 21 | RegularVertex -0.09 -0.08 -0.2 22 | RegularVertex -0.275 -0.08 -0.2 23 | RegularVertex -0.275 -0.08 -0.065 24 | RegularVertex -0.275 -0.08 0.065 25 | RegularVertex 0.275 -0.005 0.2 26 | RegularVertex 0.275 0.065 0.2 27 | RegularVertex 0.275 0.065 -0.2 28 | RegularVertex 0.275 -0.005 -0.2 29 | Junction 61 90 91 49 0.1 30 | DependentVertex 31 | DependentVertex 32 | Junction 3 57 58 28 0.923077 33 | RegularVertex -0.275 0.14 0.065 34 | RegularVertex -0.275 0.14 -0.065 35 | Junction 37 52 53 6 0.0769231 36 | DependentVertex 37 | DependentVertex 38 | Junction 61 90 91 49 0.9 39 | DependentVertex 40 | DependentVertex 41 | RegularVertex -0.275 0.065 0.2 42 | RegularVertex -0.275 -0.005 0.2 43 | RegularVertex -0.275 -0.005 -0.2 44 | RegularVertex -0.275 0.065 -0.2 45 | DependentVertex 46 | DependentVertex 47 | RegularVertex 0.325 0.14 -0.25 48 | RegularVertex 0.105 0.14 -0.25 49 | RegularVertex -0.105 0.14 -0.25 50 | RegularVertex -0.325 0.14 -0.25 51 | DependentVertex 52 | DependentVertex 53 | RegularVertex -0.105 0.14 -0.2 54 | RegularVertex 0.105 0.14 -0.2 55 | RegularVertex 0.325 0.14 0.25 56 | DependentVertex 57 | DependentVertex 58 | RegularVertex 0.105 0.14 0.2 59 | RegularVertex -0.105 0.14 0.2 60 | DependentVertex 61 | DependentVertex 62 | RegularVertex -0.325 0.14 0.25 63 | RegularVertex -0.105 0.14 0.25 64 | RegularVertex 0.105 0.14 0.25 65 | DependentVertex 66 | DependentVertex 67 | RegularVertex 0.325 -0.13 0.25 68 | RegularVertex 0.325 -0.04 0.25 69 | RegularVertex 0.325 0.05 0.25 70 | RegularVertex -0.325 0.05 0.25 71 | RegularVertex -0.325 -0.04 0.25 72 | RegularVertex -0.325 -0.13 0.25 73 | RegularVertex -0.105 -0.13 0.25 74 | RegularVertex 0.105 -0.13 0.25 75 | DependentVertex 76 | DependentVertex 77 | RegularVertex 0.325 -0.13 -0.25 78 | RegularVertex 0.325 -0.13 -0.08 79 | RegularVertex 0.325 -0.13 0.08 80 | RegularVertex -0.325 -0.13 0.08 81 | RegularVertex -0.325 -0.13 -0.08 82 | RegularVertex -0.325 -0.13 -0.25 83 | RegularVertex -0.105 -0.13 -0.25 84 | RegularVertex 0.105 -0.13 -0.25 85 | RegularVertex 0.325 -0.04 -0.25 86 | RegularVertex 0.325 0.05 -0.25 87 | RegularVertex 0.325 0.14 -0.08 88 | RegularVertex 0.325 0.14 0.08 89 | RegularVertex -0.325 0.05 -0.25 90 | RegularVertex -0.325 -0.04 -0.25 91 | RegularVertex -0.325 0.14 0.08 92 | RegularVertex -0.325 0.14 -0.08 93 | -------------------------------------------------------------------------------- /templates/bottles/adjacencies.txt: -------------------------------------------------------------------------------- 1 | 2 edge 0, 3 edge 1, 4 edge 3, 8 edge 2, 10 edge 2, 12 edge 3, 2 | 2 edge 1, 3 edge 0, 4 edge 2, 5 edge 3, 10 edge 0, 12 edge 3, 3 | 0 edge 2, 1 edge 0, 3 edge 1, 4 edge 3, 4 | 0 edge 3, 1 edge 1, 2 edge 0, 5 edge 2, 8 edge 3, 10 edge 2, 5 | 0 edge 2, 1 edge 0, 2 edge 1, 5 edge 0, 8 edge 3, 12 edge 3, 6 | 1 edge 2, 3 edge 2, 4 edge 3, 7 edge 0, 10 edge 1, 12 edge 3, 7 | 7 edge 2, 11 edge 0, 12 edge 3, 13 edge 1, 8 | 5 edge 1, 6 edge 2, 9 edge 0, 10 edge 1, 12 edge 1, 13 edge 3, 9 | 0 edge 0, 3 edge 1, 4 edge 0, 10 edge 1, 11 edge 2, 12 edge 3, 10 | 7 edge 0, 10 edge 3, 11 edge 2, 13 edge 1, 11 | 0 edge 3, 1 edge 3, 3 edge 3, 5 edge 3, 7 edge 0, 8 edge 3, 9 edge 1, 11 edge 2, 12 | 6 edge 2, 8 edge 3, 9 edge 0, 10 edge 3, 12 edge 3, 13 edge 1, 13 | 0 edge 1, 1 edge 1, 4 edge 1, 5 edge 1, 6 edge 3, 7 edge 0, 8 edge 1, 11 edge 2, 14 | 6 edge 1, 7 edge 0, 9 edge 3, 11 edge 2, 15 | -------------------------------------------------------------------------------- /templates/bottles/edges.txt: -------------------------------------------------------------------------------- 1 | 12 28 29 6 2 | 9 30 31 21 3 | 32 33 34 35 4 | 35 36 37 12 5 | 21 38 39 32 6 | 6 60 61 62 7 | 62 63 64 65 8 | 65 66 67 9 9 | 35 76 77 55 10 | 73 78 79 62 11 | 49 86 87 32 12 | 65 90 91 40 13 | -------------------------------------------------------------------------------- /templates/bottles/junction_order.txt: -------------------------------------------------------------------------------- 1 | 32 2 | 65 3 | 35 4 | 62 5 | 9 6 | 6 7 | 12 8 | 21 9 | -------------------------------------------------------------------------------- /templates/bottles/topology.txt: -------------------------------------------------------------------------------- 1 | [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ], 2 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, ], 3 | [18, 17, 16, 15, 24, 25, 3, 2, 1, 0, 26, 27, ], 4 | [3, 25, 24, 15, 14, 13, 12, 28, 29, 6, 5, 4, ], 5 | [21, 20, 19, 18, 27, 26, 0, 11, 10, 9, 30, 31, ], 6 | [32, 33, 34, 35, 36, 37, 12, 23, 22, 21, 38, 39, ], 7 | [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, ], 8 | [52, 53, 54, 55, 56, 57, 49, 48, 47, 46, 58, 59, ], 9 | [9, 8, 7, 6, 60, 61, 62, 63, 64, 65, 66, 67, ], 10 | [55, 54, 53, 52, 68, 69, 70, 71, 72, 73, 74, 75, ], 11 | [35, 76, 77, 55, 75, 74, 73, 78, 79, 62, 80, 81, ], 12 | [73, 72, 71, 70, 82, 83, 43, 42, 41, 40, 84, 85, ], 13 | [49, 86, 87, 32, 88, 89, 65, 90, 91, 40, 51, 50, ], 14 | [52, 59, 58, 46, 45, 44, 43, 83, 82, 70, 69, 68, ]] 15 | -------------------------------------------------------------------------------- /templates/bottles/vertices.txt: -------------------------------------------------------------------------------- 1 | RegularVertex -0.07 0.455 -0.065 2 | RegularVertex -0.02 0.455 -0.065 3 | RegularVertex 0.02 0.455 -0.065 4 | RegularVertex 0.07 0.455 -0.065 5 | RegularVertex 0.07 0.36 -0.065 6 | RegularVertex 0.07 0.27 -0.065 7 | Junction 62 80 81 35 0.216927 8 | RegularVertex 0.02 0.18 -0.065 9 | RegularVertex -0.02 0.18 -0.065 10 | Junction 32 88 89 65 0.783073 11 | RegularVertex -0.07 0.27 -0.065 12 | RegularVertex -0.07 0.36 -0.065 13 | Junction 62 80 81 35 0.783073 14 | RegularVertex 0.07 0.27 0.065 15 | RegularVertex 0.07 0.36 0.065 16 | RegularVertex 0.07 0.455 0.065 17 | RegularVertex 0.02 0.455 0.065 18 | RegularVertex -0.02 0.455 0.065 19 | RegularVertex -0.07 0.455 0.065 20 | RegularVertex -0.07 0.36 0.065 21 | RegularVertex -0.07 0.27 0.065 22 | Junction 32 88 89 65 0.216927 23 | RegularVertex -0.02 0.18 0.065 24 | RegularVertex 0.02 0.18 0.065 25 | RegularVertex 0.07 0.455 0.02 26 | RegularVertex 0.07 0.455 -0.02 27 | RegularVertex -0.07 0.455 -0.02 28 | RegularVertex -0.07 0.455 0.02 29 | DependentVertex 30 | DependentVertex 31 | DependentVertex 32 | DependentVertex 33 | Junction 55 56 57 49 0.782378 34 | DependentVertex 35 | DependentVertex 36 | Junction 55 56 57 49 0.217622 37 | DependentVertex 38 | DependentVertex 39 | DependentVertex 40 | DependentVertex 41 | RegularVertex -0.125 0.18 -0.115 42 | RegularVertex -0.125 -0.03 -0.115 43 | RegularVertex -0.125 -0.24 -0.115 44 | RegularVertex -0.125 -0.45 -0.115 45 | RegularVertex -0.125 -0.45 -0.035 46 | RegularVertex -0.125 -0.45 0.035 47 | RegularVertex -0.125 -0.45 0.115 48 | RegularVertex -0.125 -0.24 0.115 49 | RegularVertex -0.125 -0.03 0.115 50 | RegularVertex -0.125 0.18 0.115 51 | RegularVertex -0.125 0.18 0.035 52 | RegularVertex -0.125 0.18 -0.035 53 | RegularVertex 0.125 -0.45 0.115 54 | RegularVertex 0.125 -0.24 0.115 55 | RegularVertex 0.125 -0.03 0.115 56 | RegularVertex 0.125 0.18 0.115 57 | RegularVertex 0.04 0.18 0.115 58 | RegularVertex -0.04 0.18 0.115 59 | RegularVertex -0.04 -0.45 0.115 60 | RegularVertex 0.04 -0.45 0.115 61 | DependentVertex 62 | DependentVertex 63 | Junction 40 84 85 73 0.782378 64 | DependentVertex 65 | DependentVertex 66 | Junction 40 84 85 73 0.217622 67 | DependentVertex 68 | DependentVertex 69 | RegularVertex 0.125 -0.45 0.035 70 | RegularVertex 0.125 -0.45 -0.035 71 | RegularVertex 0.125 -0.45 -0.115 72 | RegularVertex 0.125 -0.24 -0.115 73 | RegularVertex 0.125 -0.03 -0.115 74 | RegularVertex 0.125 0.18 -0.115 75 | RegularVertex 0.125 0.18 -0.035 76 | RegularVertex 0.125 0.18 0.035 77 | DependentVertex 78 | DependentVertex 79 | DependentVertex 80 | DependentVertex 81 | RegularVertex 0.07 0.18 -0.035 82 | RegularVertex 0.07 0.18 0.035 83 | RegularVertex 0.04 -0.45 -0.115 84 | RegularVertex -0.04 -0.45 -0.115 85 | RegularVertex -0.04 0.18 -0.115 86 | RegularVertex 0.04 0.18 -0.115 87 | DependentVertex 88 | DependentVertex 89 | RegularVertex -0.07 0.18 0.035 90 | RegularVertex -0.07 0.18 -0.035 91 | DependentVertex 92 | DependentVertex -------------------------------------------------------------------------------- /templates/cars/adjacencies.txt: -------------------------------------------------------------------------------- 1 | 2 edge 2, 3 edge 1, 4 edge 3, 32 edge 0, 33 edge 1, 37 edge 0, 2 | 2 edge 3, 3 edge 0, 4 edge 2, 29 edge 1, 32 edge 2, 33 edge 1, 3 | 0 edge 3, 1 edge 1, 3 edge 0, 4 edge 2, 4 | 0 edge 3, 1 edge 1, 2 edge 2, 29 edge 1, 33 edge 0, 37 edge 0, 5 | 0 edge 2, 1 edge 0, 2 edge 3, 29 edge 1, 32 edge 1, 37 edge 2, 6 | 7 | 8 edge 2, 9 edge 1, 10 edge 3, 28 edge 0, 33 edge 0, 38 edge 1, 8 | 8 edge 3, 9 edge 0, 10 edge 2, 33 edge 2, 36 edge 1, 38 edge 1, 9 | 5 edge 3, 7 edge 1, 9 edge 0, 10 edge 2, 10 | 5 edge 3, 7 edge 1, 8 edge 2, 28 edge 0, 36 edge 1, 38 edge 0, 11 | 5 edge 2, 7 edge 0, 8 edge 3, 28 edge 2, 33 edge 1, 36 edge 1, 12 | 13 | 14 edge 2, 15 edge 1, 16 edge 3, 24 edge 0, 29 edge 0, 33 edge 1, 14 | 14 edge 3, 15 edge 0, 16 edge 2, 24 edge 2, 33 edge 1, 35 edge 1, 15 | 12 edge 3, 13 edge 1, 15 edge 0, 16 edge 2, 16 | 12 edge 3, 13 edge 1, 14 edge 2, 29 edge 0, 33 edge 0, 35 edge 1, 17 | 12 edge 2, 13 edge 0, 14 edge 3, 24 edge 1, 29 edge 2, 35 edge 1, 18 | 19 | 20 edge 2, 21 edge 1, 22 edge 3, 33 edge 0, 34 edge 1, 36 edge 0, 20 | 20 edge 3, 21 edge 0, 22 edge 2, 25 edge 1, 33 edge 2, 34 edge 1, 21 | 18 edge 3, 19 edge 1, 21 edge 0, 22 edge 2, 22 | 18 edge 3, 19 edge 1, 20 edge 2, 25 edge 1, 34 edge 0, 36 edge 0, 23 | 18 edge 2, 19 edge 0, 20 edge 3, 25 edge 1, 33 edge 1, 36 edge 2, 24 | 25 | 12 edge 0, 13 edge 1, 16 edge 0, 29 edge 3, 31 edge 2, 35 edge 1, 26 | 19 edge 1, 21 edge 1, 22 edge 1, 26 edge 3, 30 edge 2, 33 edge 0, 34 edge 1, 27 | 25 edge 1, 30 edge 2, 31 edge 0, 33 edge 1, 35 edge 1, 39 edge 3, 42 edge 3, 28 | 28 edge 3, 30 edge 2, 31 edge 0, 33 edge 3, 37 edge 3, 40 edge 1, 41 edge 1, 29 | 5 edge 3, 9 edge 3, 10 edge 0, 27 edge 1, 30 edge 2, 33 edge 0, 38 edge 3, 30 | 1 edge 3, 3 edge 0, 4 edge 3, 12 edge 1, 15 edge 1, 16 edge 1, 24 edge 1, 31 edge 2, 32 edge 3, 33 edge 0, 31 | 25 edge 3, 26 edge 2, 27 edge 0, 28 edge 3, 34 edge 3, 36 edge 3, 38 edge 3, 39 edge 1, 40 edge 1, 32 | 24 edge 1, 26 edge 2, 27 edge 0, 29 edge 1, 32 edge 1, 35 edge 1, 37 edge 1, 41 edge 3, 42 edge 3, 33 | 0 edge 0, 1 edge 1, 4 edge 0, 29 edge 1, 31 edge 2, 37 edge 3, 34 | 0 edge 3, 1 edge 3, 3 edge 3, 5 edge 1, 7 edge 1, 10 edge 1, 12 edge 3, 13 edge 3, 15 edge 3, 18 edge 1, 19 edge 1, 22 edge 1, 25 edge 1, 26 edge 2, 27 edge 0, 28 edge 1, 29 edge 3, 35 edge 3, 36 edge 1, 37 edge 3, 35 | 18 edge 3, 19 edge 2, 21 edge 2, 25 edge 1, 30 edge 0, 36 edge 3, 36 | 13 edge 3, 15 edge 0, 16 edge 3, 24 edge 3, 26 edge 1, 31 edge 2, 33 edge 0, 37 | 7 edge 1, 9 edge 1, 10 edge 1, 18 edge 3, 21 edge 3, 22 edge 0, 30 edge 2, 33 edge 0, 34 edge 3, 38 edge 1, 38 | 0 edge 1, 3 edge 1, 4 edge 1, 27 edge 3, 31 edge 2, 32 edge 1, 33 edge 0, 39 | 5 edge 3, 7 edge 2, 9 edge 2, 28 edge 3, 30 edge 0, 36 edge 1, 40 | 26 edge 0, 30 edge 1, 40 edge 2, 41 edge 3, 42 edge 3, 41 | 27 edge 1, 30 edge 0, 39 edge 3, 41 edge 2, 42 edge 3, 42 | 27 edge 0, 31 edge 1, 39 edge 3, 40 edge 3, 42 edge 2, 43 | 26 edge 1, 31 edge 0, 39 edge 2, 40 edge 3, 41 edge 3, 44 | -------------------------------------------------------------------------------- /templates/cars/edges.txt: -------------------------------------------------------------------------------- 1 | 0 1 2 3 2 | 15 16 17 18 3 | 3 28 29 15 4 | 32 33 34 35 5 | 47 48 49 50 6 | 50 62 63 32 7 | 64 65 66 67 8 | 79 80 81 82 9 | 67 92 93 79 10 | 96 97 98 99 11 | 111 112 113 114 12 | 114 126 127 96 13 | 82 128 129 130 14 | 130 131 132 133 15 | 133 134 135 64 16 | 136 137 138 114 17 | 141 142 143 144 18 | 144 145 146 136 19 | 32 170 171 172 20 | 172 173 174 167 21 | 167 175 176 177 22 | 15 180 181 67 23 | 133 184 185 186 24 | 18 197 198 186 25 | 186 199 200 201 26 | 201 202 203 0 27 | 204 205 206 172 28 | 136 209 210 211 29 | 214 215 216 141 30 | 141 217 218 111 31 | 99 219 220 214 32 | 79 221 222 211 33 | 211 223 224 150 34 | 150 225 226 130 35 | 96 229 230 50 36 | 233 234 235 214 37 | 204 238 239 3 38 | 201 242 243 158 39 | 158 244 245 204 40 | 177 246 247 233 41 | 233 248 249 47 42 | 35 250 251 177 43 | 252 253 254 155 44 | 155 255 256 257 45 | 257 263 264 164 46 | 164 265 266 267 47 | 267 270 271 161 48 | 161 272 273 274 49 | 274 277 278 147 50 | 147 279 280 252 51 | -------------------------------------------------------------------------------- /templates/cars/junction_order.txt: -------------------------------------------------------------------------------- 1 | 267 2 | 274 3 | 257 4 | 252 5 | 204 6 | 172 7 | 136 8 | 211 9 | 3 10 | 201 11 | 96 12 | 50 13 | 233 14 | 214 15 | 79 16 | 130 17 | 15 18 | 67 19 | 133 20 | 186 21 | 0 22 | 18 23 | 32 24 | 177 25 | 47 26 | 35 27 | 114 28 | 141 29 | 111 30 | 99 31 | 64 32 | 82 33 | -------------------------------------------------------------------------------- /templates/cars/topology.txt: -------------------------------------------------------------------------------- 1 | [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ], 2 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, ], 3 | [6, 24, 25, 12, 23, 22, 21, 26, 27, 9, 8, 7, ], 4 | [3, 28, 29, 15, 14, 13, 12, 25, 24, 6, 5, 4, ], 5 | [21, 20, 19, 18, 30, 31, 0, 11, 10, 9, 27, 26, ], 6 | [0, 31, 30, 18, 17, 16, 15, 29, 28, 3, 2, 1], 7 | [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, ], 8 | [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, ], 9 | [38, 56, 57, 44, 55, 54, 53, 58, 59, 41, 40, 39, ], 10 | [35, 60, 61, 47, 46, 45, 44, 57, 56, 38, 37, 36, ], 11 | [53, 52, 51, 50, 62, 63, 32, 43, 42, 41, 59, 58, ], 12 | [32, 63, 62, 50, 49, 48, 47, 61, 60, 35, 34, 33], 13 | [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, ], 14 | [76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, ], 15 | [70, 88, 89, 76, 87, 86, 85, 90, 91, 73, 72, 71, ], 16 | [67, 92, 93, 79, 78, 77, 76, 89, 88, 70, 69, 68, ], 17 | [85, 84, 83, 82, 94, 95, 64, 75, 74, 73, 91, 90, ], 18 | [67, 66, 65, 64, 95, 94, 82, 81, 80, 79, 93, 92], 19 | [96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, ], 20 | [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, ], 21 | [102, 120, 121, 108, 119, 118, 117, 122, 123, 105, 104, 103, ], 22 | [99, 124, 125, 111, 110, 109, 108, 121, 120, 102, 101, 100, ], 23 | [117, 116, 115, 114, 126, 127, 96, 107, 106, 105, 123, 122, ], 24 | [114, 113, 112, 111, 125, 124, 99, 98, 97, 96, 127, 126], 25 | [64, 95, 94, 82, 128, 129, 130, 131, 132, 133, 134, 135, ], 26 | [136, 137, 138, 114, 139, 140, 141, 142, 143, 144, 145, 146, ], 27 | [147, 148, 149, 150, 151, 152, 144, 153, 154, 155, 156, 157, ], 28 | [158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, ], 29 | [32, 170, 171, 172, 173, 174, 167, 175, 176, 177, 178, 179, ], 30 | [15, 180, 181, 67, 182, 183, 133, 184, 185, 186, 187, 188, ], 31 | [167, 166, 165, 164, 189, 190, 155, 154, 153, 144, 191, 192, ], 32 | [161, 160, 159, 158, 193, 194, 150, 149, 148, 147, 195, 196, ], 33 | [0, 31, 30, 18, 197, 198, 186, 199, 200, 201, 202, 203, ], 34 | [204, 205, 206, 172, 207, 208, 136, 209, 210, 211, 212, 213, ], 35 | [214, 215, 216, 141, 217, 218, 111, 125, 124, 99, 219, 220, ], 36 | [79, 221, 222, 211, 223, 224, 150, 225, 226, 130, 227, 228, ], 37 | [96, 229, 230, 50, 231, 232, 233, 234, 235, 214, 236, 237, ], 38 | [204, 238, 239, 3, 240, 241, 201, 242, 243, 158, 244, 245, ], 39 | [177, 246, 247, 233, 248, 249, 47, 61, 60, 35, 250, 251, ], 40 | [252, 253, 254, 155, 255, 256, 257, 258, 259, 260, 261, 262, ], 41 | [257, 263, 264, 164, 265, 266, 267, 268, 269, 260, 259, 258, ], 42 | [267, 270, 271, 161, 272, 273, 274, 275, 276, 260, 269, 268, ], 43 | [274, 277, 278, 147, 279, 280, 252, 262, 261, 260, 276, 275, ], ] 44 | -------------------------------------------------------------------------------- /templates/cars/vertices.txt: -------------------------------------------------------------------------------- 1 | Junction 3 240 241 201 0.642857 2 | DependentVertex 3 | DependentVertex 4 | Junction 211 212 213 204 0.863636 5 | RegularVertex -0.125 0.0333333 -0.32 6 | RegularVertex -0.125 0.0216667 -0.32 7 | RegularVertex -0.125 0.01 -0.32 8 | RegularVertex -0.14 0.01 -0.32 9 | RegularVertex -0.155 0.01 -0.32 10 | RegularVertex -0.17 0.01 -0.32 11 | RegularVertex -0.17 0.0216667 -0.32 12 | RegularVertex -0.17 0.0333333 -0.32 13 | RegularVertex -0.125 0.01 -0.205 14 | RegularVertex -0.125 0.0216667 -0.205 15 | RegularVertex -0.125 0.0333333 -0.205 16 | Junction 211 212 213 204 0.732955 17 | DependentVertex 18 | DependentVertex 19 | Junction 186 187 188 15 0.357143 20 | RegularVertex -0.17 0.0333333 -0.205 21 | RegularVertex -0.17 0.0216667 -0.205 22 | RegularVertex -0.17 0.01 -0.205 23 | RegularVertex -0.155 0.01 -0.205 24 | RegularVertex -0.14 0.01 -0.205 25 | RegularVertex -0.125 0.01 -0.281667 26 | RegularVertex -0.125 0.01 -0.243333 27 | RegularVertex -0.17 0.01 -0.243333 28 | RegularVertex -0.17 0.01 -0.281667 29 | DependentVertex 30 | DependentVertex 31 | RegularVertex -0.17 0.045 -0.243333 32 | RegularVertex -0.17 0.045 -0.281667 33 | Junction 172 207 208 136 0.136364 34 | DependentVertex 35 | DependentVertex 36 | Junction 177 178 179 32 0.357143 37 | RegularVertex 0.17 0.0333333 -0.32 38 | RegularVertex 0.17 0.0216667 -0.32 39 | RegularVertex 0.17 0.01 -0.32 40 | RegularVertex 0.155 0.01 -0.32 41 | RegularVertex 0.14 0.01 -0.32 42 | RegularVertex 0.125 0.01 -0.32 43 | RegularVertex 0.125 0.0216667 -0.32 44 | RegularVertex 0.125 0.0333333 -0.32 45 | RegularVertex 0.17 0.01 -0.205 46 | RegularVertex 0.17 0.0216667 -0.205 47 | RegularVertex 0.17 0.0333333 -0.205 48 | Junction 50 231 232 233 0.642857 49 | DependentVertex 50 | DependentVertex 51 | Junction 172 207 208 136 0.267045 52 | RegularVertex 0.125 0.0333333 -0.205 53 | RegularVertex 0.125 0.0216667 -0.205 54 | RegularVertex 0.125 0.01 -0.205 55 | RegularVertex 0.14 0.01 -0.205 56 | RegularVertex 0.155 0.01 -0.205 57 | RegularVertex 0.17 0.01 -0.281667 58 | RegularVertex 0.17 0.01 -0.243333 59 | RegularVertex 0.125 0.01 -0.243333 60 | RegularVertex 0.125 0.01 -0.281667 61 | RegularVertex 0.17 0.045 -0.281667 62 | RegularVertex 0.17 0.045 -0.243333 63 | DependentVertex 64 | DependentVertex 65 | Junction 67 182 183 133 0.642857 66 | DependentVertex 67 | DependentVertex 68 | Junction 211 212 213 204 0.295455 69 | RegularVertex -0.125 0.0333333 0.18 70 | RegularVertex -0.125 0.0216667 0.18 71 | RegularVertex -0.125 0.01 0.18 72 | RegularVertex -0.14 0.01 0.18 73 | RegularVertex -0.155 0.01 0.18 74 | RegularVertex -0.17 0.01 0.18 75 | RegularVertex -0.17 0.0216667 0.18 76 | RegularVertex -0.17 0.0333333 0.18 77 | RegularVertex -0.125 0.01 0.295 78 | RegularVertex -0.125 0.0216667 0.295 79 | RegularVertex -0.125 0.0333333 0.295 80 | Junction 211 212 213 204 0.164773 81 | DependentVertex 82 | DependentVertex 83 | Junction 130 227 228 79 0.357143 84 | RegularVertex -0.17 0.0333333 0.295 85 | RegularVertex -0.17 0.0216667 0.295 86 | RegularVertex -0.17 0.01 0.295 87 | RegularVertex -0.155 0.01 0.295 88 | RegularVertex -0.14 0.01 0.295 89 | RegularVertex -0.125 0.01 0.218333 90 | RegularVertex -0.125 0.01 0.256667 91 | RegularVertex -0.17 0.01 0.256667 92 | RegularVertex -0.17 0.01 0.218333 93 | DependentVertex 94 | DependentVertex 95 | RegularVertex -0.17 0.045 0.256667 96 | RegularVertex -0.17 0.045 0.218333 97 | Junction 172 207 208 136 0.704545 98 | DependentVertex 99 | DependentVertex 100 | Junction 214 236 237 96 0.357143 101 | RegularVertex 0.17 0.0333333 0.18 102 | RegularVertex 0.17 0.0216667 0.18 103 | RegularVertex 0.17 0.01 0.18 104 | RegularVertex 0.155 0.01 0.18 105 | RegularVertex 0.14 0.01 0.18 106 | RegularVertex 0.125 0.01 0.18 107 | RegularVertex 0.125 0.0216667 0.18 108 | RegularVertex 0.125 0.0333333 0.18 109 | RegularVertex 0.17 0.01 0.295 110 | RegularVertex 0.17 0.0216667 0.295 111 | RegularVertex 0.17 0.0333333 0.295 112 | Junction 114 139 140 141 0.642857 113 | DependentVertex 114 | DependentVertex 115 | Junction 172 207 208 136 0.835227 116 | RegularVertex 0.125 0.0333333 0.295 117 | RegularVertex 0.125 0.0216667 0.295 118 | RegularVertex 0.125 0.01 0.295 119 | RegularVertex 0.14 0.01 0.295 120 | RegularVertex 0.155 0.01 0.295 121 | RegularVertex 0.17 0.01 0.218333 122 | RegularVertex 0.17 0.01 0.256667 123 | RegularVertex 0.125 0.01 0.256667 124 | RegularVertex 0.125 0.01 0.218333 125 | RegularVertex 0.17 0.045 0.218333 126 | RegularVertex 0.17 0.045 0.256667 127 | DependentVertex 128 | DependentVertex 129 | DependentVertex 130 | DependentVertex 131 | Junction 158 193 194 150 0.835227 132 | DependentVertex 133 | DependentVertex 134 | Junction 158 193 194 150 0.704545 135 | DependentVertex 136 | DependentVertex 137 | Junction 150 151 152 144 0.820513 138 | DependentVertex 139 | DependentVertex 140 | RegularVertex 0.148333 0.045 0.295 141 | RegularVertex 0.171667 0.045 0.295 142 | Junction 144 191 192 167 0.164773 143 | DependentVertex 144 | DependentVertex 145 | RegularVertex 0.195 0.045 0.44 146 | DependentVertex 147 | DependentVertex 148 | RegularVertex -0.195 0.27 0.44 149 | RegularVertex -0.195 0.195 0.44 150 | RegularVertex -0.195 0.12 0.44 151 | RegularVertex -0.195 0.045 0.44 152 | RegularVertex -0.065 0.045 0.44 153 | RegularVertex 0.065 0.045 0.44 154 | RegularVertex 0.195 0.12 0.44 155 | RegularVertex 0.195 0.195 0.44 156 | RegularVertex 0.195 0.27 0.44 157 | RegularVertex 0.065 0.27 0.44 158 | RegularVertex -0.065 0.27 0.44 159 | RegularVertex -0.195 0.045 -0.44 160 | RegularVertex -0.195 0.12 -0.44 161 | RegularVertex -0.195 0.195 -0.44 162 | RegularVertex -0.195 0.27 -0.44 163 | RegularVertex -0.065 0.27 -0.44 164 | RegularVertex 0.065 0.27 -0.44 165 | RegularVertex 0.195 0.27 -0.44 166 | RegularVertex 0.195 0.195 -0.44 167 | RegularVertex 0.195 0.12 -0.44 168 | RegularVertex 0.195 0.045 -0.44 169 | RegularVertex 0.065 0.045 -0.44 170 | RegularVertex -0.065 0.045 -0.44 171 | DependentVertex 172 | DependentVertex 173 | Junction 167 168 169 158 0.179487 174 | DependentVertex 175 | DependentVertex 176 | DependentVertex 177 | DependentVertex 178 | Junction 144 191 192 167 0.863636 179 | RegularVertex 0.171667 0.045 -0.32 180 | RegularVertex 0.148333 0.045 -0.32 181 | DependentVertex 182 | DependentVertex 183 | RegularVertex -0.148333 0.045 0.18 184 | RegularVertex -0.171667 0.045 0.18 185 | DependentVertex 186 | DependentVertex 187 | Junction 158 193 194 150 0.267045 188 | RegularVertex -0.171667 0.045 -0.205 189 | RegularVertex -0.148333 0.045 -0.205 190 | RegularVertex 0.195 0.27 -0.146667 191 | RegularVertex 0.195 0.27 0.146667 192 | RegularVertex 0.195 0.045 0.146667 193 | RegularVertex 0.195 0.045 -0.146667 194 | RegularVertex -0.195 0.045 -0.146667 195 | RegularVertex -0.195 0.045 0.146667 196 | RegularVertex -0.195 0.27 0.146667 197 | RegularVertex -0.195 0.27 -0.146667 198 | DependentVertex 199 | DependentVertex 200 | DependentVertex 201 | DependentVertex 202 | Junction 158 193 194 150 0.136364 203 | DependentVertex 204 | DependentVertex 205 | Junction 167 168 169 158 0.820513 206 | DependentVertex 207 | DependentVertex 208 | RegularVertex 0.125 0.045 -0.146667 209 | RegularVertex 0.125 0.045 0.146667 210 | DependentVertex 211 | DependentVertex 212 | Junction 150 151 152 144 0.179487 213 | RegularVertex -0.125 0.045 0.146667 214 | RegularVertex -0.125 0.045 -0.146667 215 | Junction 144 191 192 167 0.295455 216 | DependentVertex 217 | DependentVertex 218 | DependentVertex 219 | DependentVertex 220 | DependentVertex 221 | DependentVertex 222 | DependentVertex 223 | DependentVertex 224 | DependentVertex 225 | DependentVertex 226 | DependentVertex 227 | DependentVertex 228 | RegularVertex -0.171667 0.045 0.295 229 | RegularVertex -0.148333 0.045 0.295 230 | DependentVertex 231 | DependentVertex 232 | RegularVertex 0.148333 0.045 -0.205 233 | RegularVertex 0.171667 0.045 -0.205 234 | Junction 144 191 192 167 0.732955 235 | DependentVertex 236 | DependentVertex 237 | RegularVertex 0.171667 0.045 0.18 238 | RegularVertex 0.148333 0.045 0.18 239 | DependentVertex 240 | DependentVertex 241 | RegularVertex -0.148333 0.045 -0.32 242 | RegularVertex -0.171667 0.045 -0.32 243 | DependentVertex 244 | DependentVertex 245 | DependentVertex 246 | DependentVertex 247 | DependentVertex 248 | DependentVertex 249 | DependentVertex 250 | DependentVertex 251 | DependentVertex 252 | DependentVertex 253 | Junction 155 156 157 147 0.5 254 | DependentVertex 255 | DependentVertex 256 | DependentVertex 257 | DependentVertex 258 | Junction 164 189 190 155 0.5 259 | RegularVertex 0.13 0.27 0 260 | RegularVertex 0.065 0.27 0 261 | RegularVertex 0 0.27 0 262 | RegularVertex 0 0.27 0.146667 263 | RegularVertex 0 0.27 0.293333 264 | DependentVertex 265 | DependentVertex 266 | DependentVertex 267 | DependentVertex 268 | Junction 161 162 163 164 0.5 269 | RegularVertex 0 0.27 -0.293333 270 | RegularVertex 0 0.27 -0.146667 271 | DependentVertex 272 | DependentVertex 273 | DependentVertex 274 | DependentVertex 275 | Junction 147 195 196 161 0.5 276 | RegularVertex -0.13 0.27 0 277 | RegularVertex -0.065 0.27 0 278 | DependentVertex 279 | DependentVertex 280 | DependentVertex 281 | DependentVertex -------------------------------------------------------------------------------- /templates/guitars/adjacencies.txt: -------------------------------------------------------------------------------- 1 | 2 edge 3, 3 edge 1, 4 edge 1, 10 edge 0, 16 edge 3, 19 edge 2, 6 edge 1, 11 edge 0, 15 edge 0, 18 edge 3 2 | 7 edge 2, 11 edge 3, 14 edge 0, 21 edge 1 3 | 0 edge 3, 10 edge 3, 12 edge 2, 13 edge 1, 15 edge 2, 16 edge 0, 17 edge 1, 18 edge 0 4 | 0 edge 2, 4 edge 2, 5 edge 1, 6 edge 1, 10 edge 3, 11 edge 3, 12 edge 0, 13 edge 0 5 | 0 edge 1, 3 edge 2, 6 edge 2, 8 edge 3, 19 edge 0 6 | 3 edge 0, 6 edge 3, 8 edge 2, 13 edge 0, 19 edge 1 7 | 3 edge 0, 4 edge 3, 5 edge 1, 8 edge 2, 0 edge 0, 13 edge 0 8 | 1 edge 2, 9 edge 0, 11 edge 1, 12 edge 1, 15 edge 1, 21 edge 3 9 | 4 edge 2, 5 edge 0, 6 edge 3, 19 edge 1 10 | 7 edge 2, 14 edge 0, 15 edge 1, 21 edge 3 11 | 0 edge 0, 2 edge 1, 3 edge 0, 11 edge 3, 14 edge 2, 15 edge 1 12 | 1 edge 1, 3 edge 3, 7 edge 2, 10 edge 3, 12 edge 3, 14 edge 0, 0 edge 3, 13 edge 3 13 | 2 edge 2, 3 edge 3, 7 edge 0, 11 edge 3, 13 edge 2, 15 edge 1 14 | 2 edge 1, 3 edge 3, 5 edge 3, 12 edge 0, 17 edge 1, 19 edge 2, 6 edge 3, 11 edge 0, 15 edge 0, 18 edge 1 15 | 1 edge 2, 9 edge 0, 10 edge 3, 11 edge 3, 15 edge 3, 21 edge 1 16 | 2 edge 1, 7 edge 2, 9 edge 3, 10 edge 1, 12 edge 1, 14 edge 0, 0 edge 1, 13 edge 1 17 | 0 edge 3, 2 edge 3, 18 edge 2, 19 edge 0, 20 edge 1 18 | 2 edge 3, 13 edge 2, 18 edge 3, 19 edge 1, 20 edge 0 19 | 2 edge 2, 16 edge 3, 17 edge 1, 20 edge 0, 0 edge 2, 13 edge 1 20 | 0 edge 3, 4 edge 3, 5 edge 1, 8 edge 0, 13 edge 1, 16 edge 3, 17 edge 1, 20 edge 2 21 | 16 edge 3, 17 edge 1, 18 edge 2, 19 edge 0 22 | 1 edge 2, 7 edge 1, 9 edge 0, 14 edge 3 23 | -------------------------------------------------------------------------------- /templates/guitars/edges.txt: -------------------------------------------------------------------------------- 1 | 6 7 8 9 2 | 27 28 29 30 3 | 30 31 32 0 4 | 0 33 34 24 5 | 35 36 37 38 6 | 41 42 43 3 7 | 3 44 45 35 8 | 46 47 48 6 9 | 6 49 50 41 10 | 38 56 57 58 11 | 58 59 60 61 12 | 0 87 88 89 13 | 89 90 91 92 14 | 92 93 94 3 15 | 92 95 96 12 16 | 21 97 98 99 17 | 99 102 103 104 18 | 104 105 106 30 19 | 35 109 110 99 20 | 113 114 115 58 21 | 82 122 123 89 22 | 104 126 127 72 23 | 9 128 129 130 24 | 24 136 137 9 25 | 141 142 143 113 26 | 113 144 145 27 27 | -------------------------------------------------------------------------------- /templates/guitars/junction_order.txt: -------------------------------------------------------------------------------- 1 | 89 2 | 104 3 | 92 4 | 99 5 | 35 6 | 30 7 | 113 8 | 58 9 | 27 10 | 3 11 | 0 12 | 38 13 | 6 14 | 9 15 | 24 16 | 41 17 | -------------------------------------------------------------------------------- /templates/guitars/topology.txt: -------------------------------------------------------------------------------- 1 | [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ], 2 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, ], 3 | [24, 25, 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, ], 4 | [35, 36, 37, 38, 39, 40, 41, 42, 43, 3, 44, 45, ], 5 | [46, 47, 48, 6, 49, 50, 41, 51, 52, 53, 54, 55, ], 6 | [38, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, ], 7 | [41, 40, 39, 38, 66, 65, 64, 67, 68, 53, 52, 51, ], 8 | [69, 70, 71, 72, 73, 74, 21, 20, 19, 18, 75, 76, ], 9 | [64, 63, 62, 61, 77, 78, 46, 55, 54, 53, 68, 67, ], 10 | [79, 80, 81, 82, 83, 84, 72, 71, 70, 69, 85, 86, ], 11 | [3, 2, 1, 0, 87, 88, 89, 90, 91, 92, 93, 94, ], 12 | [92, 95, 96, 12, 23, 22, 21, 97, 98, 99, 100, 101, ], 13 | [99, 102, 103, 104, 105, 106, 30, 107, 108, 35, 109, 110, ], 14 | [35, 108, 107, 30, 111, 112, 113, 114, 115, 58, 116, 117, ], 15 | [82, 81, 80, 79, 118, 119, 15, 14, 13, 12, 120, 121, ], 16 | [82, 122, 123, 89, 124, 125, 104, 126, 127, 72, 84, 83, ], 17 | [9, 128, 129, 130, 131, 132, 133, 134, 135, 24, 136, 137, ], 18 | [138, 139, 140, 141, 142, 143, 113, 144, 145, 27, 146, 147, ], 19 | [133, 148, 149, 138, 147, 146, 27, 26, 25, 24, 135, 134, ], 20 | [46, 78, 77, 61, 150, 151, 141, 152, 153, 130, 154, 155, ], 21 | [130, 153, 152, 141, 140, 139, 138, 149, 148, 133, 132, 131, ], 22 | [79, 86, 85, 69, 76, 75, 18, 17, 16, 15, 119, 118, ]] 23 | -------------------------------------------------------------------------------- /templates/guitars/vertices.txt: -------------------------------------------------------------------------------- 1 | Junction 89 124 125 104 0.375 2 | RegularVertex 0.01 -0.08 -0.005 3 | RegularVertex -0.01 -0.08 -0.005 4 | Junction 99 100 101 92 0.625 5 | RegularVertex -0.03 0.105 -0.005 6 | RegularVertex -0.03 0.28 -0.005 7 | Junction 130 154 155 46 0.8125 8 | DependentVertex 9 | DependentVertex 10 | Junction 130 154 155 46 0.0625 11 | RegularVertex 0.03 0.28 -0.005 12 | RegularVertex 0.03 0.105 -0.005 13 | RegularVertex -0.155 -0.08 -0.02 14 | RegularVertex -0.155 -0.21 -0.02 15 | RegularVertex -0.155 -0.34 -0.02 16 | RegularVertex -0.155 -0.475 -0.02 17 | RegularVertex -0.155 -0.475 -0.005 18 | RegularVertex -0.155 -0.475 0.005 19 | RegularVertex -0.155 -0.475 0.02 20 | RegularVertex -0.155 -0.34 0.02 21 | RegularVertex -0.155 -0.21 0.02 22 | RegularVertex -0.155 -0.08 0.02 23 | RegularVertex -0.155 -0.08 0.005 24 | RegularVertex -0.155 -0.08 -0.005 25 | Junction 9 10 11 0 0.297297 26 | RegularVertex 0.03 0.31 0.0 27 | RegularVertex 0.03 0.31 0.005 28 | Junction 30 111 112 113 0.702703 29 | DependentVertex 30 | DependentVertex 31 | Junction 89 124 125 104 0.875 32 | DependentVertex 33 | DependentVertex 34 | DependentVertex 35 | DependentVertex 36 | Junction 99 100 101 92 0.125 37 | DependentVertex 38 | DependentVertex 39 | Junction 58 116 117 35 0.297297 40 | RegularVertex -0.03 0.31 0.005 41 | RegularVertex -0.03 0.31 0.0 42 | Junction 3 4 5 6 0.702703 43 | DependentVertex 44 | DependentVertex 45 | DependentVertex 46 | DependentVertex 47 | RegularVertex -0.045 0.475 -0.005 48 | DependentVertex 49 | DependentVertex 50 | DependentVertex 51 | DependentVertex 52 | RegularVertex -0.035 0.31 -0.005 53 | RegularVertex -0.04 0.31 -0.005 54 | RegularVertex -0.045 0.31 -0.005 55 | RegularVertex -0.045 0.365 -0.005 56 | RegularVertex -0.045 0.42 -0.005 57 | DependentVertex 58 | DependentVertex 59 | Junction 61 150 151 141 0.1875 60 | DependentVertex 61 | DependentVertex 62 | RegularVertex -0.045 0.475 0.015 63 | RegularVertex -0.045 0.42 0.015 64 | RegularVertex -0.045 0.365 0.015 65 | RegularVertex -0.045 0.31 0.015 66 | RegularVertex -0.04 0.31 0.015 67 | RegularVertex -0.035 0.31 0.015 68 | RegularVertex -0.045 0.31 0.005 69 | RegularVertex -0.045 0.31 0.0 70 | RegularVertex 0.155 -0.475 0.02 71 | RegularVertex 0.155 -0.34 0.02 72 | RegularVertex 0.155 -0.21 0.02 73 | RegularVertex 0.155 -0.08 0.02 74 | RegularVertex 0.05 -0.08 0.02 75 | RegularVertex -0.05 -0.08 0.02 76 | RegularVertex -0.05 -0.475 0.02 77 | RegularVertex 0.05 -0.475 0.02 78 | RegularVertex -0.045 0.475 0.005 79 | RegularVertex -0.045 0.475 0.0 80 | RegularVertex 0.155 -0.475 -0.02 81 | RegularVertex 0.155 -0.34 -0.02 82 | RegularVertex 0.155 -0.21 -0.02 83 | RegularVertex 0.155 -0.08 -0.02 84 | RegularVertex 0.155 -0.08 -0.005 85 | RegularVertex 0.155 -0.08 0.005 86 | RegularVertex 0.155 -0.475 0.005 87 | RegularVertex 0.155 -0.475 -0.005 88 | DependentVertex 89 | DependentVertex 90 | Junction 12 120 121 82 0.596774 91 | DependentVertex 92 | DependentVertex 93 | Junction 12 120 121 82 0.403226 94 | DependentVertex 95 | DependentVertex 96 | DependentVertex 97 | DependentVertex 98 | DependentVertex 99 | DependentVertex 100 | Junction 72 73 74 21 0.596774 101 | RegularVertex -0.03 -0.08 0.005 102 | RegularVertex -0.03 -0.08 -0.005 103 | DependentVertex 104 | DependentVertex 105 | Junction 72 73 74 21 0.403226 106 | DependentVertex 107 | DependentVertex 108 | RegularVertex 0.01 -0.08 0.015 109 | RegularVertex -0.01 -0.08 0.015 110 | DependentVertex 111 | DependentVertex 112 | RegularVertex 0.03 0.105 0.015 113 | RegularVertex 0.03 0.28 0.015 114 | Junction 61 150 151 141 0.9375 115 | DependentVertex 116 | DependentVertex 117 | RegularVertex -0.03 0.28 0.015 118 | RegularVertex -0.03 0.105 0.015 119 | RegularVertex 0.05 -0.475 -0.02 120 | RegularVertex -0.05 -0.475 -0.02 121 | RegularVertex -0.05 -0.08 -0.02 122 | RegularVertex 0.05 -0.08 -0.02 123 | DependentVertex 124 | DependentVertex 125 | RegularVertex 0.03 -0.08 -0.005 126 | RegularVertex 0.03 -0.08 0.005 127 | DependentVertex 128 | DependentVertex 129 | DependentVertex 130 | DependentVertex 131 | RegularVertex 0.035 0.475 -0.005 132 | RegularVertex 0.035 0.42 -0.005 133 | RegularVertex 0.035 0.365 -0.005 134 | RegularVertex 0.035 0.31 -0.005 135 | RegularVertex 0.03 0.31 -0.005 136 | RegularVertex 0.03 0.31 -0.005 137 | DependentVertex 138 | DependentVertex 139 | RegularVertex 0.035 0.31 0.015 140 | RegularVertex 0.035 0.365 0.015 141 | RegularVertex 0.035 0.42 0.015 142 | RegularVertex 0.035 0.475 0.015 143 | DependentVertex 144 | DependentVertex 145 | DependentVertex 146 | DependentVertex 147 | RegularVertex 0.03 0.31 0.015 148 | RegularVertex 0.03 0.31 0.015 149 | RegularVertex 0.035 0.31 0.0 150 | RegularVertex 0.035 0.31 0.005 151 | RegularVertex -0.015 0.475 0.015 152 | RegularVertex 0.005 0.475 0.015 153 | RegularVertex 0.035 0.475 0.005 154 | RegularVertex 0.035 0.475 0.0 155 | RegularVertex 0.005 0.475 -0.005 156 | RegularVertex -0.015 0.475 -0.005 157 | -------------------------------------------------------------------------------- /templates/guns/adjacencies.txt: -------------------------------------------------------------------------------- 1 | 1 edge 2, 2 edge 1, 3 edge 3, 11 edge 0, 15 edge 0, 6 edge 0 2 | 0 edge 3, 2 edge 0, 3 edge 2, 9 edge 1, 17 edge 2, 12 edge 0 3 | 0 edge 3, 1 edge 2, 6 edge 0, 9 edge 2, 11 edge 0, 12 edge 1 4 | 0 edge 2, 1 edge 3, 15 edge 1, 17 edge 0, 9 edge 0, 11 edge 1 5 | 7 edge 1, 10 edge 2, 16 edge 0, 18 edge 3, 12 edge 0, 13 edge 1 6 | 6 edge 0, 7 edge 3, 8 edge 1, 12 edge 0, 13 edge 2, 14 edge 2 7 | 2 edge 3, 5 edge 1, 8 edge 0, 11 edge 3, 12 edge 2, 0 edge 3 8 | 4 edge 3, 5 edge 1, 10 edge 3, 12 edge 0, 13 edge 2, 16 edge 0 9 | 5 edge 3, 6 edge 0, 11 edge 1, 14 edge 2 10 | 1 edge 3, 2 edge 0, 12 edge 0, 13 edge 2, 17 edge 3, 19 edge 1, 3 edge 3 11 | 4 edge 2, 7 edge 3, 13 edge 3, 18 edge 1, 19 edge 0 12 | 0 edge 1, 2 edge 1, 6 edge 0, 8 edge 3, 14 edge 2, 15 edge 1, 3 edge 1 13 | 2 edge 1, 5 edge 2, 6 edge 1, 7 edge 3, 9 edge 1, 16 edge 3, 19 edge 0, 1 edge 1, 4 edge 3 14 | 5 edge 2, 7 edge 1, 9 edge 3, 10 edge 1, 14 edge 3, 17 edge 3, 19 edge 0, 4 edge 1, 15 edge 3 15 | 5 edge 3, 8 edge 0, 11 edge 1, 13 edge 2, 15 edge 1, 17 edge 2 16 | 0 edge 0, 3 edge 0, 11 edge 3, 14 edge 2, 17 edge 1, 13 edge 1 17 | 4 edge 2, 7 edge 2, 12 edge 1, 18 edge 3, 19 edge 0 18 | 1 edge 2, 3 edge 1, 9 edge 2, 13 edge 3, 14 edge 0, 15 edge 0 19 | 4 edge 1, 10 edge 2, 16 edge 0, 19 edge 3 20 | 9 edge 0, 10 edge 3, 12 edge 1, 13 edge 3, 16 edge 1, 18 edge 2 21 | -------------------------------------------------------------------------------- /templates/guns/edges.txt: -------------------------------------------------------------------------------- 1 | 0 1 2 3 2 | 14 15 16 17 3 | 3 20 21 22 4 | 22 23 24 14 5 | 45 57 58 59 6 | 59 60 61 22 7 | 33 64 65 42 8 | 51 66 67 36 9 | 14 73 74 75 10 | 78 79 80 81 11 | 84 85 86 87 12 | 36 90 91 84 13 | 54 92 93 3 14 | 96 97 98 70 15 | 99 100 101 75 16 | 59 104 105 42 17 | 78 108 109 84 18 | 51 112 113 114 19 | 119 120 121 114 20 | 114 122 123 48 21 | 119 126 127 96 22 | 96 128 129 0 23 | 130 131 132 99 24 | 99 133 134 33 25 | 17 137 138 81 26 | 81 139 140 119 27 | -------------------------------------------------------------------------------- /templates/guns/junction_order.txt: -------------------------------------------------------------------------------- 1 | 84 2 | 114 3 | 119 4 | 36 5 | 99 6 | 59 7 | 33 8 | 14 9 | 81 10 | 17 11 | 22 12 | 3 13 | 96 14 | 0 15 | -------------------------------------------------------------------------------- /templates/guns/topology.txt: -------------------------------------------------------------------------------- 1 | [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ], 2 | [6, 12, 13, 14, 15, 16, 17, 18, 19, 9, 8, 7, ], 3 | [3, 20, 21, 22, 23, 24, 14, 13, 12, 6, 5, 4, ], 4 | [17, 25, 26, 27, 28, 29, 0, 11, 10, 9, 19, 18, ], 5 | [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, ], 6 | [42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ], 7 | [54, 55, 56, 45, 57, 58, 59, 60, 61, 22, 62, 63, ], 8 | [33, 64, 65, 42, 53, 52, 51, 66, 67, 36, 35, 34, ], 9 | [45, 56, 55, 54, 68, 69, 70, 71, 72, 48, 47, 46, ], 10 | [14, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, ], 11 | [84, 85, 86, 87, 88, 89, 39, 38, 37, 36, 90, 91, ], 12 | [54, 92, 93, 3, 94, 95, 96, 97, 98, 70, 69, 68, ], 13 | [99, 100, 101, 75, 102, 103, 59, 104, 105, 42, 106, 107, ], 14 | [78, 108, 109, 84, 110, 111, 51, 112, 113, 114, 115, 116, ], 15 | [48, 72, 71, 70, 117, 118, 119, 120, 121, 114, 122, 123, ], 16 | [0, 29, 28, 27, 124, 125, 119, 126, 127, 96, 128, 129, ], 17 | [130, 131, 132, 99, 133, 134, 33, 32, 31, 30, 135, 136, ], 18 | [119, 125, 124, 27, 26, 25, 17, 137, 138, 81, 139, 140, ], 19 | [130, 136, 135, 30, 41, 40, 39, 89, 88, 87, 141, 142, ], 20 | [78, 77, 76, 75, 143, 144, 130, 142, 141, 87, 145, 146, ]] 21 | -------------------------------------------------------------------------------- /templates/guns/vertices.txt: -------------------------------------------------------------------------------- 1 | Junction 3 94 95 96 0.833333 2 | DependentVertex 3 | DependentVertex 4 | Junction 22 62 63 54 0.301887 5 | RegularVertex 0.03 0.03 -0.075 6 | RegularVertex 0.03 0.005 -0.075 7 | RegularVertex 0.03 -0.015 -0.075 8 | RegularVertex 0.01 -0.015 -0.075 9 | RegularVertex 0.0 -0.015 -0.075 10 | RegularVertex -0.02 -0.015 -0.075 11 | RegularVertex -0.02 0.005 -0.075 12 | RegularVertex -0.02 0.03 -0.075 13 | RegularVertex 0.03 -0.015 -0.02 14 | RegularVertex 0.03 -0.015 0.03 15 | Junction 75 102 103 59 0.466667 16 | DependentVertex 17 | DependentVertex 18 | Junction 81 82 83 14 0.166667 19 | RegularVertex -0.02 -0.015 0.03 20 | RegularVertex -0.02 -0.015 -0.02 21 | DependentVertex 22 | DependentVertex 23 | Junction 75 102 103 59 0.622222 24 | DependentVertex 25 | DependentVertex 26 | RegularVertex -0.02 0.005 0.085 27 | RegularVertex -0.02 0.03 0.085 28 | RegularVertex -0.02 0.055 0.085 29 | RegularVertex -0.02 0.055 0.03 30 | RegularVertex -0.02 0.055 -0.02 31 | RegularVertex 0.03 0.135 0.445 32 | RegularVertex 0.03 0.135 0.44 33 | RegularVertex 0.03 0.135 0.435 34 | Junction 42 106 107 99 0.2 35 | RegularVertex 0.01 0.135 0.43 36 | RegularVertex -0.01 0.135 0.43 37 | Junction 84 110 111 51 0.8 38 | RegularVertex -0.03 0.135 0.435 39 | RegularVertex -0.03 0.135 0.44 40 | RegularVertex -0.03 0.135 0.445 41 | RegularVertex -0.01 0.135 0.445 42 | RegularVertex 0.01 0.135 0.445 43 | RegularVertex 0.03 0.225 0.43 44 | RegularVertex 0.03 0.225 0.135 45 | RegularVertex 0.03 0.225 -0.15 46 | RegularVertex 0.03 0.225 -0.445 47 | RegularVertex 0.01 0.225 -0.445 48 | RegularVertex -0.01 0.225 -0.445 49 | RegularVertex -0.03 0.225 -0.445 50 | RegularVertex -0.03 0.225 -0.15 51 | RegularVertex -0.03 0.225 0.135 52 | RegularVertex -0.03 0.225 0.43 53 | RegularVertex -0.01 0.225 0.43 54 | RegularVertex 0.01 0.225 0.43 55 | RegularVertex 0.03 0.055 -0.445 56 | RegularVertex 0.03 0.11 -0.445 57 | RegularVertex 0.03 0.165 -0.445 58 | DependentVertex 59 | DependentVertex 60 | Junction 42 43 44 45 0.394286 61 | DependentVertex 62 | DependentVertex 63 | RegularVertex 0.03 0.055 -0.09 64 | RegularVertex 0.03 0.055 -0.265 65 | DependentVertex 66 | DependentVertex 67 | DependentVertex 68 | DependentVertex 69 | RegularVertex 0.01 0.055 -0.445 70 | RegularVertex -0.01 0.055 -0.445 71 | RegularVertex -0.03 0.055 -0.445 72 | RegularVertex -0.03 0.11 -0.445 73 | RegularVertex -0.03 0.165 -0.445 74 | DependentVertex 75 | DependentVertex 76 | RegularVertex 0.03 -0.225 0.085 77 | RegularVertex 0.01 -0.225 0.085 78 | RegularVertex -0.01 -0.225 0.085 79 | RegularVertex -0.03 -0.225 0.085 80 | DependentVertex 81 | DependentVertex 82 | Junction 114 115 116 78 0.533333 83 | RegularVertex -0.01 -0.015 0.085 84 | RegularVertex 0.01 -0.015 0.085 85 | Junction 87 145 146 78 0.0416667 86 | DependentVertex 87 | DependentVertex 88 | RegularVertex -0.03 -0.225 0.445 89 | RegularVertex -0.03 -0.105 0.445 90 | RegularVertex -0.03 0.015 0.445 91 | DependentVertex 92 | DependentVertex 93 | DependentVertex 94 | DependentVertex 95 | RegularVertex 0.01 0.055 -0.075 96 | RegularVertex -0.01 0.055 -0.075 97 | Junction 70 117 118 119 0.698113 98 | DependentVertex 99 | DependentVertex 100 | Junction 75 143 144 130 0.958333 101 | DependentVertex 102 | DependentVertex 103 | RegularVertex 0.03 -0.075 0.085 104 | RegularVertex 0.03 0.075 0.085 105 | DependentVertex 106 | DependentVertex 107 | RegularVertex 0.03 0.075 0.43 108 | RegularVertex 0.03 -0.075 0.43 109 | DependentVertex 110 | DependentVertex 111 | RegularVertex -0.03 -0.075 0.43 112 | RegularVertex -0.03 0.075 0.43 113 | DependentVertex 114 | DependentVertex 115 | Junction 48 49 50 51 0.605714 116 | RegularVertex -0.03 0.075 0.085 117 | RegularVertex -0.03 -0.075 0.085 118 | RegularVertex -0.03 0.055 -0.265 119 | RegularVertex -0.03 0.055 -0.09 120 | Junction 114 115 116 78 0.377778 121 | DependentVertex 122 | DependentVertex 123 | DependentVertex 124 | DependentVertex 125 | RegularVertex -0.02 0.055 0.085 126 | RegularVertex -0.025 0.055 0.085 127 | DependentVertex 128 | DependentVertex 129 | DependentVertex 130 | DependentVertex 131 | RegularVertex 0.03 -0.225 0.445 132 | DependentVertex 133 | DependentVertex 134 | DependentVertex 135 | DependentVertex 136 | RegularVertex 0.03 0.015 0.445 137 | RegularVertex 0.03 -0.105 0.445 138 | DependentVertex 139 | DependentVertex 140 | DependentVertex 141 | DependentVertex 142 | RegularVertex -0.01 -0.225 0.445 143 | RegularVertex 0.01 -0.225 0.445 144 | RegularVertex 0.03 -0.225 0.205 145 | RegularVertex 0.03 -0.225 0.325 146 | RegularVertex -0.03 -0.225 0.325 147 | RegularVertex -0.03 -0.225 0.205 148 | -------------------------------------------------------------------------------- /templates/knives/adjacencies.txt: -------------------------------------------------------------------------------- 1 | 2 edge 2, 6 edge 0, 8 edge 1, 9 edge 0, 10 edge 1, 11 edge 3, 2 | 2 edge 3, 4 edge 1, 7 edge 1, 10 edge 0, 11 edge 2, 12 edge 2, 3 | 0 edge 3, 1 edge 1, 10 edge 0, 11 edge 2, 4 | 4 edge 0, 7 edge 3, 12 edge 2, 13 edge 1, 5 | 1 edge 3, 3 edge 1, 7 edge 2, 10 edge 3, 13 edge 0, 6 | 6 edge 2, 8 edge 1, 9 edge 3, 13 edge 0, 7 | 0 edge 1, 5 edge 3, 8 edge 0, 9 edge 2, 10 edge 1, 11 edge 2, 8 | 1 edge 3, 3 edge 1, 4 edge 0, 10 edge 0, 11 edge 3, 12 edge 2, 9 | 0 edge 2, 5 edge 3, 6 edge 2, 10 edge 1, 13 edge 0, 10 | 0 edge 0, 5 edge 2, 6 edge 3, 11 edge 0, 13 edge 1, 11 | 0 edge 3, 1 edge 1, 2 edge 2, 4 edge 1, 6 edge 3, 7 edge 1, 8 edge 3, 13 edge 0, 12 | 0 edge 1, 1 edge 3, 2 edge 2, 6 edge 1, 7 edge 3, 9 edge 1, 12 edge 3, 13 edge 0, 13 | 1 edge 3, 3 edge 0, 7 edge 3, 11 edge 2, 13 edge 1, 14 | 3 edge 2, 4 edge 3, 5 edge 0, 8 edge 3, 9 edge 1, 10 edge 3, 11 edge 1, 12 edge 1, 15 | -------------------------------------------------------------------------------- /templates/knives/edges.txt: -------------------------------------------------------------------------------- 1 | 3 4 5 6 2 | 9 10 11 0 3 | 12 13 14 15 4 | 18 19 20 21 5 | 40 41 42 31 6 | 15 45 46 40 7 | 50 65 66 67 8 | 67 68 69 3 9 | 0 70 71 72 10 | 72 73 74 47 11 | 67 75 76 40 12 | 81 82 83 72 13 | 34 88 89 81 14 | 81 90 91 18 15 | -------------------------------------------------------------------------------- /templates/knives/junction_order.txt: -------------------------------------------------------------------------------- 1 | 81 2 | 72 3 | 18 4 | 67 5 | 40 6 | 0 7 | 3 8 | 15 9 | -------------------------------------------------------------------------------- /templates/knives/topology.txt: -------------------------------------------------------------------------------- 1 | [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ], 2 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, ], 3 | [6, 24, 25, 12, 23, 22, 21, 26, 27, 9, 8, 7, ], 4 | [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, ], 5 | [40, 41, 42, 31, 30, 29, 28, 43, 44, 15, 45, 46, ], 6 | [47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ], 7 | [53, 59, 60, 3, 2, 1, 0, 61, 62, 56, 55, 54, ], 8 | [15, 44, 43, 28, 39, 38, 37, 63, 64, 18, 17, 16, ], 9 | [50, 65, 66, 67, 68, 69, 3, 60, 59, 53, 52, 51, ], 10 | [0, 70, 71, 72, 73, 74, 47, 58, 57, 56, 62, 61, ], 11 | [67, 75, 76, 40, 77, 78, 12, 25, 24, 6, 79, 80, ], 12 | [81, 82, 83, 72, 84, 85, 9, 27, 26, 21, 86, 87, ], 13 | [37, 36, 35, 34, 88, 89, 81, 90, 91, 18, 64, 63, ], 14 | [50, 49, 48, 47, 92, 93, 34, 33, 32, 31, 94, 95, ]] 15 | -------------------------------------------------------------------------------- /templates/knives/vertices.txt: -------------------------------------------------------------------------------- 1 | Junction 72 84 85 9 0.631579 2 | RegularVertex -0.005 -0.14 -0.055 3 | RegularVertex 0.005 -0.14 -0.055 4 | Junction 6 79 80 67 0.368421 5 | DependentVertex 6 | DependentVertex 7 | RegularVertex 0.015 -0.49 -0.055 8 | RegularVertex 0.005 -0.49 -0.055 9 | RegularVertex -0.005 -0.49 -0.055 10 | RegularVertex -0.015 -0.49 -0.055 11 | DependentVertex 12 | DependentVertex 13 | RegularVertex 0.015 -0.49 0.055 14 | DependentVertex 15 | DependentVertex 16 | Junction 40 77 78 12 0.631579 17 | RegularVertex 0.005 -0.14 0.055 18 | RegularVertex -0.005 -0.14 0.055 19 | Junction 21 86 87 81 0.368421 20 | DependentVertex 21 | DependentVertex 22 | RegularVertex -0.015 -0.49 0.055 23 | RegularVertex -0.005 -0.49 0.055 24 | RegularVertex 0.005 -0.49 0.055 25 | RegularVertex 0.015 -0.49 -0.015 26 | RegularVertex 0.015 -0.49 0.015 27 | RegularVertex -0.015 -0.49 0.015 28 | RegularVertex -0.015 -0.49 -0.015 29 | RegularVertex 0.015 -0.14 0.11 30 | RegularVertex 0.015 0.06 0.11 31 | RegularVertex 0.015 0.26 0.11 32 | RegularVertex 0.015 0.46 0.11 33 | RegularVertex 0.005 0.46 0.11 34 | RegularVertex -0.005 0.46 0.11 35 | RegularVertex -0.015 0.46 0.11 36 | RegularVertex -0.015 0.26 0.11 37 | RegularVertex -0.015 0.06 0.11 38 | RegularVertex -0.015 -0.14 0.11 39 | RegularVertex -0.005 -0.14 0.11 40 | RegularVertex 0.005 -0.14 0.11 41 | Junction 31 94 95 50 0.25 42 | DependentVertex 43 | DependentVertex 44 | RegularVertex 0.015 -0.14 0.09 45 | RegularVertex 0.015 -0.14 0.07 46 | DependentVertex 47 | DependentVertex 48 | RegularVertex -0.015 0.46 -0.11 49 | RegularVertex -0.005 0.46 -0.11 50 | RegularVertex 0.005 0.46 -0.11 51 | RegularVertex 0.015 0.46 -0.11 52 | RegularVertex 0.015 0.26 -0.11 53 | RegularVertex 0.015 0.06 -0.11 54 | RegularVertex 0.015 -0.14 -0.11 55 | RegularVertex 0.005 -0.14 -0.11 56 | RegularVertex -0.005 -0.14 -0.11 57 | RegularVertex -0.015 -0.14 -0.11 58 | RegularVertex -0.015 0.06 -0.11 59 | RegularVertex -0.015 0.26 -0.11 60 | RegularVertex 0.015 -0.14 -0.09 61 | RegularVertex 0.015 -0.14 -0.07 62 | RegularVertex -0.015 -0.14 -0.07 63 | RegularVertex -0.015 -0.14 -0.09 64 | RegularVertex -0.015 -0.14 0.09 65 | RegularVertex -0.015 -0.14 0.07 66 | DependentVertex 67 | DependentVertex 68 | Junction 31 94 95 50 0.75 69 | DependentVertex 70 | DependentVertex 71 | DependentVertex 72 | DependentVertex 73 | Junction 47 92 93 34 0.25 74 | DependentVertex 75 | DependentVertex 76 | DependentVertex 77 | DependentVertex 78 | RegularVertex 0.015 0.14 0.055 79 | RegularVertex 0.015 -0.17 0.055 80 | RegularVertex 0.015 -0.17 -0.055 81 | RegularVertex 0.015 0.14 -0.055 82 | Junction 47 92 93 34 0.75 83 | DependentVertex 84 | DependentVertex 85 | RegularVertex -0.015 0.14 -0.055 86 | RegularVertex -0.015 -0.17 -0.055 87 | RegularVertex -0.015 -0.17 0.055 88 | RegularVertex -0.015 0.14 0.055 89 | DependentVertex 90 | DependentVertex 91 | DependentVertex 92 | DependentVertex 93 | RegularVertex -0.015 0.46 -0.035 94 | RegularVertex -0.015 0.46 0.035 95 | RegularVertex 0.015 0.46 0.035 96 | RegularVertex 0.015 0.46 -0.035 97 | -------------------------------------------------------------------------------- /templates/mugs/adjacencies.txt: -------------------------------------------------------------------------------- 1 | 4 edge 3, 13 edge 2, 21 edge 1, 22 edge 0, 2 | 2 edge 1, 8 edge 3, 11 edge 2, 12 edge 0, 15 edge 3, 17 edge 2, 3 | 1 edge 1, 3 edge 1, 9 edge 1, 11 edge 1, 12 edge 2, 14 edge 3, 17 edge 1, 19 edge 1, 21 edge 0, 26 edge 1, 27 edge 3, 28 edge 1, 31 edge 1, 4 | 2 edge 1, 7 edge 3, 15 edge 0, 23 edge 2, 24 edge 2, 25 edge 3, 28 edge 0, 31 edge 1, 5 | 0 edge 1, 5 edge 3, 6 edge 3, 10 edge 3, 12 edge 3, 13 edge 2, 15 edge 0, 22 edge 0, 30 edge 3, 6 | 4 edge 1, 6 edge 1, 14 edge 2, 16 edge 3, 29 edge 2, 30 edge 0, 7 | 4 edge 0, 5 edge 3, 13 edge 1, 14 edge 2, 29 edge 3, 30 edge 0, 8 | 3 edge 0, 15 edge 3, 19 edge 3, 24 edge 1, 25 edge 1, 26 edge 2, 28 edge 0, 9 | 1 edge 0, 9 edge 2, 15 edge 3, 17 edge 0, 24 edge 2, 25 edge 1, 28 edge 3, 10 | 2 edge 1, 8 edge 2, 11 edge 0, 15 edge 2, 23 edge 0, 24 edge 3, 25 edge 3, 28 edge 1, 11 | 4 edge 0, 12 edge 3, 14 edge 3, 16 edge 1, 29 edge 2, 30 edge 0, 12 | 1 edge 1, 2 edge 1, 9 edge 2, 17 edge 0, 23 edge 3, 24 edge 3, 28 edge 2, 13 | 1 edge 3, 2 edge 3, 4 edge 0, 10 edge 1, 14 edge 2, 15 edge 3, 22 edge 0, 27 edge 3, 29 edge 2, 30 edge 1, 14 | 0 edge 0, 4 edge 3, 6 edge 3, 14 edge 3, 20 edge 2, 21 edge 1, 15 | 2 edge 1, 5 edge 1, 6 edge 1, 10 edge 1, 12 edge 1, 13 edge 2, 20 edge 3, 27 edge 0, 29 edge 1, 16 | 1 edge 3, 3 edge 3, 4 edge 2, 7 edge 3, 8 edge 3, 9 edge 3, 12 edge 2, 17 edge 3, 19 edge 3, 21 edge 0, 22 edge 1, 26 edge 3, 28 edge 3, 17 | 5 edge 1, 10 edge 3, 29 edge 2, 30 edge 0, 18 | 1 edge 0, 2 edge 1, 8 edge 3, 11 edge 1, 15 edge 0, 18 edge 2, 23 edge 1, 25 edge 3, 19 | 17 edge 2, 23 edge 3, 25 edge 1, 26 edge 0, 20 | 2 edge 1, 7 edge 0, 15 edge 3, 21 edge 2, 26 edge 0, 31 edge 1, 21 | 13 edge 2, 14 edge 1, 21 edge 3, 27 edge 0, 22 | 0 edge 3, 2 edge 0, 13 edge 2, 15 edge 0, 19 edge 0, 20 edge 1, 22 edge 0, 27 edge 0, 23 | 0 edge 1, 4 edge 2, 12 edge 3, 15 edge 3, 21 edge 0, 24 | 3 edge 3, 9 edge 3, 11 edge 3, 17 edge 2, 18 edge 1, 24 edge 3, 26 edge 0, 31 edge 3, 25 | 3 edge 3, 7 edge 3, 8 edge 2, 9 edge 1, 11 edge 1, 23 edge 0, 25 edge 2, 31 edge 0, 26 | 3 edge 1, 7 edge 1, 8 edge 1, 9 edge 1, 17 edge 2, 18 edge 3, 24 edge 1, 26 edge 0, 27 | 2 edge 0, 7 edge 1, 15 edge 1, 18 edge 2, 19 edge 0, 23 edge 3, 25 edge 1, 31 edge 3, 28 | 2 edge 1, 12 edge 2, 14 edge 2, 20 edge 3, 21 edge 0, 29 | 2 edge 3, 3 edge 0, 7 edge 1, 8 edge 2, 9 edge 2, 11 edge 3, 15 edge 1, 31 edge 0, 30 | 5 edge 1, 6 edge 2, 10 edge 3, 12 edge 3, 14 edge 2, 16 edge 0, 31 | 4 edge 2, 5 edge 3, 6 edge 3, 10 edge 1, 12 edge 2, 16 edge 0, 32 | 2 edge 1, 3 edge 0, 19 edge 2, 23 edge 3, 24 edge 0, 26 edge 2, 28 edge 1, 33 | -------------------------------------------------------------------------------- /templates/mugs/edges.txt: -------------------------------------------------------------------------------- 1 | 12 13 14 15 2 | 15 16 17 18 3 | 21 22 23 12 4 | 24 25 26 27 5 | 15 30 31 32 6 | 9 50 51 52 7 | 58 67 68 52 8 | 52 69 70 71 9 | 71 72 73 61 10 | 44 74 75 76 11 | 76 77 78 79 12 | 79 80 81 35 13 | 21 82 83 84 14 | 84 85 86 87 15 | 90 91 92 21 16 | 113 114 115 18 17 | 18 116 117 96 18 | 93 118 119 113 19 | 47 120 121 101 20 | 110 122 123 32 21 | 71 139 140 131 22 | 143 144 145 146 23 | 47 149 150 12 24 | 175 176 177 27 25 | 27 178 179 143 26 | 143 180 181 79 27 | 146 189 190 3 28 | 191 192 193 165 29 | 159 194 195 113 30 | 41 198 199 93 31 | 87 200 201 44 32 | 168 202 203 76 33 | 84 206 207 162 34 | 182 212 213 24 35 | 35 214 215 90 36 | 96 216 217 38 37 | 61 218 219 110 38 | 101 220 221 58 39 | 38 222 223 175 40 | 175 224 225 191 41 | 191 226 227 41 42 | -------------------------------------------------------------------------------- /templates/mugs/junction_order.txt: -------------------------------------------------------------------------------- 1 | 24 2 | 146 3 | 71 4 | 61 5 | 110 6 | 52 7 | 101 8 | 58 9 | 143 10 | 12 11 | 27 12 | 15 13 | 38 14 | 35 15 | 90 16 | 96 17 | 175 18 | 79 19 | 21 20 | 18 21 | 76 22 | 84 23 | 44 24 | 191 25 | 113 26 | 41 27 | 93 28 | 87 29 | -------------------------------------------------------------------------------- /templates/mugs/topology.txt: -------------------------------------------------------------------------------- 1 | [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ], 2 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, ], 3 | [24, 25, 26, 27, 28, 29, 15, 30, 31, 32, 33, 34, ], 4 | [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, ], 5 | [47, 48, 49, 0, 11, 10, 9, 50, 51, 52, 53, 54, ], 6 | [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, ], 7 | [58, 67, 68, 52, 69, 70, 71, 72, 73, 61, 60, 59, ], 8 | [35, 46, 45, 44, 74, 75, 76, 77, 78, 79, 80, 81, ], 9 | [21, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, ], 10 | [93, 94, 95, 96, 97, 98, 90, 89, 88, 87, 99, 100, ], 11 | [101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, ], 12 | [113, 114, 115, 18, 116, 117, 96, 95, 94, 93, 118, 119, ], 13 | [47, 120, 121, 101, 112, 111, 110, 122, 123, 32, 124, 125, ], 14 | [9, 8, 7, 6, 126, 127, 128, 129, 130, 131, 132, 133, ], 15 | [134, 135, 136, 32, 137, 138, 71, 139, 140, 131, 141, 142, ], 16 | [143, 144, 145, 146, 147, 148, 47, 149, 150, 12, 151, 152, ], 17 | [104, 153, 154, 55, 66, 65, 64, 155, 156, 107, 106, 105, ], 18 | [21, 20, 19, 18, 157, 158, 159, 160, 161, 162, 163, 164, ], 19 | [165, 166, 167, 168, 169, 170, 162, 161, 160, 159, 171, 172, ], 20 | [79, 173, 174, 175, 176, 177, 27, 178, 179, 143, 180, 181, ], 21 | [182, 183, 184, 134, 142, 141, 131, 130, 129, 128, 185, 186, ], 22 | [3, 187, 188, 182, 186, 185, 128, 127, 126, 6, 5, 4, ], 23 | [146, 189, 190, 3, 2, 1, 0, 49, 48, 47, 148, 147, ], 24 | [191, 192, 193, 165, 172, 171, 159, 194, 195, 113, 196, 197, ], 25 | [41, 198, 199, 93, 100, 99, 87, 200, 201, 44, 43, 42, ], 26 | [168, 202, 203, 76, 204, 205, 84, 206, 207, 162, 170, 169, ], 27 | [175, 174, 173, 79, 208, 209, 168, 167, 166, 165, 210, 211, ], 28 | [182, 212, 213, 24, 34, 33, 32, 136, 135, 134, 184, 183, ], 29 | [38, 37, 36, 35, 214, 215, 90, 98, 97, 96, 216, 217, ], 30 | [107, 156, 155, 64, 63, 62, 61, 218, 219, 110, 109, 108, ], 31 | [55, 154, 153, 104, 103, 102, 101, 220, 221, 58, 57, 56, ], 32 | [41, 40, 39, 38, 222, 223, 175, 224, 225, 191, 226, 227, ]] 33 | -------------------------------------------------------------------------------- /templates/mugs/vertices.txt: -------------------------------------------------------------------------------- 1 | RegularVertex -0.27 0.225 -0.19 2 | RegularVertex -0.27 0.07 -0.19 3 | RegularVertex -0.27 -0.075 -0.19 4 | RegularVertex -0.27 -0.225 -0.19 5 | RegularVertex -0.27 -0.225 -0.01 6 | RegularVertex -0.27 -0.225 0.165 7 | RegularVertex -0.27 -0.225 0.345 8 | RegularVertex -0.27 -0.075 0.345 9 | RegularVertex -0.27 0.07 0.345 10 | RegularVertex -0.27 0.225 0.345 11 | RegularVertex -0.27 0.225 0.165 12 | RegularVertex -0.27 0.225 -0.01 13 | Junction 32 124 125 47 0.454996 14 | DependentVertex 15 | DependentVertex 16 | Junction 32 124 125 47 0.323909 17 | DependentVertex 18 | DependentVertex 19 | Junction 27 28 29 15 0.842097 20 | RegularVertex 0.04 0.15 -0.19 21 | RegularVertex 0.02 0.15 -0.19 22 | Junction 12 151 152 143 0.157903 23 | DependentVertex 24 | DependentVertex 25 | Junction 3 187 188 182 0.865753 26 | DependentVertex 27 | DependentVertex 28 | Junction 3 187 188 182 0.628811 29 | RegularVertex 0.055 -0.075 -0.19 30 | RegularVertex 0.055 0.07 -0.19 31 | DependentVertex 32 | DependentVertex 33 | RegularVertex 0.18 0.225 -0.19 34 | RegularVertex 0.18 0.07 -0.19 35 | RegularVertex 0.18 -0.075 -0.19 36 | Junction 12 151 152 143 0.710697 37 | RegularVertex 0.02 -0.095 -0.19 38 | RegularVertex 0.04 -0.095 -0.19 39 | Junction 27 28 29 15 0.289303 40 | RegularVertex 0.055 -0.095 -0.225 41 | RegularVertex 0.055 -0.095 -0.26 42 | Junction 113 196 197 191 0.79212 43 | RegularVertex 0.04 -0.095 -0.295 44 | RegularVertex 0.02 -0.095 -0.295 45 | Junction 76 204 205 84 0.20788 46 | RegularVertex 0.005 -0.095 -0.26 47 | RegularVertex 0.005 -0.095 -0.225 48 | RegularVertex -0.2 0.225 -0.19 49 | RegularVertex -0.22 0.225 -0.19 50 | RegularVertex -0.245 0.225 -0.19 51 | DependentVertex 52 | DependentVertex 53 | Junction 131 132 133 9 0.865753 54 | RegularVertex -0.2 0.225 0.165 55 | RegularVertex -0.2 0.225 -0.01 56 | RegularVertex -0.2 0.01 0.275 57 | RegularVertex -0.2 0.08 0.275 58 | RegularVertex -0.2 0.155 0.275 59 | Junction 52 53 54 47 0.128944 60 | RegularVertex -0.07 0.225 0.275 61 | RegularVertex 0.05 0.225 0.275 62 | Junction 32 137 138 71 0.871056 63 | RegularVertex 0.18 0.155 0.275 64 | RegularVertex 0.18 0.08 0.275 65 | RegularVertex 0.18 0.01 0.275 66 | RegularVertex 0.05 0.01 0.275 67 | RegularVertex -0.07 0.01 0.275 68 | DependentVertex 69 | DependentVertex 70 | DependentVertex 71 | DependentVertex 72 | Junction 131 132 133 9 0.134247 73 | DependentVertex 74 | DependentVertex 75 | DependentVertex 76 | DependentVertex 77 | Junction 79 208 209 168 0.673499 78 | DependentVertex 79 | DependentVertex 80 | Junction 12 151 152 143 0.855769 81 | DependentVertex 82 | DependentVertex 83 | DependentVertex 84 | DependentVertex 85 | Junction 162 163 164 21 0.326501 86 | DependentVertex 87 | DependentVertex 88 | Junction 76 204 205 84 0.79212 89 | RegularVertex 0.005 0.085 -0.26 90 | RegularVertex 0.005 0.085 -0.225 91 | Junction 12 151 152 143 0.302975 92 | DependentVertex 93 | DependentVertex 94 | Junction 113 196 197 191 0.20788 95 | RegularVertex 0.055 0.085 -0.26 96 | RegularVertex 0.055 0.085 -0.225 97 | Junction 27 28 29 15 0.697025 98 | RegularVertex 0.04 0.085 -0.19 99 | RegularVertex 0.02 0.085 -0.19 100 | RegularVertex 0.02 0.085 -0.295 101 | RegularVertex 0.04 0.085 -0.295 102 | Junction 52 53 54 47 0.871056 103 | RegularVertex -0.2 0.155 -0.12 104 | RegularVertex -0.2 0.08 -0.12 105 | RegularVertex -0.2 0.01 -0.12 106 | RegularVertex -0.07 0.01 -0.12 107 | RegularVertex 0.05 0.01 -0.12 108 | RegularVertex 0.18 0.01 -0.12 109 | RegularVertex 0.18 0.08 -0.12 110 | RegularVertex 0.18 0.155 -0.12 111 | Junction 32 137 138 71 0.128944 112 | RegularVertex 0.05 0.225 -0.12 113 | RegularVertex -0.07 0.225 -0.12 114 | Junction 18 157 158 159 0.673499 115 | DependentVertex 116 | DependentVertex 117 | DependentVertex 118 | DependentVertex 119 | DependentVertex 120 | DependentVertex 121 | DependentVertex 122 | DependentVertex 123 | DependentVertex 124 | DependentVertex 125 | RegularVertex 0.05 0.225 -0.19 126 | RegularVertex -0.07 0.225 -0.19 127 | RegularVertex -0.095 -0.225 0.345 128 | RegularVertex 0.075 -0.225 0.345 129 | RegularVertex 0.25 -0.225 0.345 130 | RegularVertex 0.25 -0.075 0.345 131 | RegularVertex 0.25 0.07 0.345 132 | RegularVertex 0.25 0.225 0.345 133 | RegularVertex 0.075 0.225 0.345 134 | RegularVertex -0.095 0.225 0.345 135 | RegularVertex 0.25 0.225 -0.19 136 | RegularVertex 0.225 0.225 -0.19 137 | RegularVertex 0.2 0.225 -0.19 138 | RegularVertex 0.18 0.225 -0.01 139 | RegularVertex 0.18 0.225 0.165 140 | DependentVertex 141 | DependentVertex 142 | RegularVertex 0.25 0.225 0.165 143 | RegularVertex 0.25 0.225 -0.01 144 | Junction 3 187 188 182 0.53292 145 | DependentVertex 146 | DependentVertex 147 | Junction 3 187 188 182 0.134247 148 | RegularVertex -0.2 -0.075 -0.19 149 | RegularVertex -0.2 0.07 -0.19 150 | DependentVertex 151 | DependentVertex 152 | RegularVertex 0.005 0.07 -0.19 153 | RegularVertex 0.005 -0.075 -0.19 154 | RegularVertex -0.2 0.01 0.01 155 | RegularVertex -0.2 0.01 0.145 156 | RegularVertex 0.18 0.01 0.145 157 | RegularVertex 0.18 0.01 0.01 158 | RegularVertex 0.055 0.15 -0.24 159 | RegularVertex 0.055 0.15 -0.295 160 | RegularVertex 0.055 0.15 -0.345 161 | RegularVertex 0.04 0.15 -0.345 162 | RegularVertex 0.02 0.15 -0.345 163 | RegularVertex 0.005 0.15 -0.345 164 | RegularVertex 0.005 0.15 -0.295 165 | RegularVertex 0.005 0.15 -0.24 166 | RegularVertex 0.055 -0.16 -0.345 167 | RegularVertex 0.04 -0.16 -0.345 168 | RegularVertex 0.02 -0.16 -0.345 169 | RegularVertex 0.005 -0.16 -0.345 170 | RegularVertex 0.005 -0.055 -0.345 171 | RegularVertex 0.005 0.045 -0.345 172 | RegularVertex 0.055 0.045 -0.345 173 | RegularVertex 0.055 -0.055 -0.345 174 | RegularVertex 0.02 -0.16 -0.19 175 | RegularVertex 0.04 -0.16 -0.19 176 | Junction 27 28 29 15 0.144231 177 | DependentVertex 178 | DependentVertex 179 | DependentVertex 180 | DependentVertex 181 | DependentVertex 182 | DependentVertex 183 | RegularVertex 0.25 -0.225 -0.19 184 | RegularVertex 0.25 -0.075 -0.19 185 | RegularVertex 0.25 0.07 -0.19 186 | RegularVertex 0.25 -0.225 0.165 187 | RegularVertex 0.25 -0.225 -0.01 188 | RegularVertex -0.095 -0.225 -0.19 189 | RegularVertex 0.075 -0.225 -0.19 190 | DependentVertex 191 | DependentVertex 192 | Junction 165 210 211 175 0.326501 193 | DependentVertex 194 | DependentVertex 195 | DependentVertex 196 | DependentVertex 197 | RegularVertex 0.055 0.045 -0.295 198 | RegularVertex 0.055 -0.055 -0.295 199 | DependentVertex 200 | DependentVertex 201 | DependentVertex 202 | DependentVertex 203 | DependentVertex 204 | DependentVertex 205 | RegularVertex 0.005 -0.055 -0.295 206 | RegularVertex 0.005 0.045 -0.295 207 | DependentVertex 208 | DependentVertex 209 | RegularVertex 0.005 -0.16 -0.24 210 | RegularVertex 0.005 -0.16 -0.295 211 | RegularVertex 0.055 -0.16 -0.295 212 | RegularVertex 0.055 -0.16 -0.24 213 | DependentVertex 214 | DependentVertex 215 | DependentVertex 216 | DependentVertex 217 | DependentVertex 218 | DependentVertex 219 | DependentVertex 220 | DependentVertex 221 | DependentVertex 222 | DependentVertex 223 | DependentVertex 224 | DependentVertex 225 | DependentVertex 226 | DependentVertex 227 | DependentVertex 228 | DependentVertex -------------------------------------------------------------------------------- /templates/sphere24/adjacencies.txt: -------------------------------------------------------------------------------- 1 | 1 edge 1, 2 edge 2, 3 edge 2, 14 edge 1, 15 edge 0, 21 edge 3, 22 edge 3, 2 | 0 edge 3, 2 edge 2, 3 edge 3, 14 edge 0, 15 edge 0, 16 edge 1, 19 edge 2, 3 | 0 edge 0, 1 edge 0, 3 edge 3, 4 edge 3, 5 edge 2, 16 edge 1, 19 edge 1, 4 | 0 edge 0, 1 edge 1, 2 edge 1, 4 edge 2, 5 edge 2, 21 edge 0, 22 edge 3, 5 | 2 edge 1, 3 edge 0, 5 edge 1, 6 edge 2, 7 edge 2, 22 edge 3, 23 edge 3, 6 | 2 edge 0, 3 edge 0, 4 edge 3, 6 edge 2, 7 edge 3, 18 edge 2, 19 edge 1, 7 | 4 edge 0, 5 edge 0, 7 edge 3, 8 edge 3, 9 edge 2, 18 edge 1, 19 edge 1, 8 | 4 edge 0, 5 edge 1, 6 edge 1, 8 edge 2, 9 edge 2, 22 edge 0, 23 edge 3, 9 | 6 edge 1, 7 edge 0, 9 edge 1, 10 edge 2, 11 edge 2, 20 edge 3, 23 edge 3, 10 | 6 edge 0, 7 edge 0, 8 edge 3, 10 edge 2, 11 edge 3, 17 edge 2, 18 edge 1, 11 | 8 edge 0, 9 edge 0, 11 edge 3, 12 edge 3, 13 edge 2, 17 edge 1, 18 edge 1, 12 | 8 edge 0, 9 edge 1, 10 edge 1, 12 edge 2, 13 edge 2, 20 edge 3, 23 edge 0, 13 | 10 edge 1, 11 edge 0, 13 edge 1, 14 edge 2, 15 edge 2, 20 edge 3, 21 edge 3, 14 | 10 edge 0, 11 edge 0, 12 edge 3, 14 edge 2, 15 edge 3, 16 edge 2, 17 edge 1, 15 | 0 edge 3, 1 edge 2, 12 edge 0, 13 edge 0, 15 edge 3, 16 edge 1, 17 edge 1, 16 | 0 edge 2, 1 edge 2, 12 edge 0, 13 edge 1, 14 edge 1, 20 edge 0, 21 edge 3, 17 | 1 edge 3, 2 edge 3, 13 edge 1, 14 edge 0, 17 edge 1, 18 edge 2, 19 edge 2, 18 | 9 edge 2, 10 edge 1, 13 edge 0, 14 edge 0, 16 edge 3, 18 edge 2, 19 edge 3, 19 | 5 edge 3, 6 edge 2, 9 edge 1, 10 edge 1, 16 edge 0, 17 edge 0, 19 edge 3, 20 | 1 edge 0, 2 edge 3, 5 edge 2, 6 edge 2, 16 edge 0, 17 edge 1, 18 edge 1, 21 | 8 edge 3, 11 edge 3, 12 edge 0, 15 edge 1, 21 edge 1, 22 edge 2, 23 edge 2, 22 | 0 edge 1, 3 edge 2, 12 edge 0, 15 edge 0, 20 edge 3, 22 edge 2, 23 edge 3, 23 | 0 edge 1, 3 edge 1, 4 edge 2, 7 edge 3, 20 edge 0, 21 edge 0, 23 edge 3, 24 | 4 edge 2, 7 edge 2, 8 edge 3, 11 edge 0, 20 edge 0, 21 edge 1, 22 edge 1, 25 | -------------------------------------------------------------------------------- /templates/sphere24/edges.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dmsm/LearningPatches/12384b3e1e93cdbbdbb5a63fec8b4f7631eafe50/templates/sphere24/edges.txt -------------------------------------------------------------------------------- /templates/sphere24/junction_order.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dmsm/LearningPatches/12384b3e1e93cdbbdbb5a63fec8b4f7631eafe50/templates/sphere24/junction_order.txt -------------------------------------------------------------------------------- /templates/sphere24/topology.txt: -------------------------------------------------------------------------------- 1 | [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ], 2 | [3, 12, 13, 14, 15, 16, 17, 18, 19, 6, 5, 4, ], 3 | [6, 19, 18, 17, 20, 21, 22, 23, 24, 25, 26, 27, ], 4 | [9, 8, 7, 6, 27, 26, 25, 28, 29, 30, 31, 32, ], 5 | [30, 29, 28, 25, 33, 34, 35, 36, 37, 38, 39, 40, ], 6 | [25, 24, 23, 22, 41, 42, 43, 44, 45, 35, 34, 33, ], 7 | [35, 45, 44, 43, 46, 47, 48, 49, 50, 51, 52, 53, ], 8 | [38, 37, 36, 35, 53, 52, 51, 54, 55, 56, 57, 58, ], 9 | [56, 55, 54, 51, 59, 60, 61, 62, 63, 64, 65, 66, ], 10 | [51, 50, 49, 48, 67, 68, 69, 70, 71, 61, 60, 59, ], 11 | [61, 71, 70, 69, 72, 73, 74, 75, 76, 77, 78, 79, ], 12 | [64, 63, 62, 61, 79, 78, 77, 80, 81, 82, 83, 84, ], 13 | [82, 81, 80, 77, 85, 86, 87, 88, 89, 90, 91, 92, ], 14 | [77, 76, 75, 74, 93, 94, 95, 96, 97, 87, 86, 85, ], 15 | [87, 97, 96, 95, 98, 99, 14, 13, 12, 3, 100, 101, ], 16 | [90, 89, 88, 87, 101, 100, 3, 2, 1, 0, 102, 103, ], 17 | [14, 99, 98, 95, 104, 105, 106, 107, 108, 17, 16, 15, ], 18 | [95, 94, 93, 74, 73, 72, 69, 109, 110, 106, 105, 104, ], 19 | [106, 110, 109, 69, 68, 67, 48, 47, 46, 43, 111, 112, ], 20 | [17, 108, 107, 106, 112, 111, 43, 42, 41, 22, 21, 20, ], 21 | [82, 92, 91, 90, 113, 114, 115, 116, 117, 64, 84, 83, ], 22 | [90, 103, 102, 0, 11, 10, 9, 118, 119, 115, 114, 113, ], 23 | [115, 119, 118, 9, 32, 31, 30, 40, 39, 38, 120, 121, ], 24 | [64, 117, 116, 115, 121, 120, 38, 58, 57, 56, 66, 65, ]] 25 | -------------------------------------------------------------------------------- /templates/sphere24/vertices.txt: -------------------------------------------------------------------------------- 1 | RegularVertex -0.16 -0.16 0.16 2 | RegularVertex -0.11 -0.18 0.18 3 | RegularVertex -0.05 -0.2 0.2 4 | RegularVertex 0.0 -0.22 0.22 5 | RegularVertex 0.0 -0.15 0.25 6 | RegularVertex 0.0 -0.07 0.27 7 | RegularVertex 0.0 0.0 0.3 8 | RegularVertex -0.07 0.0 0.27 9 | RegularVertex -0.15 0.0 0.25 10 | RegularVertex -0.22 0.0 0.22 11 | RegularVertex -0.2 -0.05 0.2 12 | RegularVertex -0.18 -0.11 0.18 13 | RegularVertex 0.05 -0.2 0.2 14 | RegularVertex 0.11 -0.18 0.18 15 | RegularVertex 0.16 -0.16 0.16 16 | RegularVertex 0.18 -0.11 0.18 17 | RegularVertex 0.2 -0.05 0.2 18 | RegularVertex 0.22 0.0 0.22 19 | RegularVertex 0.15 0.0 0.25 20 | RegularVertex 0.07 0.0 0.27 21 | RegularVertex 0.2 0.05 0.2 22 | RegularVertex 0.18 0.11 0.18 23 | RegularVertex 0.16 0.16 0.16 24 | RegularVertex 0.11 0.18 0.18 25 | RegularVertex 0.05 0.2 0.2 26 | RegularVertex 0.0 0.22 0.22 27 | RegularVertex 0.0 0.15 0.25 28 | RegularVertex 0.0 0.07 0.27 29 | RegularVertex -0.05 0.2 0.2 30 | RegularVertex -0.11 0.18 0.18 31 | RegularVertex -0.16 0.16 0.16 32 | RegularVertex -0.18 0.11 0.18 33 | RegularVertex -0.2 0.05 0.2 34 | RegularVertex 0.0 0.25 0.15 35 | RegularVertex 0.0 0.27 0.07 36 | RegularVertex 0.0 0.3 0.0 37 | RegularVertex -0.07 0.27 0.0 38 | RegularVertex -0.15 0.25 0.0 39 | RegularVertex -0.22 0.22 0.0 40 | RegularVertex -0.2 0.2 0.05 41 | RegularVertex -0.18 0.18 0.11 42 | RegularVertex 0.18 0.18 0.11 43 | RegularVertex 0.2 0.2 0.05 44 | RegularVertex 0.22 0.22 0.0 45 | RegularVertex 0.15 0.25 0.0 46 | RegularVertex 0.07 0.27 0.0 47 | RegularVertex 0.2 0.2 -0.05 48 | RegularVertex 0.18 0.18 -0.11 49 | RegularVertex 0.16 0.16 -0.16 50 | RegularVertex 0.11 0.18 -0.18 51 | RegularVertex 0.05 0.2 -0.2 52 | RegularVertex 0.0 0.22 -0.22 53 | RegularVertex 0.0 0.25 -0.15 54 | RegularVertex 0.0 0.27 -0.07 55 | RegularVertex -0.05 0.2 -0.2 56 | RegularVertex -0.11 0.18 -0.18 57 | RegularVertex -0.16 0.16 -0.16 58 | RegularVertex -0.18 0.18 -0.11 59 | RegularVertex -0.2 0.2 -0.05 60 | RegularVertex 0.0 0.15 -0.25 61 | RegularVertex 0.0 0.07 -0.27 62 | RegularVertex 0.0 0.0 -0.3 63 | RegularVertex -0.07 0.0 -0.27 64 | RegularVertex -0.15 0.0 -0.25 65 | RegularVertex -0.22 0.0 -0.22 66 | RegularVertex -0.2 0.05 -0.2 67 | RegularVertex -0.18 0.11 -0.18 68 | RegularVertex 0.18 0.11 -0.18 69 | RegularVertex 0.2 0.05 -0.2 70 | RegularVertex 0.22 0.0 -0.22 71 | RegularVertex 0.15 0.0 -0.25 72 | RegularVertex 0.07 0.0 -0.27 73 | RegularVertex 0.2 -0.05 -0.2 74 | RegularVertex 0.18 -0.11 -0.18 75 | RegularVertex 0.16 -0.16 -0.16 76 | RegularVertex 0.11 -0.18 -0.18 77 | RegularVertex 0.05 -0.2 -0.2 78 | RegularVertex 0.0 -0.22 -0.22 79 | RegularVertex 0.0 -0.15 -0.25 80 | RegularVertex 0.0 -0.07 -0.27 81 | RegularVertex -0.05 -0.2 -0.2 82 | RegularVertex -0.11 -0.18 -0.18 83 | RegularVertex -0.16 -0.16 -0.16 84 | RegularVertex -0.18 -0.11 -0.18 85 | RegularVertex -0.2 -0.05 -0.2 86 | RegularVertex 0.0 -0.25 -0.15 87 | RegularVertex 0.0 -0.27 -0.07 88 | RegularVertex 0.0 -0.3 0.0 89 | RegularVertex -0.07 -0.27 0.0 90 | RegularVertex -0.15 -0.25 0.0 91 | RegularVertex -0.22 -0.22 0.0 92 | RegularVertex -0.2 -0.2 -0.05 93 | RegularVertex -0.18 -0.18 -0.11 94 | RegularVertex 0.18 -0.18 -0.11 95 | RegularVertex 0.2 -0.2 -0.05 96 | RegularVertex 0.22 -0.22 0.0 97 | RegularVertex 0.15 -0.25 0.0 98 | RegularVertex 0.07 -0.27 0.0 99 | RegularVertex 0.2 -0.2 0.05 100 | RegularVertex 0.18 -0.18 0.11 101 | RegularVertex 0.0 -0.25 0.15 102 | RegularVertex 0.0 -0.27 0.07 103 | RegularVertex -0.18 -0.18 0.11 104 | RegularVertex -0.2 -0.2 0.05 105 | RegularVertex 0.25 -0.15 0.0 106 | RegularVertex 0.27 -0.07 0.0 107 | RegularVertex 0.3 0.0 0.0 108 | RegularVertex 0.27 0.0 0.07 109 | RegularVertex 0.25 0.0 0.15 110 | RegularVertex 0.25 0.0 -0.15 111 | RegularVertex 0.27 0.0 -0.07 112 | RegularVertex 0.25 0.15 0.0 113 | RegularVertex 0.27 0.07 0.0 114 | RegularVertex -0.25 -0.15 0.0 115 | RegularVertex -0.27 -0.07 0.0 116 | RegularVertex -0.3 0.0 0.0 117 | RegularVertex -0.27 0.0 -0.07 118 | RegularVertex -0.25 0.0 -0.15 119 | RegularVertex -0.25 0.0 0.15 120 | RegularVertex -0.27 0.0 0.07 121 | RegularVertex -0.25 0.15 0.0 122 | RegularVertex -0.27 0.07 0.0 123 | -------------------------------------------------------------------------------- /templates/sphere54/adjacencies.txt: -------------------------------------------------------------------------------- 1 | 1 edge 3, 2 edge 2, 6 edge 0, 7 edge 0, 8 edge 2, 18 edge 1, 24 edge 1, 2 | 0 edge 1, 2 edge 2, 6 edge 1, 7 edge 0, 19 edge 3, 20 edge 3, 25 edge 0, 3 | 0 edge 3, 1 edge 2, 8 edge 0, 18 edge 0, 19 edge 2, 20 edge 1, 26 edge 1, 4 | 9 edge 0, 21 edge 3, 27 edge 0, 37 edge 1, 38 edge 2, 43 edge 1, 44 edge 3, 5 | 10 edge 0, 14 edge 2, 22 edge 1, 28 edge 1, 32 edge 2, 36 edge 3, 42 edge 0, 6 | 11 edge 0, 12 edge 1, 13 edge 2, 23 edge 3, 29 edge 0, 30 edge 1, 31 edge 3, 7 | 0 edge 2, 1 edge 3, 7 edge 3, 12 edge 0, 13 edge 0, 18 edge 2, 24 edge 1, 30 edge 1, 8 | 0 edge 2, 1 edge 2, 6 edge 1, 12 edge 1, 13 edge 0, 19 edge 3, 25 edge 3, 31 edge 0, 9 | 0 edge 3, 2 edge 2, 14 edge 0, 18 edge 3, 20 edge 2, 26 edge 1, 32 edge 1, 36 edge 0, 10 | 3 edge 2, 15 edge 0, 21 edge 3, 27 edge 3, 33 edge 0, 37 edge 2, 43 edge 1, 49 edge 1, 11 | 4 edge 2, 16 edge 0, 22 edge 2, 28 edge 1, 34 edge 1, 36 edge 3, 42 edge 3, 48 edge 0, 12 | 5 edge 2, 12 edge 2, 17 edge 0, 23 edge 3, 29 edge 3, 30 edge 1, 35 edge 0, 48 edge 1, 13 | 5 edge 0, 6 edge 2, 7 edge 3, 11 edge 1, 13 edge 3, 24 edge 2, 30 edge 1, 14 | 5 edge 0, 6 edge 2, 7 edge 2, 12 edge 1, 23 edge 0, 25 edge 3, 31 edge 3, 15 | 4 edge 0, 8 edge 2, 18 edge 3, 22 edge 1, 26 edge 2, 32 edge 1, 36 edge 3, 16 | 9 edge 2, 27 edge 3, 33 edge 3, 41 edge 0, 43 edge 2, 47 edge 0, 49 edge 1, 17 | 10 edge 2, 17 edge 0, 28 edge 2, 34 edge 1, 35 edge 1, 42 edge 3, 48 edge 3, 18 | 11 edge 2, 16 edge 0, 29 edge 3, 30 edge 2, 34 edge 0, 35 edge 3, 48 edge 1, 19 | 0 edge 3, 2 edge 3, 6 edge 0, 8 edge 2, 14 edge 2, 24 edge 0, 36 edge 1, 42 edge 1, 20 | 1 edge 1, 2 edge 2, 7 edge 1, 20 edge 2, 25 edge 0, 37 edge 3, 38 edge 3, 43 edge 0, 21 | 1 edge 3, 2 edge 3, 8 edge 0, 19 edge 2, 26 edge 0, 37 edge 2, 38 edge 1, 44 edge 1, 22 | 3 edge 1, 9 edge 1, 27 edge 0, 38 edge 2, 39 edge 3, 44 edge 2, 45 edge 0, 50 edge 3, 23 | 4 edge 3, 10 edge 0, 14 edge 3, 28 edge 0, 32 edge 2, 40 edge 1, 46 edge 1, 50 edge 2, 24 | 5 edge 1, 11 edge 1, 13 edge 2, 29 edge 0, 31 edge 2, 41 edge 3, 47 edge 0, 49 edge 3, 25 | 0 edge 3, 6 edge 3, 12 edge 0, 18 edge 2, 30 edge 0, 36 edge 2, 42 edge 1, 48 edge 1, 26 | 1 edge 2, 7 edge 1, 13 edge 1, 19 edge 2, 31 edge 0, 37 edge 3, 43 edge 3, 49 edge 0, 27 | 2 edge 3, 8 edge 3, 14 edge 0, 20 edge 2, 32 edge 0, 38 edge 2, 44 edge 1, 50 edge 1, 28 | 3 edge 2, 9 edge 1, 15 edge 1, 21 edge 2, 33 edge 0, 39 edge 3, 45 edge 3, 51 edge 0, 29 | 4 edge 3, 10 edge 3, 16 edge 0, 22 edge 2, 34 edge 0, 40 edge 2, 46 edge 1, 52 edge 1, 30 | 5 edge 2, 11 edge 1, 17 edge 1, 23 edge 2, 35 edge 0, 41 edge 3, 47 edge 3, 53 edge 0, 31 | 5 edge 0, 6 edge 3, 11 edge 0, 12 edge 3, 17 edge 1, 24 edge 2, 42 edge 2, 48 edge 1, 32 | 5 edge 1, 7 edge 2, 13 edge 1, 23 edge 0, 25 edge 2, 41 edge 0, 43 edge 3, 49 edge 3, 33 | 4 edge 0, 8 edge 3, 14 edge 3, 22 edge 0, 26 edge 2, 40 edge 1, 44 edge 2, 50 edge 1, 34 | 9 edge 2, 15 edge 1, 27 edge 2, 41 edge 1, 45 edge 3, 47 edge 0, 51 edge 3, 53 edge 0, 35 | 10 edge 3, 16 edge 3, 17 edge 0, 28 edge 2, 35 edge 0, 46 edge 2, 52 edge 1, 53 edge 1, 36 | 11 edge 2, 16 edge 1, 17 edge 1, 29 edge 2, 34 edge 0, 47 edge 3, 52 edge 0, 53 edge 3, 37 | 4 edge 1, 8 edge 3, 10 edge 1, 14 edge 2, 18 edge 3, 24 edge 0, 42 edge 0, 38 | 3 edge 3, 9 edge 0, 19 edge 1, 20 edge 2, 25 edge 1, 38 edge 2, 43 edge 0, 39 | 3 edge 1, 19 edge 3, 20 edge 3, 21 edge 1, 26 edge 0, 37 edge 2, 44 edge 0, 40 | 21 edge 1, 27 edge 1, 40 edge 3, 44 edge 2, 45 edge 0, 46 edge 0, 50 edge 2, 41 | 22 edge 3, 28 edge 0, 32 edge 3, 39 edge 1, 45 edge 1, 46 edge 0, 50 edge 2, 42 | 15 edge 3, 23 edge 1, 29 edge 1, 31 edge 2, 33 edge 0, 47 edge 0, 49 edge 2, 43 | 4 edge 2, 10 edge 1, 16 edge 1, 18 edge 3, 24 edge 3, 30 edge 0, 36 edge 2, 48 edge 0, 44 | 3 edge 3, 9 edge 3, 15 edge 0, 19 edge 2, 25 edge 1, 31 edge 1, 37 edge 2, 49 edge 0, 45 | 3 edge 2, 20 edge 3, 21 edge 1, 26 edge 3, 32 edge 0, 38 edge 2, 39 edge 1, 50 edge 0, 46 | 21 edge 2, 27 edge 1, 33 edge 1, 39 edge 2, 40 edge 3, 46 edge 3, 51 edge 0, 52 edge 0, 47 | 22 edge 3, 28 edge 3, 34 edge 0, 39 edge 2, 40 edge 2, 45 edge 1, 51 edge 1, 52 edge 0, 48 | 15 edge 3, 23 edge 2, 29 edge 1, 33 edge 3, 35 edge 1, 41 edge 2, 51 edge 0, 53 edge 0, 49 | 10 edge 2, 11 edge 0, 16 edge 1, 17 edge 0, 24 edge 3, 30 edge 3, 42 edge 2, 50 | 9 edge 3, 15 edge 3, 23 edge 1, 25 edge 2, 31 edge 1, 41 edge 0, 43 edge 2, 51 | 21 edge 2, 22 edge 0, 26 edge 3, 32 edge 3, 39 edge 1, 40 edge 0, 44 edge 2, 52 | 27 edge 2, 33 edge 1, 45 edge 2, 46 edge 3, 47 edge 1, 52 edge 3, 53 edge 0, 53 | 28 edge 3, 34 edge 3, 35 edge 0, 45 edge 2, 46 edge 2, 51 edge 1, 53 edge 0, 54 | 29 edge 2, 33 edge 3, 34 edge 1, 35 edge 1, 47 edge 2, 51 edge 3, 52 edge 0, 55 | -------------------------------------------------------------------------------- /templates/sphere54/edges.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dmsm/LearningPatches/12384b3e1e93cdbbdbb5a63fec8b4f7631eafe50/templates/sphere54/edges.txt -------------------------------------------------------------------------------- /templates/sphere54/junction_order.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dmsm/LearningPatches/12384b3e1e93cdbbdbb5a63fec8b4f7631eafe50/templates/sphere54/junction_order.txt -------------------------------------------------------------------------------- /templates/sphere54/topology.txt: -------------------------------------------------------------------------------- 1 | [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ], 2 | [12, 13, 14, 0, 11, 10, 9, 15, 16, 17, 18, 19, ], 3 | [6, 20, 21, 22, 23, 24, 17, 16, 15, 9, 8, 7, ], 4 | [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, ], 5 | [37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, ], 6 | [49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, ], 7 | [61, 62, 63, 64, 65, 66, 3, 2, 1, 0, 67, 68, ], 8 | [69, 70, 71, 61, 68, 67, 0, 14, 13, 12, 72, 73, ], 9 | [74, 75, 76, 77, 78, 79, 22, 21, 20, 6, 80, 81, ], 10 | [82, 83, 84, 85, 86, 87, 28, 27, 26, 25, 88, 89, ], 11 | [90, 91, 92, 93, 94, 95, 40, 39, 38, 37, 96, 97, ], 12 | [98, 99, 100, 101, 102, 103, 52, 51, 50, 49, 104, 105, ], 13 | [55, 54, 53, 52, 106, 107, 64, 63, 62, 61, 108, 109, ], 14 | [58, 57, 56, 55, 109, 108, 61, 71, 70, 69, 110, 111, ], 15 | [46, 45, 44, 43, 112, 113, 77, 76, 75, 74, 114, 115, ], 16 | [116, 117, 118, 119, 120, 121, 85, 84, 83, 82, 122, 123, ], 17 | [124, 125, 126, 127, 128, 129, 93, 92, 91, 90, 130, 131, ], 18 | [127, 126, 125, 124, 132, 133, 101, 100, 99, 98, 134, 135, ], 19 | [3, 136, 137, 138, 139, 140, 74, 81, 80, 6, 5, 4, ], 20 | [141, 142, 143, 12, 19, 18, 17, 144, 145, 146, 147, 148, ], 21 | [22, 149, 150, 151, 152, 153, 146, 145, 144, 17, 24, 23, ], 22 | [154, 155, 156, 25, 36, 35, 34, 157, 158, 159, 160, 161, ], 23 | [40, 162, 163, 164, 165, 166, 167, 168, 169, 43, 42, 41, ], 24 | [170, 171, 172, 49, 60, 59, 58, 173, 174, 175, 176, 177, ], 25 | [64, 178, 179, 180, 181, 182, 138, 137, 136, 3, 66, 65, ], 26 | [183, 184, 185, 69, 73, 72, 12, 143, 142, 141, 186, 187, ], 27 | [77, 188, 189, 190, 191, 192, 151, 150, 149, 22, 79, 78, ], 28 | [193, 194, 195, 82, 89, 88, 25, 156, 155, 154, 196, 197, ], 29 | [93, 198, 199, 200, 201, 202, 164, 163, 162, 40, 95, 94, ], 30 | [203, 204, 205, 98, 105, 104, 49, 172, 171, 170, 206, 207, ], 31 | [52, 103, 102, 101, 208, 209, 180, 179, 178, 64, 107, 106, ], 32 | [175, 174, 173, 58, 111, 110, 69, 185, 184, 183, 210, 211, ], 33 | [43, 169, 168, 167, 212, 213, 190, 189, 188, 77, 113, 112, ], 34 | [214, 215, 216, 116, 123, 122, 82, 195, 194, 193, 217, 218, ], 35 | [127, 219, 220, 221, 222, 223, 200, 199, 198, 93, 129, 128, ], 36 | [221, 220, 219, 127, 135, 134, 98, 205, 204, 203, 224, 225, ], 37 | [138, 226, 227, 37, 48, 47, 46, 115, 114, 74, 140, 139, ], 38 | [28, 228, 229, 141, 148, 147, 146, 230, 231, 31, 30, 29, ], 39 | [151, 232, 233, 34, 33, 32, 31, 231, 230, 146, 153, 152, ], 40 | [234, 235, 236, 154, 161, 160, 159, 237, 238, 239, 240, 241, ], 41 | [164, 242, 243, 234, 241, 240, 239, 244, 245, 167, 166, 165, ], 42 | [116, 246, 247, 170, 177, 176, 175, 248, 249, 119, 118, 117, ], 43 | [180, 250, 251, 90, 97, 96, 37, 227, 226, 138, 182, 181, ], 44 | [85, 252, 253, 183, 187, 186, 141, 229, 228, 28, 87, 86, ], 45 | [190, 254, 255, 159, 158, 157, 34, 233, 232, 151, 192, 191, ], 46 | [256, 257, 258, 193, 197, 196, 154, 236, 235, 234, 259, 260, ], 47 | [200, 261, 262, 256, 260, 259, 234, 243, 242, 164, 202, 201, ], 48 | [214, 263, 264, 203, 207, 206, 170, 247, 246, 116, 216, 215, ], 49 | [101, 133, 132, 124, 131, 130, 90, 251, 250, 180, 209, 208, ], 50 | [119, 249, 248, 175, 211, 210, 183, 253, 252, 85, 121, 120, ], 51 | [167, 245, 244, 239, 238, 237, 159, 255, 254, 190, 213, 212, ], 52 | [265, 266, 267, 214, 218, 217, 193, 258, 257, 256, 268, 269, ], 53 | [221, 270, 271, 265, 269, 268, 256, 262, 261, 200, 223, 222, ], 54 | [265, 271, 270, 221, 225, 224, 203, 264, 263, 214, 267, 266, ]] 55 | -------------------------------------------------------------------------------- /templates/sphere54/vertices.txt: -------------------------------------------------------------------------------- 1 | RegularVertex -0.205 -0.205 -0.065 2 | RegularVertex -0.225 -0.165 -0.075 3 | RegularVertex -0.245 -0.125 -0.08 4 | RegularVertex -0.27 -0.09 -0.09 5 | RegularVertex -0.245 -0.08 -0.125 6 | RegularVertex -0.225 -0.075 -0.165 7 | RegularVertex -0.205 -0.065 -0.205 8 | RegularVertex -0.195 -0.1 -0.195 9 | RegularVertex -0.18 -0.135 -0.18 10 | RegularVertex -0.17 -0.17 -0.17 11 | RegularVertex -0.18 -0.18 -0.135 12 | RegularVertex -0.195 -0.195 -0.1 13 | RegularVertex -0.09 -0.27 -0.09 14 | RegularVertex -0.125 -0.245 -0.08 15 | RegularVertex -0.165 -0.225 -0.075 16 | RegularVertex -0.135 -0.18 -0.18 17 | RegularVertex -0.1 -0.195 -0.195 18 | RegularVertex -0.065 -0.205 -0.205 19 | RegularVertex -0.075 -0.225 -0.165 20 | RegularVertex -0.08 -0.245 -0.125 21 | RegularVertex -0.165 -0.075 -0.225 22 | RegularVertex -0.125 -0.08 -0.245 23 | RegularVertex -0.09 -0.09 -0.27 24 | RegularVertex -0.08 -0.125 -0.245 25 | RegularVertex -0.075 -0.165 -0.225 26 | RegularVertex 0.27 -0.09 -0.09 27 | RegularVertex 0.245 -0.125 -0.08 28 | RegularVertex 0.225 -0.165 -0.075 29 | RegularVertex 0.205 -0.205 -0.065 30 | RegularVertex 0.195 -0.195 -0.1 31 | RegularVertex 0.18 -0.18 -0.135 32 | RegularVertex 0.17 -0.17 -0.17 33 | RegularVertex 0.18 -0.135 -0.18 34 | RegularVertex 0.195 -0.1 -0.195 35 | RegularVertex 0.205 -0.065 -0.205 36 | RegularVertex 0.225 -0.075 -0.165 37 | RegularVertex 0.245 -0.08 -0.125 38 | RegularVertex -0.205 0.205 -0.065 39 | RegularVertex -0.165 0.225 -0.075 40 | RegularVertex -0.125 0.245 -0.08 41 | RegularVertex -0.09 0.27 -0.09 42 | RegularVertex -0.08 0.245 -0.125 43 | RegularVertex -0.075 0.225 -0.165 44 | RegularVertex -0.065 0.205 -0.205 45 | RegularVertex -0.1 0.195 -0.195 46 | RegularVertex -0.135 0.18 -0.18 47 | RegularVertex -0.17 0.17 -0.17 48 | RegularVertex -0.18 0.18 -0.135 49 | RegularVertex -0.195 0.195 -0.1 50 | RegularVertex -0.09 -0.09 0.27 51 | RegularVertex -0.125 -0.08 0.245 52 | RegularVertex -0.165 -0.075 0.225 53 | RegularVertex -0.205 -0.065 0.205 54 | RegularVertex -0.195 -0.1 0.195 55 | RegularVertex -0.18 -0.135 0.18 56 | RegularVertex -0.17 -0.17 0.17 57 | RegularVertex -0.135 -0.18 0.18 58 | RegularVertex -0.1 -0.195 0.195 59 | RegularVertex -0.065 -0.205 0.205 60 | RegularVertex -0.075 -0.165 0.225 61 | RegularVertex -0.08 -0.125 0.245 62 | RegularVertex -0.205 -0.205 0.065 63 | RegularVertex -0.225 -0.165 0.075 64 | RegularVertex -0.245 -0.125 0.08 65 | RegularVertex -0.27 -0.09 0.09 66 | RegularVertex -0.27 -0.09 0.03 67 | RegularVertex -0.27 -0.09 -0.03 68 | RegularVertex -0.205 -0.205 -0.02 69 | RegularVertex -0.205 -0.205 0.02 70 | RegularVertex -0.09 -0.27 0.09 71 | RegularVertex -0.125 -0.245 0.08 72 | RegularVertex -0.165 -0.225 0.075 73 | RegularVertex -0.09 -0.27 -0.03 74 | RegularVertex -0.09 -0.27 0.03 75 | RegularVertex -0.205 0.065 -0.205 76 | RegularVertex -0.165 0.075 -0.225 77 | RegularVertex -0.125 0.08 -0.245 78 | RegularVertex -0.09 0.09 -0.27 79 | RegularVertex -0.09 0.03 -0.27 80 | RegularVertex -0.09 -0.03 -0.27 81 | RegularVertex -0.205 -0.02 -0.205 82 | RegularVertex -0.205 0.02 -0.205 83 | RegularVertex 0.27 -0.09 0.09 84 | RegularVertex 0.245 -0.125 0.08 85 | RegularVertex 0.225 -0.165 0.075 86 | RegularVertex 0.205 -0.205 0.065 87 | RegularVertex 0.205 -0.205 0.02 88 | RegularVertex 0.205 -0.205 -0.02 89 | RegularVertex 0.27 -0.09 -0.03 90 | RegularVertex 0.27 -0.09 0.03 91 | RegularVertex -0.205 0.205 0.065 92 | RegularVertex -0.165 0.225 0.075 93 | RegularVertex -0.125 0.245 0.08 94 | RegularVertex -0.09 0.27 0.09 95 | RegularVertex -0.09 0.27 0.03 96 | RegularVertex -0.09 0.27 -0.03 97 | RegularVertex -0.205 0.205 -0.02 98 | RegularVertex -0.205 0.205 0.02 99 | RegularVertex -0.09 0.09 0.27 100 | RegularVertex -0.125 0.08 0.245 101 | RegularVertex -0.165 0.075 0.225 102 | RegularVertex -0.205 0.065 0.205 103 | RegularVertex -0.205 0.02 0.205 104 | RegularVertex -0.205 -0.02 0.205 105 | RegularVertex -0.09 -0.03 0.27 106 | RegularVertex -0.09 0.03 0.27 107 | RegularVertex -0.225 -0.075 0.165 108 | RegularVertex -0.245 -0.08 0.125 109 | RegularVertex -0.195 -0.195 0.1 110 | RegularVertex -0.18 -0.18 0.135 111 | RegularVertex -0.08 -0.245 0.125 112 | RegularVertex -0.075 -0.225 0.165 113 | RegularVertex -0.075 0.165 -0.225 114 | RegularVertex -0.08 0.125 -0.245 115 | RegularVertex -0.195 0.1 -0.195 116 | RegularVertex -0.18 0.135 -0.18 117 | RegularVertex 0.205 -0.065 0.205 118 | RegularVertex 0.195 -0.1 0.195 119 | RegularVertex 0.18 -0.135 0.18 120 | RegularVertex 0.17 -0.17 0.17 121 | RegularVertex 0.18 -0.18 0.135 122 | RegularVertex 0.195 -0.195 0.1 123 | RegularVertex 0.245 -0.08 0.125 124 | RegularVertex 0.225 -0.075 0.165 125 | RegularVertex -0.17 0.17 0.17 126 | RegularVertex -0.135 0.18 0.18 127 | RegularVertex -0.1 0.195 0.195 128 | RegularVertex -0.065 0.205 0.205 129 | RegularVertex -0.075 0.225 0.165 130 | RegularVertex -0.08 0.245 0.125 131 | RegularVertex -0.195 0.195 0.1 132 | RegularVertex -0.18 0.18 0.135 133 | RegularVertex -0.18 0.135 0.18 134 | RegularVertex -0.195 0.1 0.195 135 | RegularVertex -0.08 0.125 0.245 136 | RegularVertex -0.075 0.165 0.225 137 | RegularVertex -0.27 -0.03 -0.09 138 | RegularVertex -0.27 0.03 -0.09 139 | RegularVertex -0.27 0.09 -0.09 140 | RegularVertex -0.245 0.08 -0.125 141 | RegularVertex -0.225 0.075 -0.165 142 | RegularVertex 0.09 -0.27 -0.09 143 | RegularVertex 0.03 -0.27 -0.09 144 | RegularVertex -0.03 -0.27 -0.09 145 | RegularVertex -0.02 -0.205 -0.205 146 | RegularVertex 0.02 -0.205 -0.205 147 | RegularVertex 0.065 -0.205 -0.205 148 | RegularVertex 0.075 -0.225 -0.165 149 | RegularVertex 0.08 -0.245 -0.125 150 | RegularVertex -0.03 -0.09 -0.27 151 | RegularVertex 0.03 -0.09 -0.27 152 | RegularVertex 0.09 -0.09 -0.27 153 | RegularVertex 0.08 -0.125 -0.245 154 | RegularVertex 0.075 -0.165 -0.225 155 | RegularVertex 0.27 0.09 -0.09 156 | RegularVertex 0.27 0.03 -0.09 157 | RegularVertex 0.27 -0.03 -0.09 158 | RegularVertex 0.205 -0.02 -0.205 159 | RegularVertex 0.205 0.02 -0.205 160 | RegularVertex 0.205 0.065 -0.205 161 | RegularVertex 0.225 0.075 -0.165 162 | RegularVertex 0.245 0.08 -0.125 163 | RegularVertex -0.03 0.27 -0.09 164 | RegularVertex 0.03 0.27 -0.09 165 | RegularVertex 0.09 0.27 -0.09 166 | RegularVertex 0.08 0.245 -0.125 167 | RegularVertex 0.075 0.225 -0.165 168 | RegularVertex 0.065 0.205 -0.205 169 | RegularVertex 0.02 0.205 -0.205 170 | RegularVertex -0.02 0.205 -0.205 171 | RegularVertex 0.09 -0.09 0.27 172 | RegularVertex 0.03 -0.09 0.27 173 | RegularVertex -0.03 -0.09 0.27 174 | RegularVertex -0.02 -0.205 0.205 175 | RegularVertex 0.02 -0.205 0.205 176 | RegularVertex 0.065 -0.205 0.205 177 | RegularVertex 0.075 -0.165 0.225 178 | RegularVertex 0.08 -0.125 0.245 179 | RegularVertex -0.27 -0.03 0.09 180 | RegularVertex -0.27 0.03 0.09 181 | RegularVertex -0.27 0.09 0.09 182 | RegularVertex -0.27 0.09 0.03 183 | RegularVertex -0.27 0.09 -0.03 184 | RegularVertex 0.09 -0.27 0.09 185 | RegularVertex 0.03 -0.27 0.09 186 | RegularVertex -0.03 -0.27 0.09 187 | RegularVertex 0.09 -0.27 -0.03 188 | RegularVertex 0.09 -0.27 0.03 189 | RegularVertex -0.03 0.09 -0.27 190 | RegularVertex 0.03 0.09 -0.27 191 | RegularVertex 0.09 0.09 -0.27 192 | RegularVertex 0.09 0.03 -0.27 193 | RegularVertex 0.09 -0.03 -0.27 194 | RegularVertex 0.27 0.09 0.09 195 | RegularVertex 0.27 0.03 0.09 196 | RegularVertex 0.27 -0.03 0.09 197 | RegularVertex 0.27 0.09 -0.03 198 | RegularVertex 0.27 0.09 0.03 199 | RegularVertex -0.03 0.27 0.09 200 | RegularVertex 0.03 0.27 0.09 201 | RegularVertex 0.09 0.27 0.09 202 | RegularVertex 0.09 0.27 0.03 203 | RegularVertex 0.09 0.27 -0.03 204 | RegularVertex 0.09 0.09 0.27 205 | RegularVertex 0.03 0.09 0.27 206 | RegularVertex -0.03 0.09 0.27 207 | RegularVertex 0.09 -0.03 0.27 208 | RegularVertex 0.09 0.03 0.27 209 | RegularVertex -0.225 0.075 0.165 210 | RegularVertex -0.245 0.08 0.125 211 | RegularVertex 0.08 -0.245 0.125 212 | RegularVertex 0.075 -0.225 0.165 213 | RegularVertex 0.075 0.165 -0.225 214 | RegularVertex 0.08 0.125 -0.245 215 | RegularVertex 0.205 0.065 0.205 216 | RegularVertex 0.205 0.02 0.205 217 | RegularVertex 0.205 -0.02 0.205 218 | RegularVertex 0.245 0.08 0.125 219 | RegularVertex 0.225 0.075 0.165 220 | RegularVertex -0.02 0.205 0.205 221 | RegularVertex 0.02 0.205 0.205 222 | RegularVertex 0.065 0.205 0.205 223 | RegularVertex 0.075 0.225 0.165 224 | RegularVertex 0.08 0.245 0.125 225 | RegularVertex 0.08 0.125 0.245 226 | RegularVertex 0.075 0.165 0.225 227 | RegularVertex -0.245 0.125 -0.08 228 | RegularVertex -0.225 0.165 -0.075 229 | RegularVertex 0.165 -0.225 -0.075 230 | RegularVertex 0.125 -0.245 -0.08 231 | RegularVertex 0.1 -0.195 -0.195 232 | RegularVertex 0.135 -0.18 -0.18 233 | RegularVertex 0.125 -0.08 -0.245 234 | RegularVertex 0.165 -0.075 -0.225 235 | RegularVertex 0.205 0.205 -0.065 236 | RegularVertex 0.225 0.165 -0.075 237 | RegularVertex 0.245 0.125 -0.08 238 | RegularVertex 0.195 0.1 -0.195 239 | RegularVertex 0.18 0.135 -0.18 240 | RegularVertex 0.17 0.17 -0.17 241 | RegularVertex 0.18 0.18 -0.135 242 | RegularVertex 0.195 0.195 -0.1 243 | RegularVertex 0.125 0.245 -0.08 244 | RegularVertex 0.165 0.225 -0.075 245 | RegularVertex 0.135 0.18 -0.18 246 | RegularVertex 0.1 0.195 -0.195 247 | RegularVertex 0.165 -0.075 0.225 248 | RegularVertex 0.125 -0.08 0.245 249 | RegularVertex 0.1 -0.195 0.195 250 | RegularVertex 0.135 -0.18 0.18 251 | RegularVertex -0.245 0.125 0.08 252 | RegularVertex -0.225 0.165 0.075 253 | RegularVertex 0.165 -0.225 0.075 254 | RegularVertex 0.125 -0.245 0.08 255 | RegularVertex 0.125 0.08 -0.245 256 | RegularVertex 0.165 0.075 -0.225 257 | RegularVertex 0.205 0.205 0.065 258 | RegularVertex 0.225 0.165 0.075 259 | RegularVertex 0.245 0.125 0.08 260 | RegularVertex 0.205 0.205 -0.02 261 | RegularVertex 0.205 0.205 0.02 262 | RegularVertex 0.125 0.245 0.08 263 | RegularVertex 0.165 0.225 0.075 264 | RegularVertex 0.165 0.075 0.225 265 | RegularVertex 0.125 0.08 0.245 266 | RegularVertex 0.17 0.17 0.17 267 | RegularVertex 0.18 0.135 0.18 268 | RegularVertex 0.195 0.1 0.195 269 | RegularVertex 0.195 0.195 0.1 270 | RegularVertex 0.18 0.18 0.135 271 | RegularVertex 0.1 0.195 0.195 272 | RegularVertex 0.135 0.18 0.18 273 | --------------------------------------------------------------------------------