├── .gitignore ├── CMakeLists.txt ├── LICENSE ├── README.md ├── app ├── get_line_plot.py ├── gui.cpp ├── gui.h ├── gui_1.cpp ├── lsc_main.cpp └── main.cpp ├── cmake ├── DownloadProject.CMakeLists.cmake.in ├── DownloadProject.cmake ├── FindGMP.cmake ├── PrependCurrentPath.cmake ├── UseColors.cmake ├── Warnings.cmake ├── lscDependencies.cmake ├── lscDownloadExternal.cmake └── lscUtils.cmake ├── data ├── Hall.obj ├── RectifyingPatternsLowRes.pdf ├── fig │ ├── carpet60.png │ ├── code_teaser.png │ ├── extractQuad.png │ ├── mainpage.png │ ├── quad_diags.png │ ├── smooth.png │ ├── strips.png │ ├── strips2.png │ ├── strokes.png │ └── tracing.png ├── interactive │ ├── 48p75_1.csv │ ├── 48p75_1b.csv │ ├── readme.txt │ ├── s1_0x.csv │ ├── s1_0y.csv │ ├── s1_0z.csv │ ├── s1_1x.csv │ ├── s1_1y.csv │ ├── s1_1z.csv │ ├── s1_2x.csv │ ├── s1_2y.csv │ ├── s1_2z.csv │ ├── s1_bc.csv │ ├── s1_flist.csv │ ├── s_shape_mod.obj │ └── smooth1.csv ├── pseudo-geodesic │ ├── 72.csv │ ├── 72b.csv │ ├── Hall.obj │ └── readme.txt ├── quads │ ├── 120.csv │ ├── 60.csv │ ├── info_colleft.csv │ ├── info_colright.csv │ ├── info_cols.csv │ ├── info_rowleft.csv │ ├── info_rowright.csv │ ├── info_rows.csv │ ├── quad.obj │ ├── quad_opt.obj │ ├── readme.txt │ └── tri.obj ├── strip │ ├── crease_b_x.csv │ ├── crease_b_y.csv │ ├── crease_b_z.csv │ ├── crease_x.csv │ ├── crease_y.csv │ ├── crease_z.csv │ ├── opt_b_x.csv │ ├── opt_b_y.csv │ ├── opt_b_z.csv │ ├── opt_x.csv │ ├── opt_y.csv │ ├── opt_z.csv │ └── readme.txt └── tracing │ ├── 60.csv │ ├── 60_b.csv │ ├── Wave.obj │ ├── crease_b_x.csv │ ├── crease_b_y.csv │ ├── crease_b_z.csv │ ├── crease_x.csv │ ├── crease_y.csv │ ├── crease_z.csv │ ├── initial_ls.csv │ ├── opt_b_x.csv │ ├── opt_b_y.csv │ ├── opt_b_z.csv │ ├── opt_x.csv │ ├── opt_y.csv │ ├── opt_z.csv │ ├── ply_b_x.csv │ ├── ply_b_y.csv │ ├── ply_b_z.csv │ ├── ply_x.csv │ ├── ply_y.csv │ ├── ply_z.csv │ ├── readme.txt │ ├── saved_traced_0.csv │ ├── saved_traced_1.csv_0.csv │ ├── saved_traced_2_0.csv │ ├── saved_traced_3_0.csv │ ├── saved_traced_4_0.csv │ └── smooth.csv └── src ├── MeshProcessing.cpp ├── MeshProcessing.h ├── SOURCE.cmake ├── basic.cpp ├── basic.h ├── energy.cpp ├── functional.cpp ├── igl_tool.cpp ├── igl_tool.h ├── interaction.cpp ├── interaction.h ├── mesh_opt.cpp ├── nodes.cpp ├── polyline.cpp ├── tools.cpp ├── tools.h ├── topology.cpp └── tracing.cpp /.gitignore: -------------------------------------------------------------------------------- 1 | ## macOS 2 | default.profraw 3 | 4 | # General 5 | .DS_Store 6 | .AppleDouble 7 | .LSOverride 8 | 9 | # Icon must end with two \r 10 | Icon 11 | 12 | 13 | # Thumbnails 14 | ._* 15 | 16 | # Files that might appear in the root of a volume 17 | .DocumentRevisions-V100 18 | .fseventsd 19 | .Spotlight-V100 20 | .TemporaryItems 21 | .Trashes 22 | .VolumeIcon.icns 23 | .com.apple.timemachine.donotpresent 24 | 25 | # Directories potentially created on remote AFP share 26 | .AppleDB 27 | .AppleDesktop 28 | Network Trash Folder 29 | Temporary Items 30 | .apdisk 31 | 32 | 33 | ## C++ 34 | 35 | # Prerequisites 36 | *.d 37 | 38 | # Compiled Object files 39 | *.slo 40 | *.lo 41 | *.o 42 | # *.obj #we need obj mesh files 43 | 44 | # Precompiled Headers 45 | *.gch 46 | *.pch 47 | 48 | # Compiled Dynamic libraries 49 | *.so 50 | *.dylib 51 | *.dll 52 | 53 | # Fortran module files 54 | *.mod 55 | *.smod 56 | 57 | # Compiled Static libraries 58 | *.lai 59 | *.la 60 | *.a 61 | *.lib 62 | 63 | # Executables 64 | *.exe 65 | *.out 66 | *.app 67 | 68 | 69 | ## CMake 70 | 71 | CMakeLists.txt.user 72 | CMakeCache.txt 73 | CMakeFiles 74 | CMakeScripts 75 | Testing 76 | Makefile 77 | cmake_install.cmake 78 | install_manifest.txt 79 | compile_commands.json 80 | CTestTestfile.cmake 81 | _deps 82 | 83 | 84 | ## Build 85 | build* 86 | rbuild* 87 | bin* 88 | 89 | ## IDES 90 | *.autosave 91 | .idea/ 92 | *.code-workspace 93 | *.vscode 94 | 95 | ## python 96 | # Byte-compiled / optimized / DLL files 97 | __pycache__/ 98 | *.py[cod] 99 | *$py.class 100 | 101 | # C extensions 102 | *.so 103 | 104 | # Distribution / packaging 105 | .Python 106 | build/ 107 | develop-eggs/ 108 | dist/ 109 | downloads/ 110 | eggs/ 111 | .eggs/ 112 | lib/ 113 | lib64/ 114 | parts/ 115 | sdist/ 116 | var/ 117 | wheels/ 118 | pip-wheel-metadata/ 119 | share/python-wheels/ 120 | *.egg-info/ 121 | .installed.cfg 122 | *.egg 123 | MANIFEST 124 | 125 | # PyInstaller 126 | # Usually these files are written by a python script from a template 127 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 128 | *.manifest 129 | *.spec 130 | 131 | # Installer logs 132 | pip-log.txt 133 | pip-delete-this-directory.txt 134 | 135 | # Unit test / coverage reports 136 | htmlcov/ 137 | .tox/ 138 | .nox/ 139 | .coverage 140 | .coverage.* 141 | .cache 142 | nosetests.xml 143 | coverage.xml 144 | *.cover 145 | *.py,cover 146 | .hypothesis/ 147 | .pytest_cache/ 148 | 149 | # Translations 150 | *.mo 151 | *.pot 152 | 153 | # Django stuff: 154 | *.log 155 | local_settings.py 156 | db.sqlite3 157 | db.sqlite3-journal 158 | 159 | # Flask stuff: 160 | instance/ 161 | .webassets-cache 162 | 163 | # Scrapy stuff: 164 | .scrapy 165 | 166 | # Sphinx documentation 167 | docs/_build/ 168 | 169 | # PyBuilder 170 | target/ 171 | 172 | # Jupyter Notebook 173 | .ipynb_checkpoints 174 | 175 | # IPython 176 | profile_default/ 177 | ipython_config.py 178 | 179 | # pyenv 180 | .python-version 181 | 182 | # pipenv 183 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 184 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 185 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 186 | # install all needed dependencies. 187 | #Pipfile.lock 188 | 189 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 190 | __pypackages__/ 191 | 192 | # Celery stuff 193 | celerybeat-schedule 194 | celerybeat.pid 195 | 196 | # SageMath parsed files 197 | *.sage.py 198 | 199 | # Environments 200 | .env 201 | .venv 202 | env/ 203 | venv/ 204 | ENV/ 205 | env.bak/ 206 | venv.bak/ 207 | 208 | # Spyder project settings 209 | .spyderproject 210 | .spyproject 211 | 212 | # Rope project settings 213 | .ropeproject 214 | 215 | # mkdocs documentation 216 | /site 217 | 218 | # mypy 219 | .mypy_cache/ 220 | .dmypy.json 221 | dmypy.json 222 | 223 | # Pyre type checker 224 | .pyre/ 225 | 226 | ## Documentation 227 | docs 228 | 229 | ## External dependancies 230 | external 231 | 232 | *.nosync 233 | ############################################################################### 234 | paper/ -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.1) 2 | project(lsc) 3 | 4 | 5 | 6 | ################################################################################ 7 | 8 | # project-options 9 | 10 | 11 | 12 | ################################################################################ 13 | 14 | ### Configuration 15 | set(SPARSE_EXTERNAL "${CMAKE_CURRENT_SOURCE_DIR}/external") 16 | list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) 17 | list(APPEND CMAKE_MODULE_PATH ${THIRD_PARTY_DIR}/Catch2/contrib) 18 | 19 | include(Warnings) 20 | include(UseColors) 21 | include(${PROJECT_NAME}Dependencies) 22 | include(PrependCurrentPath) 23 | include(${PROJECT_NAME}Utils) 24 | add_subdirectory(${SPARSE_EXTERNAL}/openmesh/OpenMesh-9.0.0) 25 | 26 | ############################ 27 | # libraries 28 | include(src/SOURCE.cmake) 29 | prepend_current_path(LSC_SOURCES) 30 | lsc_copy_headers(${LSC_SOURCES}) 31 | lsc_set_source_group(${LSC_SOURCES}) 32 | add_library(lsc ${LSC_SOURCES}) 33 | #target_sources(lsc PRIVATE ${LSC_SOURCES}) 34 | target_include_directories(lsc PUBLIC ${PROJECT_BINARY_DIR}/include) 35 | igl_include(core) 36 | igl_include(opengl) 37 | igl_include(glfw) 38 | igl_include(imgui) 39 | igl_include(predicates) 40 | target_link_libraries(lsc PUBLIC igl::core igl::opengl igl::glfw igl::imgui Eigen3::Eigen igl::predicates OpenMeshCore OpenMeshTools) 41 | 42 | 43 | target_compile_definitions(lsc PUBLIC 44 | SI_MESH_DIR="${CMAKE_CURRENT_SOURCE_DIR}/app/meshes/") 45 | ############################## 46 | 47 | # add_executable(${PROJECT_NAME}_bin app/main.cpp) 48 | # target_link_libraries(${PROJECT_NAME}_bin PUBLIC lsc) 49 | 50 | # add_definitions(-D_USE_MATH_DEFINES) 51 | # target_compile_definitions(${PROJECT_NAME}_bin PUBLIC 52 | # CHECKER_BOARD_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data/") 53 | ################################ 54 | 55 | add_executable(${PROJECT_NAME}_devbin app/lsc_main.cpp app/gui.cpp app/gui_1.cpp app/gui.h) 56 | target_include_directories(${PROJECT_NAME}_devbin PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/app) 57 | target_link_libraries(${PROJECT_NAME}_devbin PUBLIC lsc) 58 | 59 | add_definitions(-D_USE_MATH_DEFINES) 60 | target_compile_definitions(${PROJECT_NAME}_devbin PUBLIC 61 | CHECKER_BOARD_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data/") 62 | 63 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Bolun Wang 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 | # Rectifying Strip Patterns 2 | 3 | This is an implementation of the paper "Rectifying Strip Patterns" (SIGGRAPH ASIA 2023). The code is implemented in C++, and tested on MSVC and GCC. This is a framework to design rectifying strips/structures, including a scalar field optimization framework, a quad mesh optimization framework, code for optimizing space curves into rectifying strips, etc. 4 | 5 | ## Citation 6 | 7 | If you use our code in your project, please consider citing the [original paper](https://github.com/wangbolun300/RectifyingStripPatterns/blob/main/data/RectifyingPatternsLowRes.pdf): 8 | 9 | ```bibtex 10 | @article{Wang:2023:Rectifying, 11 | author = {Wang, Bolun and Wang, Hui and Schling, Eike and Pottmann, Helmut}, 12 | title = {Rectifying Strip Patterns}, 13 | year = {2023}, 14 | issue_date = {December 2023}, 15 | publisher = {Association for Computing Machinery}, 16 | address = {New York, NY, USA}, 17 | volume = {42}, 18 | number = {6}, 19 | issn = {0730-0301}, 20 | url = {https://doi.org/10.1145/3618378}, 21 | doi = {10.1145/3618378}, 22 | month = {dec}, 23 | articleno = {256}, 24 | numpages = {18}, 25 | keywords = {architectural geometry, computational design, computational fabrication, gridshell, pseudo-geodesic, shading system} 26 | } 27 | ``` 28 | 29 | ## Compiling Instruction 30 | To compile the code, first you need to install CMake (https://cmake.org/), 31 | To build the executable on Linux or macOS: 32 | ```sh 33 | cd RectifyingStripPatterns/ 34 | mkdir build 35 | cd build 36 | cmake ../ -DCMAKE_BUILD_TYPE=Release 37 | make 38 | ``` 39 | To build it on MSVC, you need to download [openmesh](https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/OpenMesh/-/jobs/156362/artifacts/raw/OpenMesh-9.1.0.zip) into the "external" folder, unzip it into "external/openmesh/OpenMesh-9.1.0" and build it into "external/openmesh/OpenMesh-9.1.0/build". 40 | 41 | Then double-click the executable `lsc_devbin`, you will see a pop-out window whose buttons link the functions that generate all the results in our paper. 42 | 43 | 44 | 45 | ## Usage 46 | Some useful shortcuts: 47 | * `i` is to invert the normal directions of the viewer. 48 | * `d` is to enable double-sided rendering. 49 | * `x` is to delete the selected mesh in the `Mesh Management` list. 50 | 51 | Some tips: 52 | * Please always check if there is any new mesh added into the `Mesh Management` list. Sometimes after pressing the buttons, there is no change in the main view window, but the new mesh is already added into the list. To see the renderings of the new results you need to make other meshes invisible by clicking the checker boxes on the left of the mesh files. 53 | * Please always check the information printed in the terminal, it will tell you the numerical errors, how to read/write files after pressing the corresponding buttons, if there are singularities, etc. 54 | * Every time you get a scalar field, don't forget to save it using `Save levelset`. If you have a scalar field and a model in the framework, close the exe and reopen it before loading another model or scalar field. 55 | * When it prints "flip u" in the terminal, it means the convergence is not stable. You should first use a small `weight pseudo geodesic`, run a few iterations until it turns stable, then gradually increase the weight. 56 | * When it prints "Singularity" in the terminal, it means there are singularities in the scalar field. Enhance the constraints on smoothness and strip width until the singularities disappear. 57 | 58 | 59 | ### Interactive design of P-curves 60 | * Press the button `UseUnitScaleMesh` on the top left of the viewer to unit-scale the mesh. 61 | * Draw the guide curves: Press the key `3` on the keyboard, and draw a few curves on the surface using your mouth, then release the key `3`. Make sure that there is no intersection. The strokes should be smooth, generally in the same direction, as shown below 62 | 63 | 64 | 65 | * If you are not satisfied with the strokes, you can clear the strokes by pressing `Panel 1 -> InterActiveDesign -> ClearStrokes`. A clean mesh will be added to the `Mesh Management` so that you can redraw curves on it. 66 | * Press the button `Stroke2LS` to confirm the drawing. 67 | * Press `AutoRunSmooth` to generate the smooth level sets that follow the strokes. The details for each iteration is printed in the terminal. The target P-curve angle $\theta$ is also printed out, e.g. "target_angle, 76.5434". 68 | * After obtaining the smooth level sets generally following the strokes, press `AutoRunPG`, wait for a few seconds, then the scalar function whose level curves are pseudo-geodesic curves of $\theta$ is generated. Press `Save levelset` to save the scalar field and the binormal vectors. In this step, the scalar field is automatically optimized using the default parameters. 69 | ### Initialize the scalar field by tracing P-curves. 70 | 71 | * Open the exe by double-clicking it, there is a default mesh already loaded. If you want to use another mesh, load it by pressing `Import Mesh`, delete the default mesh, and now you have a clean workspace. 72 | * Trace guide curves using the buttons under the `Tracing` catalog. The start points of tracing curves are on the boundary of the mesh. There are two `TracingType` you can choose to quickly decide where the start points are. `SegTrace` chooses a segment that contains "`nbr bnd edges`" edges of the boundary starting from the "`start bnd edge`"th edge of the boundary loop. The distance between two neighboring start points is "`every i segments`". Another `TracingType` is `OneEdgeTrace`. If your mesh has corner points on the boundary, you can select the "`Select 1 boundary`"th segment of the boundary curve split by the corner points. `corner angle` helps to decide the corner points. The following figure shows the traced curves under `OneEdgeTrace` mode. 73 | 74 | 75 | 76 | * Now we trace curves. Set up the `start angle` and $\theta$ = `target angle`, press `Trace Curves`, and P-curves will be traced out and rendered in the viewer. 77 | * Or, you can also trace 1 curve each time by properly setting up the parameters under `SegTrace` mode, save and load them one by one. This gives you more precise control of the start directions and curve locations. 78 | * Make sure there is no intersection in the traced curves. 79 | * Now we turn to `Energy Solving` catalog. Tune `weight boundary` and `weight laplacian` and press `LvSet Opt` under the `LS Processing` catalog, you will see the generated level sets after running a certain number of iterations decided by `Iteration`. 80 | * Save the scalar field if you are satisfied with the quality. See figure: 81 | 82 | 83 | ### Optimize for P-curves with user-specific parameters 84 | * Press `Import levelset` to load a scalar field and `Import Mesh`. 85 | * Set up `weight laplacian` to control the smoothness, `weight Strip width` to control the gradient not far from 1, `weight pseudo geodesic` for the $E_{angle}$. Set the checker boxes `Enable PG Energy` and `Enable Strip Width` as TRUE, then run `LvSet Opt` to optimize for $\theta$ = `target angle`. The figure below shows P-curves of $\theta = 60^\circ$ and the optimization parameters. 86 | 87 | 88 | 89 | * We recommend you start from large `weight laplacian` and `weight Strip width`, and small `weight pseudo geodesic`, then gradually change the parameters as what we showed in the figure above, to improve the stability of optimization. 90 | * Note that the errors printed in the terminal are the sqrt of the energy. the example above prints out "pg, 0.00318374" meaning that the error $E_{angle} = 0.00318374^2 =$ 1.01e-5. 91 | * To use $E_{geo}$ and $E_{asy}$ for geodesic and asymptotic instead of $E_{angle}$, you can set `Enable Extreme Cases` as TRUE. If `target angle` = 0,then $E_{asy}$ is enabled; Otherwise, $E_{geo}$ is enabled. 92 | 93 | ### Optimize level sets for AAG. 94 | After obtaining the scalar fields for the two families of asymptotic curves, load the two fields using `Load First Level Set` and `Load Second Level Set`, respectively. We call the 3 scalar fields F, H and G, where G is the 3rd scalar field. Now we optimize the 3 scalar fields simultaneously. You can input the parameters as before, and there are some new parameters: 95 | * `weight_geodesic` is a ratio of the parameters of G, which means the weights for G are $weight *$`weight_geodesic`, while for F and H are $weight$. It makes the optimization easier since we can start from a vanishing G and gradually add G back. 96 | * `weight boundary` now becomes the weight for the condition $F+H+G=0$. 97 | * Under the catalog `Panel 1 -> TwoLvlStAngle` there are buttons and parameters to set up the angles between the level sets of F and H. For AAG optimization we don't need them since the asymptotic directions are totally decided by the geometry, but for AGG, PPG, etc., the angle constraints can be useful to generate visual-pleasing meshes. Remember to set the `WeightAngleOfLSs` as small values since they can only be weak constraints. 98 | 99 | * Press `AAG lvSet` to run the optimizations. You can also press `AGG LvSet` to run AGG, or `PPG LvSet` to run PPG. Press `Save AAG` to save 3 scalar fields in a row (works for AAG, AGG and PPG). The pseudo-geodesic angles $\theta_F$ and $\theta_G$ for PPG are `target angle` and `second angle`, respectively. 100 | 101 | ### Extracting quad mesh from scalar fields 102 | * Load the two scalar fields: `Load First Level Set`, `Load Second Level Set`. 103 | * For nets that only contain two families of curves, press `Ortho Fields Quads`, then you can save the generated quad mesh and some mesh structure info files. The number of parameter lines of each scalar field can be controlled by `Nbr of U lines` and `Nbr of V lines`. 104 | * For 3-webs like AAG, AGG and PPG, whose diagonals of the quads are also mesh edges, please use `Extr Pace Quad`. `Nbr of U lines` will control the density. It will sample both the u and v scalar functions with an even pace to make sure $F+H+G=0$. The 3-webs are also saved as quad meshes. The diagonal information is written into the info files generated when you are saving the quads. See the figure below showing the two scalar fields and the extracted quad mesh. 105 | 106 | 107 | 108 | ### Quad mesh optimization 109 | The optimization for PP, PPG, AAG, AGG is integrated under `QuadMeshOpt` catalog. 110 | * Load a quad mesh using `LoadQuads`. It will require you to type down the name of the quad mesh and the prefix of the info files. 111 | * Make sure you have an underlying triangle mesh loaded. You will approximate your quad mesh to the triangle mesh. Press `LoadTriangleTree` to pass the triangle mesh data into the quad mesh optimization framework. 112 | * Choose the correct `QuadType`. Press `Set&Reset` to Initialize. It will draw one iso-u line, one iso-v line and one diagonal line in the viewer, in the colors red, green and blue, respectively (as shown below). If you find that the blue line doesn't match the correct one of the two diagonal directions, you can choose the correct diagonal directions in the `FamilyOfDiag` and initialize again. You can run 1 iteration for the test: in the terminal, the estimated P-curve angles for the iso-u and iso-v curves will be printed out, it will help you to input the correct target angle $\theta$ or $\pi - \theta$. See the figure below showing the triangle mesh and the quad mesh loaded. The estimated angles are 115.555 and 115.42 after 1 iteration, while the designed angles are 60 and 120. It means the input target angles should be 180 - 60 = 120 and 120. 113 | 114 | 115 | 116 | * The parameters are: `weight boundary` for approximating to the triangle mesh, `weight laplacian` for smoothness, `weight pseudo-geodesic` for the angle condition, `weight_geodesic` as a ratio multiplied to `weight pseudo geodesic` as a weight for obtaining accurate binormal vectors. After finishing the optimizations, you can choose the generated mesh in the `Mesh Management` list, click on `Save Mesh` to save the quad mesh. And press `writePlyInfo` to save the binormal strips. 117 | 118 | ### Extracting and optimizing binormal strips 119 | As has been discussed before we can get the binormal vectors through quad mesh optimization. Actually after optimizing level sets for P-curves, the binormal strips can be easily obtained: `Nbr of U lines` controls the number of strips extracted. With the underlying triangle mesh and scalar field imported using `Load First Level Set`, press `ExtrLines&Binormals`. It will require you to type down the prefix of the files, and load the binormal files extracted from the level set optimization stage. Then, the strip files will be saved. 120 | 121 | Now we load the binormal strips using `ReadPlylines` and type down the prefix of the files. The strips will be loaded and re-sampled. The reviewer will render the strips, and these strips are already resampled once you load them. The sample density is controlled by `Nbr of U lines`. If you don't want to resample the polylines, just set it as -1. 122 | 123 | * The mission is to obtain accurate binormal vectors of the polylines, while keeping the desired P-curve angle $\theta$. The quad meshes for the strips are the offset of the polylines along binormal vectors. We can also see the inverted elements meaning that the binormal vectors between strips are not consistent. We deal with this problem later. 124 | * `weight ls mass` is to approximate the strips to the underlying surface. `weight laplacian` is to control the smoothness of the polylines. `weight_geodesic` is a ratio multiplied by `weight laplacian` to play a role as a weight for smoothing neighboring binormal vectors. This is useful for correctly determining the binormal vector direction if the neighboring two edges are almost colinear. `weight pseudo-geodesic` is for accurate binormal vectors, `WeightAngle` is for accurate $\theta$ = `target angle`. 125 | * Press `OptiPolylines` to start optimizations. Press `Save Polylines` to type down the prefix and save the polylines. `Orient&SavePlys` is to deal with the orientations of the binormal vectors: it compares the binormal vectors of the neighbouring two polylines, and orient the binormal vectors if one of the polylines is inverted. `ForcePlyBinm` is also useful: pressing it will set all the binormal vectors in the same direction. It fixes problems like binormal vectors are inverted even within one strip, and gives a good starting point so that the convergence could be improved. 126 | 127 | 128 | 129 | ### Optimizing for rectifying developable. 130 | The rectifying strips are obtained by optimizing binormal strips obtained from binormal strip optimization or quad mesh optimization. 131 | 132 | * Load binormal strips with `ReadCreases`. `weight ls mass` is to approximate the polylines to the polylines of the input binormal strips. `weight laplacian` is to provide smooth polylines. `WeightAngle` is to improve the isometry with straight flat strips. 133 | * Press `Optreases` to run the optimizations. Press `SavePolylines` to save the results. The figure below shows the parameters, the binormal strip, and the rectifying strip. This case is simple containing no reflection points, thus we are able to set `weight laplacian` = 0. 134 | * You can also use `DevV1` to try the first version of rectifying strips mentioned in our paper. 135 | 136 | 137 | 138 | ### Shading system design 139 | 140 | The majority of the related buttons are under `Shading Paras` catalog. 141 | * `Enable Extreme Cases` and `Shading` as TRUE to enable shading system design mode. 142 | * Input the `Latitude` and then `SaveRotatedMesh` to represent the mesh under global coordinates by rotating. 143 | * Initialize the scalar field (e.g. drawing strokes), and save the result. 144 | * Load the mesh and the scalar field, set up the middle point of the light source using `T0`, `P0` for the $\theta$ and $\phi$ values. Set up the considered light region using `Ttol0` and `Ptol0`. 145 | * Run the optimization by clicking `LvSet Opt`. 146 | * After getting the scalar fields, extract the strips, and optimize to improve the quality through binormal strip optimization and rectifying strip optimization. 147 | 148 | ## Some more info 149 | * There are more buttons for visualizing the level sets for AAG and the optimization errors, getting the statistics for timing, optimizing triangle meshes, designing curves with constant slope, etc. For most of the buttons you can understand them easily by their names. If you are not sure what the button does, please read our code! 150 | * It requires some technique and experience to get high-quality, visually pleasing results. In the data folder, there are some data for you to test. 151 | -------------------------------------------------------------------------------- /app/get_line_plot.py: -------------------------------------------------------------------------------- 1 | import os 2 | import glob 3 | import numpy as np 4 | import pandas as pd 5 | import json 6 | import plotly.graph_objs as go 7 | import plotly.offline as plotly 8 | import plotly.figure_factory as ff 9 | import math 10 | 11 | def plot(xx, yy, name,color): 12 | print("x",xx) 13 | print("y",yy) 14 | plot = go.Scatter( 15 | x=xx, 16 | y=yy, 17 | 18 | mode = "lines", 19 | # marker=dict(color=color,size=30), 20 | line={'color': color, 'width': 5}, 21 | # line=dict(color=color), 22 | name=name 23 | # marker=dict(color=colors[key]) 24 | ) 25 | 26 | return plot 27 | 28 | ############################################ 29 | filenbr="8" 30 | check_content=1 # 0: angle; 1: kn; 2:kg 31 | color_list=['#00b894','#0984e3','#d63031'] 32 | target="" 33 | yname="" 34 | yrange=[] 35 | ynticks=5 36 | if check_content==0: 37 | target="angle" 38 | yrange=[0,90] 39 | yname=target 40 | ynticks=5 41 | if check_content==1: 42 | target="kn" 43 | yrange=[0.18,0.22] 44 | yname=target 45 | ynticks=10 46 | if check_content==2: 47 | target="kg" 48 | yrange=[0,0.5] 49 | yname=target 50 | ynticks=10 51 | 52 | ##########################################33 53 | 54 | 55 | filepath ='../build/' 56 | 57 | 58 | filename='' 59 | counter=0 60 | plots=[] 61 | x1=[] 62 | y1=[] 63 | y2=[] 64 | y3=[] 65 | filename=filepath+filenbr+"_info.csv" 66 | tdf=pd.read_csv(filename) 67 | x1=[*range(1,21)] 68 | y1=tdf[target].values 69 | 70 | y1=np.absolute(y1); 71 | plots.append(plot(x1, y1, target,color_list[0])) 72 | 73 | 74 | layout= go.Layout( 75 | legend=dict(x=0.5, y=1), 76 | font=dict( 77 | size=36 78 | ), 79 | xaxis=dict( 80 | title="the points on the line", 81 | range=[0,20], 82 | # exponentformat='power', 83 | showticksuffix='all', 84 | showtickprefix='all', 85 | showexponent='all', 86 | # autotick=True, 87 | nticks=20, 88 | tickfont=dict( 89 | size=20 90 | ), 91 | # type='log', 92 | showline=True, 93 | linewidth=2, 94 | showgrid=True, 95 | gridwidth=1, 96 | gridcolor='grey', 97 | 98 | linecolor='black' 99 | # ticktext=xticks 100 | ), 101 | yaxis=dict( 102 | title=yname, 103 | # tickformat='.1e', 104 | # exponentformat='power', 105 | # ticks='', 106 | # range=[0,5000], 107 | # tick0=0, 108 | # dtick=1, 109 | # tickangle=-45, 110 | tickfont=dict( 111 | size=20 112 | ), 113 | # autorange=True, 114 | showline=True, 115 | linewidth=2, 116 | linecolor='black', 117 | showgrid=True, 118 | gridwidth=1, 119 | gridcolor='grey', 120 | # tick0=1, 121 | # dtick=1, 122 | # nticks=10, 123 | range=yrange, 124 | ############################################# 125 | 126 | 127 | nticks=ynticks, 128 | 129 | ############################################### 130 | ), 131 | # font=dict( 132 | # size=16 133 | # ), 134 | hovermode='closest', 135 | paper_bgcolor='rgba(0,0,0,0)', 136 | plot_bgcolor='rgba(0,0,0,0)' 137 | ) 138 | 139 | 140 | 141 | 142 | fig = go.Figure(data=plots,layout=layout) 143 | # if check_content==2 or check_content==3: 144 | # fig.update_yaxes( 145 | # # type='log' 146 | # ) 147 | # fig.update_layout(yaxis_tickformat = '%') 148 | fig.write_image(filenbr+"_info_"+target + ".svg") 149 | 150 | 151 | # fig.show() 152 | #if output is not None: 153 | # fig.write_image(output + ".svg") -------------------------------------------------------------------------------- /app/gui.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | lscif::lscif() 4 | { 5 | sea_green = Eigen::RowVector3d(70. / 255., 252. / 255., 167. / 255.); 6 | hot_red = Eigen::RowVector3d(255. / 255., 12. / 255., 17. / 255.); 7 | pure_blk = Eigen::RowVector3d(0, 0, 0); 8 | } 9 | 10 | // add a new mesh into the mesh lists, and show the new mesh along with previous showed meshes 11 | void lscif::updateMeshViewer(igl::opengl::glfw::Viewer &viewer, CGMesh &mesh) 12 | { 13 | Eigen::MatrixXd V; 14 | Eigen::MatrixXi F; 15 | 16 | MP.mesh2Matrix(mesh, V, F); 17 | // Create new data slot and set to selected 18 | if (!(viewer.data().F.rows() == 0 && viewer.data().V.rows() == 0)) 19 | { 20 | viewer.append_mesh(); 21 | } 22 | // viewer.data().clear(); 23 | viewer.data().set_mesh(V, F); 24 | viewer.data().is_visible = true; 25 | 26 | // show polygon edges 27 | Eigen::MatrixXi E; 28 | MP.meshEdges(mesh, E); 29 | Eigen::MatrixXd C = Eigen::MatrixXd::Zero(E.rows(), 3); 30 | viewer.data().set_edges(V, E, C); 31 | 32 | viewer.data().show_lines = false; 33 | viewer.data().line_width = 2.0; 34 | viewer.core().align_camera_center(viewer.data().V, viewer.data().F); 35 | 36 | VertexType.resize(V.size(), 0); 37 | } 38 | void lscif::plot2dFittingResults(igl::opengl::glfw::Viewer &viewer, const Eigen::VectorXd &xs, const Eigen::VectorXd &ys, 39 | const std::vector &ply) 40 | { 41 | // make one triangle as the mesh 42 | Eigen::MatrixXd Vt(3,3); 43 | Eigen::MatrixXi Ft(1,3); 44 | double xmin = xs.minCoeff(); 45 | double xmax = xs.maxCoeff(); 46 | double ymin = ys.minCoeff(); 47 | double ymax = ys.maxCoeff(); 48 | Vt << xmin, ymin, 0, 49 | xmin, ymax, 0, 50 | xmax, ymin, 0; 51 | Ft << 0, 1, 2; 52 | viewer.append_mesh(); 53 | viewer.data().set_mesh(Vt, Ft); 54 | viewer.data().is_visible = true; 55 | 56 | viewer.data().show_lines = false; 57 | viewer.data().line_width = 2.0; 58 | viewer.data().point_size = 5; 59 | viewer.core().align_camera_center(viewer.data().V, viewer.data().F); 60 | 61 | int vnbr = xs.size(); 62 | Eigen::MatrixXd pts(vnbr, 3), cur(100, 3); 63 | pts.col(0) = xs; 64 | pts.col(1) = ys; 65 | pts.col(2) = Eigen::VectorXd::Zero(vnbr); 66 | double itv = (xmax - xmin) / 100; 67 | for (int i = 0; i < 100; i++) 68 | { 69 | double x = xmin + i * itv; 70 | double y = polynomial_value(ply, x); 71 | // y = ply[3] * x * x *x + ply[] 72 | cur.row(i) << x, y, 0; 73 | } 74 | Eigen::MatrixXd E0(99, 3); 75 | E0 = cur.block(0, 0, 99, 3); 76 | Eigen::MatrixXd E1(99, 3); 77 | E1 = cur.block(1, 0, 99, 3); 78 | 79 | viewer.data().add_points(pts, hot_red); 80 | viewer.data().add_edges(E0, E1, sea_green); 81 | } 82 | 83 | bool lscif::pre_draw(igl::opengl::glfw::Viewer &viewer) 84 | { 85 | return false; 86 | } 87 | bool lscif::key_up(igl::opengl::glfw::Viewer &viewer, unsigned char key, int mods) 88 | { 89 | switch (key) 90 | { 91 | case '1': 92 | { 93 | keyPress_1 = false; 94 | return true; 95 | } 96 | 97 | case '2': 98 | { 99 | keyPress_2 = false; 100 | return true; 101 | } 102 | case '3': 103 | { 104 | draw_strokes = false; 105 | return true; 106 | } 107 | case GLFW_KEY_X: 108 | { 109 | keyPress_d = false; 110 | return true; 111 | } 112 | } 113 | return false; 114 | } 115 | bool lscif::key_down(igl::opengl::glfw::Viewer &viewer, unsigned char key, int mods) 116 | { 117 | switch (key) 118 | { 119 | 120 | case '1': 121 | { 122 | keyPress_1 = true; 123 | // std::cout << viewer.current_mouse_x << "___" << viewer.current_mouse_y << std::endl; 124 | return true; 125 | } 126 | 127 | case '2': 128 | { 129 | keyPress_2 = true; 130 | return true; 131 | } 132 | case '3': 133 | { 134 | draw_strokes = true; 135 | return true; 136 | } 137 | 138 | case GLFW_KEY_X: 139 | { 140 | keyPress_d = true; 141 | if (keyPress_d) 142 | { 143 | // keyPress_d = false; 144 | int id = viewer.selected_data_index; 145 | // if (id > 1) 146 | // viewer.selected_data_index = id - 2; 147 | // std::cout << "The current Mesh ID is" << viewer.selected_data_index << std::endl; 148 | if (Meshes.size() == 1) 149 | { 150 | std::cout << "Do not delete the last mesh" << std::endl; 151 | // ImGui::End(); 152 | } 153 | else 154 | { 155 | viewer.erase_mesh(id); 156 | if (id > -1) 157 | { 158 | meshFileName.erase(meshFileName.begin() + id); 159 | Meshes.erase(Meshes.begin() + id); 160 | } 161 | if (Meshes.size() > id) 162 | { 163 | viewer.selected_data_index = id; 164 | } 165 | else 166 | { 167 | 168 | viewer.selected_data_index = id - 1; 169 | } 170 | } 171 | } 172 | 173 | return true; 174 | } 175 | } 176 | 177 | return false; 178 | } 179 | 180 | // when holding "1" or "2", with mouse left button down, points can be choosen 181 | // TODO fix the bug when select one mesh but click on the other one, and when swich to 182 | // the other mesh, all the histories are recorded and reproduce points on the second mesh 183 | bool lscif::mouse_down(igl::opengl::glfw::Viewer &viewer, int button, int modifier) 184 | { 185 | if (keyPress_1) 186 | { 187 | int fid; 188 | Eigen::Vector3f bc; 189 | // Cast a ray in the view direction starting from the mouse position 190 | double x = viewer.current_mouse_x; 191 | double y = viewer.core().viewport(3) - viewer.current_mouse_y; 192 | if (igl::unproject_onto_mesh( 193 | Eigen::Vector2f(x, y), 194 | viewer.core().view, 195 | viewer.core().proj, 196 | viewer.core().viewport, 197 | viewer.data().V, 198 | viewer.data().F, 199 | fid, 200 | bc)) 201 | { 202 | int max; 203 | bc.maxCoeff(&max); 204 | int vid = viewer.data().F(fid, max); 205 | 206 | if (VertexType[vid] != 1) 207 | VertexType[vid] = 1; 208 | else 209 | VertexType[vid] = 0; 210 | 211 | std::vector fixedVid; 212 | std::vector controlVid; 213 | for (int i = 0; i < viewer.data().V.size(); i++) 214 | { 215 | if (VertexType[i] == 1) 216 | fixedVid.push_back(i); 217 | if (VertexType[i] == 2) 218 | controlVid.push_back(i); 219 | } 220 | 221 | Eigen::VectorXi vids = Eigen::Map(fixedVid.data(), fixedVid.size()); 222 | Eigen::VectorXi vids2 = Eigen::Map(controlVid.data(), controlVid.size()); 223 | 224 | std::cout << "Selected point:\nposition related to the viewer: " << viewer.current_mouse_x << "___" << viewer.current_mouse_y << std::endl; 225 | std::cout << "vid, " << vid << ", fid, " << fid << ", mass_unfiform, " << tools.mass_uniform.coeffRef(vid, vid) << std::endl; 226 | if (tools.fvalues.rows() > 0) 227 | { 228 | std::cout << "level set value " << tools.fvalues[vid] << std::endl; 229 | } 230 | Eigen::VectorXd energy; 231 | tools.show_max_pg_energy(energy); 232 | if (energy.size() > 0) 233 | { 234 | std::cout << "local energy, " << energy[vid] << std::endl; 235 | } 236 | Eigen::MatrixXd energy_all; 237 | tools.show_max_pg_energy_all(energy_all); 238 | if (energy_all.rows() == viewer.data().V.rows()) 239 | { 240 | std::cout << energy_all.row(vid) << std::endl; 241 | } 242 | else 243 | { 244 | std::cout << "the size of energy_all, " << energy_all.rows() << std::endl; 245 | } 246 | 247 | std::cout << "point position: (" << viewer.data().V(vid, 0) << ", " << viewer.data().V(vid, 1) << ", " << viewer.data().V(vid, 2) << ")\n\n"; 248 | // tools.print_info(vid); 249 | if (Given_Const_Direction) 250 | { 251 | double latitude_radian = Shading_Latitude * LSC_PI / 180.; 252 | double rho = (LSC_PI / 2 - latitude_radian); 253 | Eigen::Matrix3d rotation; 254 | rotation << 1, 0, 0, 255 | 0, cos(rho), -sin(rho), 256 | 0, sin(rho), cos(rho); 257 | Eigen::Vector3d direction_ground = Eigen::Vector3d(0, 0, -1); // the ground direction 258 | direction_ground = rotation * direction_ground; 259 | Eigen::MatrixXd ground = Eigen::MatrixXd::Ones(tools.V.rows(), tools.V.cols()); 260 | ground.col(0) *= direction_ground[0]; 261 | ground.col(1) *= direction_ground[1]; 262 | ground.col(2) *= direction_ground[2]; 263 | viewer.data().add_edges(tools.V - vector_scaling * ground, tools.V + vector_scaling * ground, pure_blk); 264 | } 265 | 266 | // viewer.data().add_points(igl::slice(viewer.data().V, vids, 1), hot_red); 267 | // viewer.data().set_points(igl::slice(viewer.data().V, vids, 1), hot_red); 268 | viewer.data().add_points(igl::slice(viewer.data().V, vids, 1), hot_red); 269 | Eigen::MatrixXd pts; 270 | tools.show_current_reference_points(pts); 271 | viewer.data().add_points(pts, sea_green); 272 | return true; 273 | } 274 | } 275 | if (keyPress_2) 276 | { 277 | int fid; 278 | Eigen::Vector3f bc; 279 | // Cast a ray in the view direction starting from the mouse position 280 | double x = viewer.current_mouse_x; 281 | double y = viewer.core().viewport(3) - viewer.current_mouse_y; 282 | if (igl::unproject_onto_mesh( 283 | Eigen::Vector2f(x, y), 284 | viewer.core().view, 285 | viewer.core().proj, 286 | viewer.core().viewport, 287 | viewer.data().V, 288 | viewer.data().F, 289 | fid, 290 | bc)) 291 | { 292 | int max; 293 | bc.maxCoeff(&max); 294 | int vid = viewer.data().F(fid, max); 295 | 296 | if (VertexType[vid] != 2) 297 | VertexType[vid] = 2; 298 | else 299 | VertexType[vid] = 0; 300 | 301 | std::vector fixedVid; 302 | std::vector controlVid; 303 | for (int i = 0; i < viewer.data().V.size(); i++) 304 | { 305 | if (VertexType[i] == 1) 306 | fixedVid.push_back(i); 307 | if (VertexType[i] == 2) 308 | controlVid.push_back(i); 309 | } 310 | 311 | Eigen::VectorXi vids = Eigen::Map(fixedVid.data(), fixedVid.size()); 312 | Eigen::VectorXi vids2 = Eigen::Map(controlVid.data(), controlVid.size()); 313 | 314 | std::cout << "Selected point:\nposition related to the viewer: " << viewer.current_mouse_x << "___" << viewer.current_mouse_y << std::endl; 315 | std::cout << "vid, " << vid << ", fid, " << fid << std::endl; 316 | if (tools.fvalues.rows() > 0) 317 | { 318 | std::cout << "level set value " << tools.fvalues[vid] << std::endl; 319 | } 320 | std::cout << "point position: (" << viewer.data().V(vid, 0) << ", " << viewer.data().V(vid, 1) << ", " << viewer.data().V(vid, 2) << ")\n\n"; 321 | viewer.data().set_points(igl::slice(viewer.data().V, vids, 1), hot_red); 322 | viewer.data().add_points(igl::slice(viewer.data().V, vids2, 1), sea_green); 323 | return true; 324 | } 325 | } 326 | 327 | left_button_down = true; 328 | return false; 329 | } 330 | bool lscif::mouse_up(igl::opengl::glfw::Viewer &viewer, int button, int modifier) 331 | { 332 | left_button_down = false; 333 | if (!project_x_tmp.empty()) // if just draw a curve 334 | { 335 | project_2dx.push_back(project_x_tmp); 336 | project_2dy.push_back(project_y_tmp); 337 | Eigen::MatrixXd Vers; 338 | draw_stroke_on_mesh(tools.lsmesh, viewer, 339 | tools.V, tools.F, project_x_tmp, 340 | project_y_tmp, Vers, flist_tmp, bclist_tmp); 341 | flist.push_back(flist_tmp); 342 | bclist.push_back(bclist_tmp); 343 | project_x_tmp.clear(); 344 | project_y_tmp.clear(); 345 | std::cout << "There are " << project_2dx.size() << " curves" << std::endl; 346 | viewer.data().add_points(Vers, hot_red); 347 | } 348 | 349 | return true; 350 | return false; 351 | } 352 | bool lscif::mouse_move(igl::opengl::glfw::Viewer &viewer, int mouse_x, int mouse_y) 353 | { 354 | if (draw_strokes && left_button_down) 355 | { 356 | // Eigen::Vector3d posEnd = igl::unproject( 357 | // Eigen::Vector3f(viewer.current_mouse_x, 358 | // viewer.core().viewport[3] - 359 | // static_cast(viewer.current_mouse_y), 360 | // viewer.down_mouse_z), 361 | // viewer.core().view, 362 | // viewer.core().proj, 363 | // viewer.core().viewport) 364 | // .template cast(); 365 | // std::cout<<"posend, "< colors; 389 | int last_selected = -1; 390 | std::string example_root_path(CHECKER_BOARD_DATA_DIR); 391 | 392 | std::string modelname = "Hall.obj"; 393 | std::string fname = example_root_path + std::string(modelname); 394 | OpenMesh::IO::read_mesh(mesh, fname); 395 | tools.init(mesh); 396 | MP.mesh2Matrix(mesh, V, F); 397 | meshFileName.push_back(modelname); 398 | Meshes.push_back(mesh); 399 | 400 | // Init the viewer 401 | 402 | viewer.plugins.push_back(&plugin); 403 | // Attach a menu plugin 404 | plugin.widgets.push_back(&menu); 405 | 406 | // Add content to the default menu window 407 | menu.callback_draw_viewer_menu = [&]() 408 | { 409 | // Draw parent menu content 410 | menu.draw_viewer_menu(); 411 | }; 412 | 413 | draw_menu1(viewer, plugin, menu); 414 | plugin.widgets.push_back(&menu_mp); 415 | 416 | // Add content to the default menu window 417 | menu_mp.callback_draw_viewer_menu = [&]() 418 | { 419 | // Draw parent menu content 420 | menu_mp.draw_viewer_menu(); 421 | }; 422 | 423 | // Draw additional windows 424 | draw_menu2(viewer, plugin, menu_mp); 425 | // Refresh selected mesh colors 426 | viewer.callback_pre_draw = 427 | [&](igl::opengl::glfw::Viewer &) 428 | { 429 | if (last_selected != viewer.selected_data_index) 430 | { 431 | for (auto &data : viewer.data_list) 432 | { 433 | data.set_colors(colors[data.id]); 434 | } 435 | viewer.data_list[viewer.selected_data_index].set_colors(Eigen::RowVector3d(0.9, 0.9, 0.1)); 436 | last_selected = viewer.selected_data_index; 437 | } 438 | return false; 439 | }; 440 | 441 | // Plot the mesh 442 | viewer.data().set_mesh(V, F); 443 | viewer.data().show_lines = false; 444 | viewer.data().is_visible = true; 445 | // show polygon edges 446 | Eigen::MatrixXi E; 447 | MP.meshEdges(mesh, E); 448 | Eigen::MatrixXd C = Eigen::MatrixXd::Zero(E.rows(), 3); 449 | viewer.data().set_edges(V, E, C); 450 | viewer.data().line_width = 2.0; 451 | viewer.data().invert_normals = true; 452 | VertexType.resize(V.size(), 0); 453 | } 454 | void launch_viewer() 455 | { 456 | igl::opengl::glfw::Viewer viewer; 457 | igl::opengl::glfw::imgui::ImGuiPlugin plugin; 458 | igl::opengl::glfw::imgui::ImGuiMenu menu, menu1; 459 | lscif viewerTools; 460 | viewerTools.viewer_launch_functions(viewer, plugin, menu, menu1); 461 | 462 | using namespace std::placeholders; 463 | auto func_predraw = std::bind(&lscif::pre_draw, &viewerTools, _1); 464 | auto func_key_down = std::bind(&lscif::key_down, &viewerTools, _1, _2, _3); 465 | auto func_mouse_down = std::bind(&lscif::mouse_down, &viewerTools, _1, _2, _3); 466 | auto func_key_up = std::bind(&lscif::key_up, &viewerTools, _1, _2, _3); 467 | auto func_mouse_move = std::bind(&lscif::mouse_move, &viewerTools, _1, _2, _3); 468 | auto func_mouse_up = std::bind(&lscif::mouse_up, &viewerTools, _1, _2, _3); 469 | 470 | viewer.callback_pre_draw = func_predraw; //&pre_draw; 471 | viewer.callback_key_down = func_key_down; 472 | viewer.callback_mouse_down = func_mouse_down; 473 | viewer.callback_key_up = func_key_up; 474 | viewer.callback_mouse_move = func_mouse_move; 475 | viewer.callback_mouse_up = func_mouse_up; 476 | 477 | viewer.core().is_animating = false; 478 | viewer.core().animation_max_fps = 30.; 479 | viewer.core().background_color = Eigen::Vector4f(1, 1, 1, 100); 480 | viewer.launch(); 481 | 482 | } -------------------------------------------------------------------------------- /app/gui.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | // -------------------- OpenMesh 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | 25 | typedef OpenMesh::PolyMesh_ArrayKernelT<> CGMesh; 26 | 27 | // the interface operators 28 | class lscif 29 | { 30 | private: 31 | #ifdef _WIN32 32 | std::string spliter = "\\"; 33 | #else 34 | std::string spliter = "/"; 35 | #endif 36 | public: 37 | lscif(); 38 | igl::Timer timer_global; 39 | double time_total = 0; 40 | int iteration_total = 0; 41 | std::vector errorlist; 42 | std::vector timelist; 43 | 44 | Eigen::RowVector3d sea_green; 45 | Eigen::RowVector3d hot_red; 46 | Eigen::RowVector3d pure_blk; 47 | MeshProcessing MP; 48 | 49 | // This V and F are only for visulization of the default mesh 50 | Eigen::MatrixXd V; 51 | Eigen::MatrixXi F; 52 | 53 | bool keyPress_1 = false; 54 | bool keyPress_2 = false; 55 | bool keyPress_d = false; 56 | 57 | // Optimization Parameters 58 | double weigth_closeness = 0.0; 59 | double refer_AveEL = 1; 60 | double weight_mass = 100.; // weight of the mass function to 61 | double weight_boundary = 100; // weight of the boundary condition 62 | double weight_laplacian = 0.001; 63 | double weight_pseudo_geodesic = 0.01; 64 | double weight_strip_width = 0.0001; 65 | double weight_geodesic = 3; 66 | // double weight_shading = 0.01; // For shading: the light is othogonal to the tangent direction 67 | 68 | double maximal_step_length = 0.5; 69 | bool enable_extreme_cases = false; 70 | bool Given_Const_Direction = false; 71 | int which_levelset = 0; 72 | bool fix_angle_of_two_levelsets = false; 73 | double angle_between_two_levelsets = 60; 74 | double weight_fix_two_ls_angle = 0; 75 | 76 | // Tracing Parameters 77 | int which_seg_id = 0; // the face id of which we will assign value to 78 | int nbr_of_intervals = 3; 79 | int start_bnd_he = 0; // start boundary halfedge, for init the values by assign values on some edges 80 | int nbr_edges = 20; 81 | int id_debug_global = 5; 82 | double target_angle = 60; 83 | double target_angle_2 = 60; 84 | double start_angle = 60; 85 | double threadshold_angel_degree = 150; // the threadshold for detecting boundary corners 86 | int dbg_int = 0; 87 | int dbg_int2 = 5; 88 | double dbg_dbl = 30; 89 | double dbg_dbl2 = 60; 90 | double vector_scaling = 1; 91 | double vector_scaling2 = 0; 92 | int extracted_nbr = 5; 93 | bool debug_flag = false; 94 | std::vector fixedVertices; 95 | double ptInx = 0; 96 | double ptIny = 0; 97 | double ptInz = 0; 98 | int TracingType = 0; 99 | // int QuadOptType = 0; 100 | 101 | int OpIter = 10; 102 | CGMesh mesh; 103 | CGMesh RefMesh; 104 | bool enable_pg_energy_checkbox = false; 105 | bool enable_strip_width_checkbox = false; 106 | bool fixBoundary_checkbox = false; 107 | 108 | // mesh processing for level set 109 | int nbr_lines_first_ls = 30; 110 | int nbr_lines_second_ls = 30; 111 | Eigen::VectorXd readed_LS1; 112 | Eigen::VectorXd readed_LS2; 113 | Eigen::VectorXd readed_LS3; 114 | std::vector readed_mesh1; 115 | CGMesh readed_mesh2; 116 | int Nbr_Iterations_Mesh_Opt = 10; 117 | double weight_Mesh_mass = 100; 118 | double weight_Mesh_smoothness = 0.001; 119 | double weight_Mesh_edgelength = 0.01; 120 | double weight_Mesh_pesudo_geodesic = 30; 121 | double Mesh_opt_max_step_length = 0.1; 122 | double weight_Mesh_approximation = 0.01; 123 | 124 | int update_ver_id = 0; 125 | int ring_nbr; 126 | std::vector update_verlist; 127 | 128 | bool selectFEV[30] = {true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true}; 129 | std::vector meshFileName; 130 | std::vector Meshes; 131 | lsTools tools; 132 | PolyOpt poly_tool; 133 | QuadOpt quad_tool; 134 | double weight_angle = 0; 135 | double InputPx = 0; // theta 136 | double InputPy = 180; // phi 137 | 138 | double InputPx1 = 0; 139 | double InputPy1 = 180; 140 | 141 | double InputThetaTol = 23.5; // give 10 degrees of tolerance 142 | double InputThetaTol1 = 23.5; // give 10 degrees of tolerance 143 | double InputPhiTol = 45; // give 10 degrees of tolerance 144 | double InputPhiTol1 = 45; // give 10 degrees of tolerance 145 | int vinrow = -1; 146 | 147 | double Shading_Latitude = 34; 148 | bool shading_init = false; 149 | bool let_ray_through = false; 150 | bool let_ray_reflect = false; 151 | bool recompute_auxiliaries = false; 152 | 153 | double weight_binormal = 1; 154 | double weight_smt_binormal = 0; 155 | double weight_endpoint_ratio = 1; 156 | bool pick_single_ply = false; 157 | int pick_line_id = 0; 158 | std::vector> Poly_readed; 159 | std::vector> Bino_readed; 160 | std::vector> Poly_opt; 161 | std::vector> Bino_opt; 162 | 163 | std::vector VertexType; 164 | 165 | // interaction stuff 166 | bool draw_strokes = false; 167 | bool left_button_down = false; 168 | std::vector> project_2dx; 169 | std::vector> project_2dy; 170 | std::vector project_x_tmp; 171 | std::vector project_y_tmp; 172 | std::vector> flist; 173 | std::vector> bclist; 174 | std::vector flist_tmp; 175 | std::vector bclist_tmp; 176 | std::vector> project_pts; 177 | AutoRunArgs autorunner[2]; 178 | 179 | // functional angles stuff. 180 | bool Disable_Changed_Angles = false; 181 | bool Use_Fitting_Angles = false; 182 | bool Use_Opt_Only_BNMS = false; 183 | 184 | bool AxisFixedForSlopes = false; 185 | bool AnglesFixedForSlopes = false; 186 | double AxisFixInX = 0; 187 | double AxisFixInY = 0; 188 | double AxisFixInZ = 1; 189 | double AngleFixIn = 45; 190 | 191 | bool CentroidFixedForNodes = false; 192 | bool RadiusFixedForNodes = false; 193 | bool FindCandRForNodes = false; // take C and R as variables 194 | double CentroidFixInX = 0; 195 | double CentroidFixInY = 0; 196 | double CentroidFixInZ = 1; 197 | double RadiusFixIn = 45; 198 | 199 | 200 | // add a new mesh into the mesh lists, and show the new mesh along with previous showed meshes 201 | void updateMeshViewer(igl::opengl::glfw::Viewer &viewer, CGMesh &mesh); 202 | 203 | void plot2dFittingResults(igl::opengl::glfw::Viewer &viewer, const Eigen::VectorXd& xs, const Eigen::VectorXd& ys, 204 | const std::vector &ply); 205 | 206 | bool pre_draw(igl::opengl::glfw::Viewer &viewer); 207 | bool key_up(igl::opengl::glfw::Viewer &viewer, unsigned char key, int mods); 208 | bool key_down(igl::opengl::glfw::Viewer &viewer, unsigned char key, int mods); 209 | 210 | // when holding "1" or "2", with mouse left button down, points can be choosen 211 | // TODO fix the bug when select one mesh but click on the other one, and when swich to 212 | // the other mesh, all the histories are recorded and reproduce points on the second mesh 213 | bool mouse_down(igl::opengl::glfw::Viewer &viewer, int button, int modifier); 214 | bool mouse_up(igl::opengl::glfw::Viewer &viewer, int button, int modifier); 215 | bool mouse_move(igl::opengl::glfw::Viewer &viewer, int mouse_x, int mouse_y); 216 | 217 | void show_axis(Eigen::MatrixXd &E0, Eigen::MatrixXd &E1, double ratio); 218 | 219 | void viewer_launch_functions(igl::opengl::glfw::Viewer& viewer, igl::opengl::glfw::imgui::ImGuiPlugin &plugin, 220 | igl::opengl::glfw::imgui::ImGuiMenu &menu, igl::opengl::glfw::imgui::ImGuiMenu &menu_mp); 221 | void draw_menu1(igl::opengl::glfw::Viewer& viewer, igl::opengl::glfw::imgui::ImGuiPlugin &plugin, 222 | igl::opengl::glfw::imgui::ImGuiMenu &menu); 223 | void draw_menu2(igl::opengl::glfw::Viewer& viewer, igl::opengl::glfw::imgui::ImGuiPlugin &plugin, 224 | igl::opengl::glfw::imgui::ImGuiMenu &menu); 225 | }; 226 | 227 | void launch_viewer(); -------------------------------------------------------------------------------- /app/lsc_main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | // ---------------------------------------------------------------------------- 4 | 5 | int main(int argc, char *argv[]) 6 | { 7 | // lscif viewerTools; 8 | 9 | //viewerTools.viewer_launch_functions(); 10 | 11 | launch_viewer(); 12 | } 13 | -------------------------------------------------------------------------------- /app/main.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | int main(int argc, char *argv[]) 14 | { 15 | runRotateArrows(0.15); 16 | } -------------------------------------------------------------------------------- /cmake/DownloadProject.CMakeLists.cmake.in: -------------------------------------------------------------------------------- 1 | # Distributed under the OSI-approved MIT License. See accompanying 2 | # file LICENSE or https://github.com/Crascit/DownloadProject for details. 3 | 4 | cmake_minimum_required(VERSION 2.8.2) 5 | 6 | project(${DL_ARGS_PROJ}-download NONE) 7 | 8 | include(ExternalProject) 9 | ExternalProject_Add(${DL_ARGS_PROJ}-download 10 | ${DL_ARGS_UNPARSED_ARGUMENTS} 11 | SOURCE_DIR "${DL_ARGS_SOURCE_DIR}" 12 | BINARY_DIR "${DL_ARGS_BINARY_DIR}" 13 | CONFIGURE_COMMAND "" 14 | BUILD_COMMAND "" 15 | INSTALL_COMMAND "" 16 | TEST_COMMAND "" 17 | ) 18 | -------------------------------------------------------------------------------- /cmake/DownloadProject.cmake: -------------------------------------------------------------------------------- 1 | # Distributed under the OSI-approved MIT License. See accompanying 2 | # file LICENSE or https://github.com/Crascit/DownloadProject for details. 3 | # 4 | # MODULE: DownloadProject 5 | # 6 | # PROVIDES: 7 | # download_project( PROJ projectName 8 | # [PREFIX prefixDir] 9 | # [DOWNLOAD_DIR downloadDir] 10 | # [SOURCE_DIR srcDir] 11 | # [BINARY_DIR binDir] 12 | # [QUIET] 13 | # ... 14 | # ) 15 | # 16 | # Provides the ability to download and unpack a tarball, zip file, git repository, 17 | # etc. at configure time (i.e. when the cmake command is run). How the downloaded 18 | # and unpacked contents are used is up to the caller, but the motivating case is 19 | # to download source code which can then be included directly in the build with 20 | # add_subdirectory() after the call to download_project(). Source and build 21 | # directories are set up with this in mind. 22 | # 23 | # The PROJ argument is required. The projectName value will be used to construct 24 | # the following variables upon exit (obviously replace projectName with its actual 25 | # value): 26 | # 27 | # projectName_SOURCE_DIR 28 | # projectName_BINARY_DIR 29 | # 30 | # The SOURCE_DIR and BINARY_DIR arguments are optional and would not typically 31 | # need to be provided. They can be specified if you want the downloaded source 32 | # and build directories to be located in a specific place. The contents of 33 | # projectName_SOURCE_DIR and projectName_BINARY_DIR will be populated with the 34 | # locations used whether you provide SOURCE_DIR/BINARY_DIR or not. 35 | # 36 | # The DOWNLOAD_DIR argument does not normally need to be set. It controls the 37 | # location of the temporary CMake build used to perform the download. 38 | # 39 | # The PREFIX argument can be provided to change the base location of the default 40 | # values of DOWNLOAD_DIR, SOURCE_DIR and BINARY_DIR. If all of those three arguments 41 | # are provided, then PREFIX will have no effect. The default value for PREFIX is 42 | # CMAKE_BINARY_DIR. 43 | # 44 | # The QUIET option can be given if you do not want to show the output associated 45 | # with downloading the specified project. 46 | # 47 | # In addition to the above, any other options are passed through unmodified to 48 | # ExternalProject_Add() to perform the actual download, patch and update steps. 49 | # The following ExternalProject_Add() options are explicitly prohibited (they 50 | # are reserved for use by the download_project() command): 51 | # 52 | # CONFIGURE_COMMAND 53 | # BUILD_COMMAND 54 | # INSTALL_COMMAND 55 | # TEST_COMMAND 56 | # 57 | # Only those ExternalProject_Add() arguments which relate to downloading, patching 58 | # and updating of the project sources are intended to be used. Also note that at 59 | # least one set of download-related arguments are required. 60 | # 61 | # If using CMake 3.2 or later, the UPDATE_DISCONNECTED option can be used to 62 | # prevent a check at the remote end for changes every time CMake is run 63 | # after the first successful download. See the documentation of the ExternalProject 64 | # module for more information. It is likely you will want to use this option if it 65 | # is available to you. Note, however, that the ExternalProject implementation contains 66 | # bugs which result in incorrect handling of the UPDATE_DISCONNECTED option when 67 | # using the URL download method or when specifying a SOURCE_DIR with no download 68 | # method. Fixes for these have been created, the last of which is scheduled for 69 | # inclusion in CMake 3.8.0. Details can be found here: 70 | # 71 | # https://gitlab.kitware.com/cmake/cmake/commit/bdca68388bd57f8302d3c1d83d691034b7ffa70c 72 | # https://gitlab.kitware.com/cmake/cmake/issues/16428 73 | # 74 | # If you experience build errors related to the update step, consider avoiding 75 | # the use of UPDATE_DISCONNECTED. 76 | # 77 | # EXAMPLE USAGE: 78 | # 79 | # include(DownloadProject) 80 | # download_project(PROJ googletest 81 | # GIT_REPOSITORY https://github.com/google/googletest.git 82 | # GIT_TAG master 83 | # UPDATE_DISCONNECTED 1 84 | # QUIET 85 | # ) 86 | # 87 | # add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR}) 88 | # 89 | #======================================================================================== 90 | 91 | 92 | set(_DownloadProjectDir "${CMAKE_CURRENT_LIST_DIR}") 93 | 94 | include(CMakeParseArguments) 95 | 96 | function(download_project) 97 | 98 | set(options QUIET) 99 | set(oneValueArgs 100 | PROJ 101 | PREFIX 102 | DOWNLOAD_DIR 103 | SOURCE_DIR 104 | BINARY_DIR 105 | # Prevent the following from being passed through 106 | CONFIGURE_COMMAND 107 | BUILD_COMMAND 108 | INSTALL_COMMAND 109 | TEST_COMMAND 110 | ) 111 | set(multiValueArgs "") 112 | 113 | cmake_parse_arguments(DL_ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 114 | 115 | # Hide output if requested 116 | if (DL_ARGS_QUIET) 117 | set(OUTPUT_QUIET "OUTPUT_QUIET") 118 | else() 119 | unset(OUTPUT_QUIET) 120 | message(STATUS "Downloading/updating ${DL_ARGS_PROJ}") 121 | endif() 122 | 123 | # Set up where we will put our temporary CMakeLists.txt file and also 124 | # the base point below which the default source and binary dirs will be. 125 | # The prefix must always be an absolute path. 126 | if (NOT DL_ARGS_PREFIX) 127 | set(DL_ARGS_PREFIX "${CMAKE_BINARY_DIR}") 128 | else() 129 | get_filename_component(DL_ARGS_PREFIX "${DL_ARGS_PREFIX}" ABSOLUTE 130 | BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}") 131 | endif() 132 | if (NOT DL_ARGS_DOWNLOAD_DIR) 133 | set(DL_ARGS_DOWNLOAD_DIR "${DL_ARGS_PREFIX}/${DL_ARGS_PROJ}-download") 134 | endif() 135 | 136 | # Ensure the caller can know where to find the source and build directories 137 | if (NOT DL_ARGS_SOURCE_DIR) 138 | set(DL_ARGS_SOURCE_DIR "${DL_ARGS_PREFIX}/${DL_ARGS_PROJ}-src") 139 | endif() 140 | if (NOT DL_ARGS_BINARY_DIR) 141 | set(DL_ARGS_BINARY_DIR "${DL_ARGS_PREFIX}/${DL_ARGS_PROJ}-build") 142 | endif() 143 | set(${DL_ARGS_PROJ}_SOURCE_DIR "${DL_ARGS_SOURCE_DIR}" PARENT_SCOPE) 144 | set(${DL_ARGS_PROJ}_BINARY_DIR "${DL_ARGS_BINARY_DIR}" PARENT_SCOPE) 145 | 146 | # The way that CLion manages multiple configurations, it causes a copy of 147 | # the CMakeCache.txt to be copied across due to it not expecting there to 148 | # be a project within a project. This causes the hard-coded paths in the 149 | # cache to be copied and builds to fail. To mitigate this, we simply 150 | # remove the cache if it exists before we configure the new project. It 151 | # is safe to do so because it will be re-generated. Since this is only 152 | # executed at the configure step, it should not cause additional builds or 153 | # downloads. 154 | file(REMOVE "${DL_ARGS_DOWNLOAD_DIR}/CMakeCache.txt") 155 | 156 | # Create and build a separate CMake project to carry out the download. 157 | # If we've already previously done these steps, they will not cause 158 | # anything to be updated, so extra rebuilds of the project won't occur. 159 | # Make sure to pass through CMAKE_MAKE_PROGRAM in case the main project 160 | # has this set to something not findable on the PATH. 161 | configure_file("${_DownloadProjectDir}/DownloadProject.CMakeLists.cmake.in" 162 | "${DL_ARGS_DOWNLOAD_DIR}/CMakeLists.txt") 163 | execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" 164 | -D "CMAKE_MAKE_PROGRAM:FILE=${CMAKE_MAKE_PROGRAM}" 165 | . 166 | RESULT_VARIABLE result 167 | ${OUTPUT_QUIET} 168 | WORKING_DIRECTORY "${DL_ARGS_DOWNLOAD_DIR}" 169 | ) 170 | if(result) 171 | message(FATAL_ERROR "CMake step for ${DL_ARGS_PROJ} failed: ${result}") 172 | endif() 173 | execute_process(COMMAND ${CMAKE_COMMAND} --build . 174 | RESULT_VARIABLE result 175 | ${OUTPUT_QUIET} 176 | WORKING_DIRECTORY "${DL_ARGS_DOWNLOAD_DIR}" 177 | ) 178 | if(result) 179 | message(FATAL_ERROR "Build step for ${DL_ARGS_PROJ} failed: ${result}") 180 | endif() 181 | 182 | endfunction() 183 | -------------------------------------------------------------------------------- /cmake/FindGMP.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the GMP librairies 2 | # GMP_FOUND - system has GMP lib 3 | # GMP_INCLUDE_DIRS - the GMP include directory 4 | # GMP_LIBRARIES - Libraries needed to use GMP 5 | 6 | if (GMP_INCLUDE_DIRS AND GMP_LIBRARIES) 7 | # Already in cache, be silent 8 | set(GMP_FIND_QUIETLY TRUE) 9 | endif (GMP_INCLUDE_DIRS AND GMP_LIBRARIES) 10 | 11 | 12 | 13 | #if(WIN32) 14 | # if(CYGWIN) 15 | # triwild_download_gmp_cygwin() 16 | #elseif(MINGW) 17 | # triwild_download_gmp_mingw() 18 | #else() 19 | # triwild_download_gmp_vc() 20 | #endif() 21 | 22 | #SET(GMP_WINDOWS_PATH ${THIRD_PARTY_DIR}/gmp) 23 | #endif() 24 | 25 | 26 | find_path(GMP_INCLUDE_DIRS NAMES gmp.h PATHS $ENV{GMP_INC} ${GMP_WINDOWS_PATH}) 27 | find_library(GMP_LIBRARIES NAMES gmp libgmp PATHS $ENV{GMP_LIB} ${GMP_WINDOWS_PATH}) 28 | find_library(GMPXX_LIBRARIES NAMES gmpxx libgmpxx PATHS $ENV{GMP_LIB} ${GMP_WINDOWS_PATH}) 29 | #MESSAGE(STATUS "GMP libs: " ${GMP_LIBRARIES} " " ${GMPXX_LIBRARIES} ) 30 | 31 | include(FindPackageHandleStandardArgs) 32 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(GMP DEFAULT_MSG GMP_INCLUDE_DIRS GMP_LIBRARIES) 33 | 34 | mark_as_advanced(GMP_INCLUDE_DIRS GMP_LIBRARIES) 35 | MESSAGE(STATUS "GMP libs: " ${GMP_LIBRARIES} " " ${GMP_INCLUDE_DIRS} ) -------------------------------------------------------------------------------- /cmake/PrependCurrentPath.cmake: -------------------------------------------------------------------------------- 1 | function(prepend_current_path SOURCE_FILES) 2 | # Use recursive substitution to expand SOURCE_FILES 3 | unset(MODIFIED) 4 | foreach(SOURCE_FILE IN ITEMS ${${SOURCE_FILES}}) 5 | list(APPEND MODIFIED "${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE_FILE}") 6 | endforeach() 7 | set(${SOURCE_FILES} ${MODIFIED} PARENT_SCOPE) 8 | endfunction() 9 | -------------------------------------------------------------------------------- /cmake/UseColors.cmake: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # When using Clang, there is nothing to do: colors are enabled by default 3 | # When using GCC >= 4.9, colored diagnostics can be enabled natively 4 | # When using an older version, one can use gccfilter (a perl script) 5 | # 6 | # I do not recommend using gccfilter as of now (May 2014), because it seems to 7 | # be bugged. But if you still want to try, here is how to install it on Ubuntu: 8 | # 9 | # 10 | # 1) Download the perl script and add it to you $PATH 11 | # mkdir -p ~/.local/bin 12 | # wget -P ~/.local/bin http://www.mixtion.org/gccfilter/gccfilter 13 | # chmod +x ~/local/bin/gccfilter 14 | # echo 'PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc 15 | # 16 | # 2) Install the dependencies 17 | # * Term::ANSIColor 18 | # sudo cpan 19 | # cpan> install Term::ANSIColor 20 | # * The module "Getopt::Long" is included in "perl-base" 21 | # * For Getopt::ArgvFile and Regexp::Common ... 22 | # sudo apt-get install libgetopt-argvfile-perl libregexp-common-perl 23 | # 24 | ################################################################################ 25 | 26 | if(CMAKE_COMPILER_IS_GNUCXX) 27 | # If GCC >= 4.9, just activate the right option 28 | if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9) 29 | message(STATUS "GCC >= 4.9 detected, enabling colored diagnostics") 30 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=auto") 31 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fdiagnostics-color=auto") 32 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fdiagnostics-color=auto") 33 | return() 34 | endif() 35 | # If GCC < 4.9, maybe we can use gccfilter 36 | find_program(GCC_FILTER gccfilter) 37 | if(GCC_FILTER) 38 | option(COLOR_GCC "Use GCCFilter to color compiler output messages" OFF) 39 | set(COLOR_GCC_OPTIONS "-c -r -w" CACHE STRING "Arguments that are passed to gccfilter when output coloring is switchend on. Defaults to -c -r -w.") 40 | if(COLOR_GCC) 41 | set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${GCC_FILTER} ${COLOR_GCC_OPTIONS}") 42 | message(STATUS "Using gccfilter for colored diagnostics") 43 | endif() 44 | endif() 45 | endif() 46 | -------------------------------------------------------------------------------- /cmake/Warnings.cmake: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | cmake_minimum_required(VERSION 2.6.3) 3 | ################################################################################ 4 | # See comments and discussions here: 5 | # http://stackoverflow.com/questions/5088460/flags-to-enable-thorough-and-verbose-g-warnings 6 | ################################################################################ 7 | 8 | if(TARGET warnings::all) 9 | return() 10 | endif() 11 | 12 | set(MY_FLAGS 13 | -Wall 14 | -Wextra 15 | -pedantic 16 | 17 | # -Wconversion 18 | #-Wunsafe-loop-optimizations # broken with C++11 loops 19 | -Wunused 20 | 21 | -Wno-long-long 22 | -Wpointer-arith 23 | -Wformat=2 24 | -Wuninitialized 25 | -Wcast-qual 26 | -Wmissing-noreturn 27 | -Wmissing-format-attribute 28 | -Wredundant-decls 29 | 30 | -Werror=implicit 31 | -Werror=nonnull 32 | -Werror=init-self 33 | -Werror=main 34 | -Werror=missing-braces 35 | -Werror=sequence-point 36 | -Werror=return-type 37 | -Werror=trigraphs 38 | -Werror=array-bounds 39 | -Werror=write-strings 40 | -Werror=address 41 | -Werror=int-to-pointer-cast 42 | -Werror=pointer-to-int-cast 43 | 44 | -Wno-unused-variable 45 | -Wunused-but-set-variable 46 | -Wno-unused-parameter 47 | 48 | #-Weffc++ 49 | -Wno-old-style-cast 50 | # -Wno-sign-conversion 51 | #-Wsign-conversion 52 | 53 | -Wshadow 54 | 55 | -Wstrict-null-sentinel 56 | -Woverloaded-virtual 57 | -Wsign-promo 58 | -Wstack-protector 59 | -Wstrict-aliasing 60 | -Wstrict-aliasing=2 61 | 62 | # Warn whenever a switch statement has an index of enumerated type and 63 | # lacks a case for one or more of the named codes of that enumeration. 64 | -Wswitch 65 | # This is annoying if all cases are already covered. 66 | # -Wswitch-default 67 | # This is annoying if there is a default that covers the rest. 68 | # -Wswitch-enum 69 | -Wswitch-unreachable 70 | # -Wcovered-switch-default # Annoying warnings from nlohmann::json 71 | 72 | -Wcast-align 73 | -Wdisabled-optimization 74 | #-Winline # produces warning on default implicit destructor 75 | -Winvalid-pch 76 | # -Wmissing-include-dirs 77 | -Wpacked 78 | -Wno-padded 79 | -Wstrict-overflow 80 | -Wstrict-overflow=2 81 | 82 | -Wctor-dtor-privacy 83 | -Wlogical-op 84 | -Wnoexcept 85 | -Woverloaded-virtual 86 | # -Wundef 87 | 88 | -Wnon-virtual-dtor 89 | -Wdelete-non-virtual-dtor 90 | -Werror=non-virtual-dtor 91 | -Werror=delete-non-virtual-dtor 92 | 93 | -Wno-sign-compare 94 | 95 | ########### 96 | # GCC 6.1 # 97 | ########### 98 | 99 | -Wnull-dereference 100 | -fdelete-null-pointer-checks 101 | -Wduplicated-cond 102 | -Wmisleading-indentation 103 | 104 | #-Weverything 105 | 106 | ########################### 107 | # Enabled by -Weverything # 108 | ########################### 109 | 110 | #-Wdocumentation 111 | #-Wdocumentation-unknown-command 112 | #-Wfloat-equal 113 | 114 | #-Wglobal-constructors 115 | #-Wexit-time-destructors 116 | #-Wmissing-variable-declarations 117 | #-Wextra-semi 118 | #-Wweak-vtables 119 | #-Wno-source-uses-openmp 120 | #-Wdeprecated 121 | #-Wnewline-eof 122 | #-Wmissing-prototypes 123 | 124 | #-Wno-c++98-compat 125 | #-Wno-c++98-compat-pedantic 126 | 127 | ########################### 128 | # Need to check if those are still valid today 129 | ########################### 130 | 131 | #-Wimplicit-atomic-properties 132 | #-Wmissing-declarations 133 | #-Wmissing-prototypes 134 | #-Wstrict-selector-match 135 | #-Wundeclared-selector 136 | #-Wunreachable-code 137 | 138 | # Not a warning, but enable link-time-optimization 139 | # TODO: Check out modern CMake version of setting this flag 140 | # https://cmake.org/cmake/help/latest/module/CheckIPOSupported.html 141 | #-flto 142 | 143 | # Gives meaningful stack traces 144 | -fno-omit-frame-pointer 145 | -fno-optimize-sibling-calls 146 | ) 147 | 148 | # Flags above don't make sense for MSVC 149 | if(MSVC) 150 | set(MY_FLAGS) 151 | endif() 152 | 153 | include(CheckCXXCompilerFlag) 154 | 155 | add_library(warnings_all INTERFACE) 156 | add_library(warnings::all ALIAS warnings_all) 157 | 158 | foreach(FLAG IN ITEMS ${MY_FLAGS}) 159 | string(REPLACE "=" "-" FLAG_VAR "${FLAG}") 160 | if(NOT DEFINED IS_SUPPORTED_${FLAG_VAR}) 161 | check_cxx_compiler_flag("${FLAG}" IS_SUPPORTED_${FLAG_VAR}) 162 | endif() 163 | if(IS_SUPPORTED_${FLAG_VAR}) 164 | target_compile_options(warnings_all INTERFACE ${FLAG}) 165 | endif() 166 | endforeach() 167 | -------------------------------------------------------------------------------- /cmake/lscDependencies.cmake: -------------------------------------------------------------------------------- 1 | # Prepare dependencies 2 | # 3 | # For each third-party library, if the appropriate target doesn't exist yet, 4 | # download it via external project, and add_subdirectory to build it alongside 5 | # this project. 6 | 7 | 8 | # Download and update 3rd_party libraries 9 | list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) 10 | list(REMOVE_DUPLICATES CMAKE_MODULE_PATH) 11 | include(${PROJECT_NAME}DownloadExternal) 12 | 13 | ################################################################################ 14 | # Required libraries 15 | ################################################################################ 16 | 17 | # Eigen 18 | if(NOT TARGET Eigen3::Eigen) 19 | sparse_interp_download_eigen() 20 | add_library(${PROJECT_NAME}_eigen INTERFACE) 21 | target_include_directories(${PROJECT_NAME}_eigen SYSTEM INTERFACE 22 | $ 23 | $ 24 | ) 25 | set_property(TARGET ${PROJECT_NAME}_eigen PROPERTY EXPORT_NAME Eigen3::Eigen) 26 | add_library(Eigen3::Eigen ALIAS ${PROJECT_NAME}_eigen) 27 | # Set Eigen directory environment variable (needed for EVCTCD) 28 | set(ENV{EIGEN3_INCLUDE_DIR} "${SPARSE_EXTERNAL}/eigen/") 29 | endif() 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | # libigl 38 | if(TARGET igl::core) 39 | return() 40 | endif() 41 | 42 | include(FetchContent) 43 | FetchContent_Declare( 44 | libigl 45 | GIT_REPOSITORY https://github.com/libigl/libigl.git 46 | GIT_TAG v2.4.0 47 | ) 48 | FetchContent_MakeAvailable(libigl) 49 | 50 | 51 | # tinyad 52 | 53 | # FetchContent_Declare( 54 | # tinyad 55 | # GIT_REPOSITORY https://github.com/patr-schm/tinyad.git 56 | # GIT_TAG 75093e14ef0d7bb39657c5f3b2aba1251afaa38c 57 | # ) 58 | # FetchContent_GetProperties(tinyad) 59 | # if(NOT tinyad_POPULATED) 60 | # # Fetch the content using previously declared details 61 | # FetchContent_Populate(tinyad) 62 | # message(STATUS "tinyad_SOURCE_DIR: ${tinyad_SOURCE_DIR}") 63 | # message(STATUS "tinyad_BINARY_DIR: ${tinyad_BINARY_DIR}") 64 | # add_subdirectory(${tinyad_SOURCE_DIR} ${tinyad_BINARY_DIR}) 65 | # endif() 66 | 67 | # # ANN 68 | # set(ANN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/external/ann.zip") 69 | # set(ANN_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/ann" ) 70 | # if(EXISTS "${ANN_FILE}" OR EXISTS "${ANN_PATH}") 71 | # message("LSC: ANN source file exists") 72 | # else() 73 | # if(NOT EXISTS "${ANN_FILE}") 74 | # message("LSC: downloading ANN") 75 | # file(DOWNLOAD https://www.cs.umd.edu/~mount/ANN/Files/1.1.2/ann_1.1.2.zip ${ANN_FILE}) 76 | # endif() 77 | # endif() 78 | # if(NOT EXISTS "${ANN_PATH}") 79 | # message("LSC: ANN unzipping") 80 | # file(ARCHIVE_EXTRACT INPUT ${ANN_FILE} DESTINATION ${ANN_PATH}) 81 | # message("LSC: ANN is unzipped") 82 | # else() 83 | # message("LSC: ANN is already unzipped") 84 | # endif() 85 | # message("LSC: ann file: ${ANN_PATH}/ann_1.1.2/") 86 | # if (WIN32) 87 | # set(ANN_MAKE gmake) # Windows 88 | # elseif (APPLE) 89 | # set(ANN_MAKE make macosx-g++) 90 | # else () 91 | # set(ANN_MAKE make)#linux 92 | # endif() 93 | 94 | # if(NOT WIN32) 95 | # if (NOT EXISTS "${ANN_PATH}/ann_1.1.2/lib/libANN.a") # TODO add more lib file paths for windows 96 | # message("LSC: ANN starting installing") 97 | # execute_process(COMMAND ${ANN_MAKE} -C ${ANN_PATH}/ann_1.1.2 ) 98 | # message("LSC: ANN get installed") 99 | # else() 100 | # message("LSC: ANN is already installed") 101 | # endif() 102 | # endif() 103 | 104 | #################openmesh 105 | set(OM_FILE "${CMAKE_CURRENT_SOURCE_DIR}/external/openmesh.zip") 106 | set(OM_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/openmesh" ) 107 | if(EXISTS "${OM_FILE}" OR EXISTS "${OM_PATH}") 108 | message("LSC: OpenMesh source file exists") 109 | else() 110 | if(NOT EXISTS "${OM_FILE}") 111 | message("LSC: downloading OpenMesh") 112 | file(DOWNLOAD https://www.graphics.rwth-aachen.de/media/openmesh_static/Releases/9.0/OpenMesh-9.0.zip ${OM_FILE}) 113 | endif() 114 | endif() 115 | if(NOT EXISTS "${OM_PATH}") 116 | message("LSC: OpenMesh unzipping") 117 | file(ARCHIVE_EXTRACT INPUT ${OM_FILE} DESTINATION ${OM_PATH}) 118 | message("LSC: OpenMesh is unzipped") 119 | else() 120 | message("LSC: OpenMesh is already unzipped") 121 | endif() 122 | message("LSC: OpenMesh file: ${OM_PATH}/OpenMesh-9.0.0/") 123 | # if(NOT WIN32) 124 | # execute_process(COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/cmake/install_openmesh.py) 125 | # if (NOT EXISTS "${OM_PATH}/OpenMesh-9.0.0/build/Build/lib/libOpenMeshCore.a") # TODO add more lib file paths for windows 126 | # message("LSC: OpenMesh starting installing") 127 | 128 | # message("LSC: OpenMesh get installed") 129 | # else() 130 | # message("LSC: OpenMesh is already installed") 131 | # endif() 132 | # endif()^ 133 | ########### 134 | -------------------------------------------------------------------------------- /cmake/lscDownloadExternal.cmake: -------------------------------------------------------------------------------- 1 | include(DownloadProject) 2 | 3 | # With CMake 3.8 and above, we can hide warnings about git being in a 4 | # detached head by passing an extra GIT_CONFIG option 5 | if(NOT (${CMAKE_VERSION} VERSION_LESS "3.8.0")) 6 | set(SPARSE_INTERP_EXTRA_OPTIONS "GIT_CONFIG advice.detachedHead=false") 7 | else() 8 | set(SPARSE_INTERP_EXTRA_OPTIONS "") 9 | endif() 10 | 11 | function(sparse_interp_download_project name) 12 | download_project( 13 | PROJ ${name} 14 | SOURCE_DIR ${SPARSE_EXTERNAL}/${name} 15 | DOWNLOAD_DIR ${SPARSE_EXTERNAL}/.cache/${name} 16 | QUIET 17 | ${SPARSE_INTERP_EXTRA_OPTIONS} 18 | ${ARGN} 19 | ) 20 | endfunction() 21 | 22 | ################################################################################ 23 | 24 | 25 | # Eigen 26 | function(sparse_interp_download_eigen) 27 | sparse_interp_download_project(eigen 28 | GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git 29 | GIT_TAG 3.4.0 30 | ) 31 | endfunction() 32 | 33 | 34 | 35 | # libigl for timing and mesh processing 36 | function(sparse_interp_download_libigl) 37 | sparse_interp_download_project(libigl 38 | GIT_REPOSITORY https://github.com/libigl/libigl.git 39 | GIT_TAG aea868bd1fc64f71afecd2c51e51507a99d8e3e5 40 | ) 41 | endfunction() 42 | 43 | # A modern string formatting library 44 | function(sparse_interp_download_fmt) 45 | sparse_interp_download_project(fmt 46 | GIT_REPOSITORY https://github.com/fmtlib/fmt.git 47 | GIT_TAG 6.2.0 48 | ) 49 | endfunction() 50 | 51 | 52 | -------------------------------------------------------------------------------- /cmake/lscUtils.cmake: -------------------------------------------------------------------------------- 1 | function(lsc_copy_headers) 2 | foreach(filepath IN ITEMS ${ARGN}) 3 | get_filename_component(filename "${filepath}" NAME) 4 | if(${filename} MATCHES ".*\.(hpp|h|ipp)$") 5 | configure_file(${filepath} ${PROJECT_BINARY_DIR}/include/lsc/${filename}) 6 | endif() 7 | endforeach() 8 | endfunction() 9 | 10 | function(prepend_current_path SOURCE_FILES) 11 | # Use recursive substitution to expand SOURCE_FILES 12 | unset(MODIFIED) 13 | foreach(SOURCE_FILE IN ITEMS ${${SOURCE_FILES}}) 14 | list(APPEND MODIFIED "${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE_FILE}") 15 | endforeach() 16 | set(${SOURCE_FILES} ${MODIFIED} PARENT_SCOPE) 17 | endfunction() 18 | 19 | function(lsc_set_source_group) 20 | foreach(filepath IN ITEMS ${ARGN}) 21 | get_filename_component(folderpath "${filepath}" DIRECTORY) 22 | get_filename_component(foldername "${folderpath}" NAME) 23 | source_group(foldername FILES "${filepath}") 24 | endforeach() 25 | endfunction() -------------------------------------------------------------------------------- /data/RectifyingPatternsLowRes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbolun300/RectifyingStripPatterns/c36941b5a917ba66bdadcbe7474d90f3f37c468a/data/RectifyingPatternsLowRes.pdf -------------------------------------------------------------------------------- /data/fig/carpet60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbolun300/RectifyingStripPatterns/c36941b5a917ba66bdadcbe7474d90f3f37c468a/data/fig/carpet60.png -------------------------------------------------------------------------------- /data/fig/code_teaser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbolun300/RectifyingStripPatterns/c36941b5a917ba66bdadcbe7474d90f3f37c468a/data/fig/code_teaser.png -------------------------------------------------------------------------------- /data/fig/extractQuad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbolun300/RectifyingStripPatterns/c36941b5a917ba66bdadcbe7474d90f3f37c468a/data/fig/extractQuad.png -------------------------------------------------------------------------------- /data/fig/mainpage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbolun300/RectifyingStripPatterns/c36941b5a917ba66bdadcbe7474d90f3f37c468a/data/fig/mainpage.png -------------------------------------------------------------------------------- /data/fig/quad_diags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbolun300/RectifyingStripPatterns/c36941b5a917ba66bdadcbe7474d90f3f37c468a/data/fig/quad_diags.png -------------------------------------------------------------------------------- /data/fig/smooth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbolun300/RectifyingStripPatterns/c36941b5a917ba66bdadcbe7474d90f3f37c468a/data/fig/smooth.png -------------------------------------------------------------------------------- /data/fig/strips.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbolun300/RectifyingStripPatterns/c36941b5a917ba66bdadcbe7474d90f3f37c468a/data/fig/strips.png -------------------------------------------------------------------------------- /data/fig/strips2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbolun300/RectifyingStripPatterns/c36941b5a917ba66bdadcbe7474d90f3f37c468a/data/fig/strips2.png -------------------------------------------------------------------------------- /data/fig/strokes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbolun300/RectifyingStripPatterns/c36941b5a917ba66bdadcbe7474d90f3f37c468a/data/fig/strokes.png -------------------------------------------------------------------------------- /data/fig/tracing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbolun300/RectifyingStripPatterns/c36941b5a917ba66bdadcbe7474d90f3f37c468a/data/fig/tracing.png -------------------------------------------------------------------------------- /data/interactive/48p75_1.csv: -------------------------------------------------------------------------------- 1 | 8.03596 2 | 6.9953 3 | 7.36459 4 | 11.35 5 | 12.2931 6 | 11.678 7 | 10.7106 8 | 1.20357 9 | 0.864142 10 | 1.76955 11 | -1.28534 12 | -0.20413 13 | -0.68946 14 | 7.0882 15 | 6.76766 16 | 6.12014 17 | -7.78291 18 | -7.39273 19 | -7.95642 20 | -0.0821655 21 | 0.109018 22 | 0.489567 23 | -9.39055 24 | -10.2274 25 | -10.4293 26 | -11.167 27 | -11.3739 28 | -11.7315 29 | -9.47168 30 | -8.63673 31 | -9.20922 32 | -10.5208 33 | -10.7341 34 | -11.3298 35 | -9.53989 36 | -8.81055 37 | -9.38952 38 | 0.439947 39 | 0.00501737 40 | -0.866903 41 | 9.07217 42 | 8.71949 43 | 9.21109 44 | 6.85688 45 | 6.51723 46 | 5.93285 47 | 12.678 48 | 13.6877 49 | 13.2608 50 | -5.6247 51 | -6.56492 52 | -5.78695 53 | 8.42964 54 | 9.29208 55 | 8.70428 56 | 7.97005 57 | 8.2089 58 | 4.5546 59 | 5.73434 60 | 5.51295 61 | 6.09985 62 | 5.88181 63 | 9.09293 64 | 9.21283 65 | 8.87655 66 | 9.76229 67 | 9.38235 68 | 8.85874 69 | 8.55289 70 | 7.18411 71 | 8.3196 72 | 7.64191 73 | -8.53456 74 | -8.94854 75 | -8.63506 76 | 6.99312 77 | 7.62451 78 | 6.42951 79 | 7.55339 80 | 3.32812 81 | 3.64539 82 | 3.5404 83 | 12.8492 84 | 11.9858 85 | 13.3204 86 | -0.303642 87 | 0.483303 88 | 0.351778 89 | -13.0586 90 | -11.4721 91 | -13.1387 92 | -4.03759 93 | -5.7157 94 | -4.44615 95 | 6.38052 96 | 0.859382 97 | 1.96775 98 | 0.929042 99 | 2.14425 100 | 2.96511 101 | 2.25147 102 | 3.61963 103 | 4.16647 104 | 3.16643 105 | -11.3776 106 | -11.0993 107 | -12.8955 108 | 7.47598 109 | 7.56746 110 | 6.61941 111 | 7.38791 112 | 5.14414 113 | 5.3281 114 | 4.4168 115 | 5.78685 116 | -2.69068 117 | -2.69431 118 | 5.85144 119 | 6.57464 120 | 3.89521 121 | 3.13347 122 | 3.78863 123 | 4.79018 124 | -3.98474 125 | -4.61954 126 | -4.86406 127 | 9.43381 128 | 9.60298 129 | 10.1828 130 | -1.64914 131 | -0.728179 132 | -1.0293 133 | 8.46675 134 | 13.9314 135 | 12.1454 136 | 8.37209 137 | 8.48415 138 | 7.64079 139 | -3.91371 140 | -4.89743 141 | -5.85854 142 | 10.0111 143 | 9.93237 144 | 10.8088 145 | 5.3203 146 | 3.33558 147 | 1.61139 148 | 1.91651 149 | 4.372 150 | 4.29658 151 | 4.19395 152 | -1.86479 153 | -1.0085 154 | 0.460576 155 | -0.354125 156 | 4.78683 157 | 4.09989 158 | -3.11392 159 | -2.82059 160 | -3.75136 161 | -3.87188 162 | 5.07725 163 | 6.42874 164 | 10.039 165 | 9.07197 166 | 8.31029 167 | 9.04676 168 | 8.14423 169 | 3.68365 170 | 5.11092 171 | 8.36643 172 | 9.03421 173 | 2.99816 174 | 2.40948 175 | 1.80308 176 | 7.12544 177 | 6.35221 178 | 1.78334 179 | 2.10954 180 | 0.401483 181 | 4.45297 182 | 3.69413 183 | 9.5985 184 | 9.96792 185 | -9.265 186 | -1.90548 187 | 7.47812 188 | 7.5276 189 | -12.6998 190 | -11.0419 191 | -10.8414 192 | 9.09997 193 | 10.1375 194 | 10.942 195 | 7.6821 196 | -4.98137 197 | -6.03035 198 | -5.12641 199 | -11.4638 200 | -11.4181 201 | -10.5283 202 | 4.57007 203 | 11.6009 204 | 10.2856 205 | 9.29205 206 | 10.0465 207 | -1.28316 208 | -0.384564 209 | 0.524126 210 | -0.221655 211 | 0.467001 212 | 14.0181 213 | 14.3272 214 | 13.69 215 | 5.8757 216 | 9.25581 217 | 0.938473 218 | 0.266327 219 | 0.749932 220 | -0.288181 221 | 14.4883 222 | 14.5332 223 | 13.3354 224 | 14.489 225 | 14.3205 226 | 11.9973 227 | 11.9889 228 | 10.7704 229 | 9.91156 230 | 4.55133 231 | 2.5746 232 | 3.55425 233 | -5.03974 234 | -5.88115 235 | -5.88335 236 | 8.48821 237 | 8.79082 238 | 7.90486 239 | 9.85464 240 | 2.21742 241 | 2.51714 242 | -5.81789 243 | -6.61436 244 | 1.04132 245 | 1.39696 246 | 1.7867 247 | -7.48393 248 | -8.71432 249 | -8.3412 250 | 1.52824 251 | 2.45209 252 | -12.793 253 | -13.0304 254 | -12.0682 255 | -7.45547 256 | -8.45573 257 | -8.5026 258 | -7.62158 259 | -6.65447 260 | -6.8496 261 | -11.8145 262 | -9.63935 263 | -8.66849 264 | -9.52238 265 | -10.4575 266 | -10.2451 267 | -10.6661 268 | -9.87415 269 | -12.0386 270 | -10.0343 271 | -9.89212 272 | -11.284 273 | -10.6307 274 | -7.0901 275 | -6.78974 276 | -7.07866 277 | -6.57162 278 | -11.6009 279 | -12.5528 280 | -9.21641 281 | -10.5729 282 | -12.365 283 | -12.1951 284 | 3.45969 285 | 2.91987 286 | 3.40774 287 | 2.81026 288 | -0.49485 289 | -0.487298 290 | 0.088488 291 | -7.45228 292 | -8.64074 293 | -8.52532 294 | -7.01727 295 | -7.66498 296 | 2.76173 297 | -8.05976 298 | -3.84537 299 | 3.39676 300 | -1.05127 301 | 0.0289252 302 | -5.63974 303 | -10.1141 304 | -8.67204 305 | -9.04732 306 | -8.55293 307 | 11.2076 308 | 10.6032 309 | 9.75092 310 | -8.38736 311 | 11.5762 312 | 10.9536 313 | 11.9758 314 | -8.46545 315 | -8.57467 316 | 3.73876 317 | -1.28173 318 | -1.50117 319 | -2.18494 320 | -4.70192 321 | -5.84567 322 | -9.15077 323 | -8.04714 324 | -7.36903 325 | -6.59053 326 | -6.41938 327 | -6.09607 328 | -5.76128 329 | 1.15803 330 | -1.81586 331 | -0.0296213 332 | -0.972415 333 | 1.07437 334 | 0.236659 335 | 1.66087 336 | 1.31786 337 | -2.0503 338 | -3.0999 339 | -1.06089 340 | -1.19261 341 | -1.44685 342 | -0.946881 343 | -6.68701 344 | -6.16859 345 | 4.76522 346 | 9.45396 347 | 9.21827 348 | 9.33244 349 | -2.24438 350 | -3.18169 351 | -9.29348 352 | -7.03887 353 | -7.48284 354 | -7.87154 355 | -6.3126 356 | -8.02122 357 | -7.31848 358 | -1.97644 359 | 12.4533 360 | 11.1529 361 | 12.4783 362 | 11.5211 363 | 4.32241 364 | 3.99447 365 | 4.22941 366 | 1.9378 367 | -10.6708 368 | 12.8745 369 | 1.82156 370 | 10.149 371 | 4.02534 372 | -3.17216 373 | 4.12897 374 | 3.74539 375 | -4.12619 376 | -2.75191 377 | -0.911991 378 | 2.4872 379 | 3.09295 380 | 13.1344 381 | -8.15721 382 | -8.32776 383 | -10.5224 384 | -9.45923 385 | -8.20417 386 | 10.2688 387 | 10.8218 388 | 11.0855 389 | -9.42931 390 | 5.03423 391 | 4.6274 392 | 3.68336 393 | 3.27681 394 | 4.18896 395 | 2.74431 396 | -8.91378 397 | -1.84685 398 | -4.55699 399 | 8.52331 400 | 10.8766 401 | 10.8005 402 | -4.0476 403 | -5.02399 404 | -4.72136 405 | -4.58968 406 | -1.42133 407 | -3.78832 408 | -2.64533 409 | -3.20986 410 | -2.74164 411 | 4.6168 412 | -11.2315 413 | 2.11912 414 | -2.38333 415 | 9.16263 416 | -9.71552 417 | -4.51302 418 | -5.05366 419 | 6.7313 420 | 0.203412 421 | -3.93753 422 | 5.52915 423 | 4.83397 424 | 5.72746 425 | -9.71291 426 | -2.16397 427 | 2.88574 428 | -8.16934 429 | -3.99923 430 | 7.08468 431 | 7.44699 432 | -6.37163 433 | -7.44043 434 | 8.8828 435 | 8.65669 436 | 9.28124 437 | 11.0549 438 | -10.2746 439 | -11.3149 440 | -9.28792 441 | -8.74434 442 | -11.0897 443 | -11.9326 444 | -4.11785 445 | -10.2923 446 | -10.0844 447 | 10.562 448 | -9.43266 449 | 9.99942 450 | -9.60854 451 | -10.4109 452 | -10.1215 453 | -4.90602 454 | -11.1926 455 | -11.8488 456 | -11.824 457 | -11.3446 458 | -11.2217 459 | 13.4096 460 | -6.28183 461 | -10.6552 462 | -10.6878 463 | 9.36962 464 | -0.613301 465 | -9.43815 466 | -9.82946 467 | 6.91287 468 | 7.07616 469 | 7.52888 470 | 7.93233 471 | 8.62831 472 | 8.21541 473 | -5.25543 474 | -3.35126 475 | -4.27103 476 | -3.97062 477 | 1.78644 478 | 3.92854 479 | 2.82904 480 | 3.37277 481 | -3.79298 482 | 6.73167 483 | 3.71618 484 | 3.74735 485 | 6.30583 486 | 3.26398 487 | 2.50196 488 | 2.45614 489 | 1.17478 490 | -2.50508 491 | -1.66643 492 | 9.56955 493 | 3.28168 494 | -10.3014 495 | 9.0251 496 | -10.9184 497 | 8.52355 498 | 8.10201 499 | 5.1186 500 | 8.90205 501 | 0.914125 502 | 1.00948 503 | 7.74455 504 | -10.7463 505 | -11.3887 506 | 9.48774 507 | 9.33765 508 | 1.66675 509 | 1.60316 510 | 5.01363 511 | -4.44655 512 | 11.7718 513 | -12.4429 514 | 4.48172 515 | -1.13692 516 | -2.56266 517 | -2.43075 518 | -3.31649 519 | -2.8703 520 | -1.81756 521 | -3.20863 522 | -0.470531 523 | -3.82664 524 | -3.80931 525 | -3.0144 526 | 3.21061 527 | 0.526062 528 | 4.8161 529 | 4.53159 530 | 9.33303 531 | 5.71479 532 | -13.118 533 | 8.46492 534 | -6.79914 535 | 1.67186 536 | 2.91648 537 | -7.51797 538 | 10.16 539 | 2.28283 540 | -8.45334 541 | -7.18439 542 | -3.87998 543 | -8.78288 544 | -7.69282 545 | 9.15341 546 | -4.18069 547 | 3.2225 548 | 4.24314 549 | -8.30739 550 | -10.1772 551 | -4.74425 552 | -4.98027 553 | -1.63095 554 | -2.29251 555 | -5.82271 556 | -5.39759 557 | -5.76972 558 | 10.1112 559 | 1.79373 560 | 5.41885 561 | 3.39387 562 | 4.06917 563 | 6.2498 564 | -9.12753 565 | -9.62059 566 | -8.45127 567 | -2.57651 568 | 3.86191 569 | -3.07789 570 | -3.96162 571 | -9.12118 572 | 5.99633 573 | 3.47388 574 | 3.41529 575 | 6.00845 576 | 5.20303 577 | 4.80299 578 | 8.31923 579 | 5.0504 580 | 5.53419 581 | 5.36152 582 | -4.25624 583 | -7.42353 584 | 3.60047 585 | 2.93169 586 | 1.01301 587 | 10.3077 588 | 5.74947 589 | -4.50047 590 | -3.3611 591 | -8.75252 592 | 3.58009 593 | 3.69884 594 | 11.1918 595 | 1.52408 596 | -6.52447 597 | 12.275 598 | -3.96797 599 | 4.28497 600 | -7.36271 601 | 6.50852 602 | 9.34607 603 | 9.30546 604 | -4.08454 605 | 12.2282 606 | 3.75047 607 | -1.62546 608 | 5.14253 609 | 5.96661 610 | 3.87793 611 | 12.0817 612 | -5.4787 613 | -5.23192 614 | 2.31805 615 | -7.94609 616 | -8.15711 617 | -6.07137 618 | -8.79345 619 | -7.00655 620 | -8.39051 621 | -------------------------------------------------------------------------------- /data/interactive/48p75_1b.csv: -------------------------------------------------------------------------------- 1 | 0.862327,0.161277,-0.479982 2 | 0.797869,0.110557,-0.592607 3 | 0.83494,0.12303,-0.536414 4 | 0.918752,0.317304,-0.234975 5 | 0,0,0 6 | 0,0,0 7 | 0.911752,0.28001,-0.300505 8 | 0.593257,0.329423,-0.734525 9 | 0.575902,0.348585,-0.739477 10 | 0.628461,0.327035,-0.705752 11 | 0.63394,0.212511,-0.743613 12 | 0.665439,0.208603,-0.716713 13 | 0.64093,0.19768,-0.741709 14 | 0.844704,0.100562,-0.525703 15 | 0.802957,0.0828138,-0.590256 16 | 0.767397,0.0506918,-0.639166 17 | 0,0,0 18 | 0,0,0 19 | 0.347316,0.0429175,-0.936765 20 | 0.541665,0.345952,-0.766106 21 | 0.54076,0.354283,-0.76293 22 | 0.559352,0.340663,-0.755695 23 | 0.420263,0.166043,-0.892084 24 | 0.358355,0.146426,-0.922031 25 | 0.400981,0.13481,-0.906117 26 | 0.52971,-0.00714498,-0.84815 27 | 0.504538,0.00357194,-0.863383 28 | 0,0,0 29 | 0.552127,0.0823065,-0.829688 30 | 0.534576,0.133742,-0.834475 31 | 0.523107,0.114073,-0.844598 32 | 0.1333,0.0607087,-0.989216 33 | 0,0,0 34 | 0,0,0 35 | 0.499264,0.115425,-0.858733 36 | 0.513004,0.146539,-0.84579 37 | 0.478283,0.135842,-0.867638 38 | 0.561923,0.0431687,-0.826062 39 | 0,0,0 40 | 0,0,0 41 | 0.970299,0.228899,-0.0783239 42 | 0.968245,0.229174,-0.0999151 43 | 0.973949,0.217465,-0.0642936 44 | 0.937812,0.258526,-0.231676 45 | 0,0,0 46 | 0.909084,0.291784,-0.297369 47 | 0.948693,0.315201,0.025165 48 | 0.940395,0.33899,0.0272626 49 | 0.942872,0.332772,-0.0160026 50 | 0.463446,0.286544,-0.838519 51 | 0.428269,0.266678,-0.863406 52 | 0.492721,0.27104,-0.826901 53 | 0.967525,0.224777,-0.115631 54 | 0.976334,0.207136,-0.0622319 55 | 0.933411,0.21308,-0.28869 56 | 0.904454,0.158026,-0.396221 57 | 0.931209,0.167023,-0.323967 58 | 0.656655,0.00824012,-0.754147 59 | 0.728339,0.0361482,-0.684264 60 | 0.711168,0.0296019,-0.702399 61 | 0.750598,0.0832646,-0.655492 62 | 0.734103,0.0590822,-0.676463 63 | 0,0,0 64 | 0.959598,0.201112,-0.19679 65 | 0,0,0 66 | 0.922116,0.270885,-0.276268 67 | 0.904475,0.243103,-0.350467 68 | 0.898906,0.214183,-0.382224 69 | 0.873373,0.193867,-0.446806 70 | 0,0,0 71 | 0.890372,0.178872,-0.41862 72 | 0.95607,0.239131,-0.169554 73 | 0,0,0 74 | 0.239204,0.050494,-0.969656 75 | 0,0,0 76 | 0,0,0 77 | 0.946619,0.239995,-0.215208 78 | 0.920987,0.255317,-0.294278 79 | 0.948747,0.238455,-0.207411 80 | 0.752238,0.229713,-0.617552 81 | 0,0,0 82 | 0,0,0 83 | 0,0,0 84 | 0.939617,0.317511,-0.127702 85 | 0,0,0 86 | 0.669315,0.23267,-0.705612 87 | 0.690064,0.226111,-0.687523 88 | 0.688843,0.225564,-0.688926 89 | 0,0,0 90 | 0.233744,0.0937398,-0.967769 91 | 0,0,0 92 | 0.470987,0.358817,-0.805867 93 | 0,0,0 94 | 0,0,0 95 | 0.806492,0.0695875,-0.587137 96 | 0.68705,0.191755,-0.700853 97 | 0.695625,0.167219,-0.698674 98 | 0.665871,0.174276,-0.725428 99 | 0.732651,0.211401,-0.646941 100 | 0.741302,0.194329,-0.642425 101 | 0.732254,0.203832,-0.649833 102 | 0,0,0 103 | 0.82145,0.274073,-0.500104 104 | 0.760809,0.289065,-0.581043 105 | 0.253382,0.103853,-0.961776 106 | 0.248812,0.106892,-0.962635 107 | 0,0,0 108 | 0.950458,0.238305,-0.199603 109 | 0.953675,0.238026,-0.183981 110 | 0.930325,0.252704,-0.265778 111 | 0.889321,0.105743,-0.444891 112 | 0.873809,0.265534,-0.40737 113 | 0.878495,0.271285,-0.393258 114 | 0.829905,0.283256,-0.48065 115 | 0.902089,0.280767,-0.327727 116 | 0.474395,0.365327,-0.800928 117 | 0.482105,0.355535,-0.800731 118 | 0,0,0 119 | 0.928133,0.253173,-0.272897 120 | 0,0,0 121 | 0,0,0 122 | 0.625758,0.00347907,-0.78001 123 | 0.670283,0.0236472,-0.741729 124 | 0.540897,0.278741,-0.793559 125 | 0.50475,0.291435,-0.812587 126 | 0.514794,0.28081,-0.810022 127 | 0.936203,0.251549,-0.245453 128 | 0.944228,0.259107,-0.203216 129 | 0.946457,0.275435,-0.16839 130 | 0.621132,0.231287,-0.748801 131 | 0.653544,0.228095,-0.721702 132 | 0.648171,0.223149,-0.728069 133 | 0.968498,0.22066,-0.115416 134 | 0,0,0 135 | 0.942088,0.318841,-0.103983 136 | 0.966011,0.223603,-0.129706 137 | 0.912827,0.19939,-0.356358 138 | 0.867574,0.139186,-0.477434 139 | 0.548109,0.122849,-0.827336 140 | 0,0,0 141 | 0,0,0 142 | 0.966465,0.247777,-0.0674667 143 | 0.969614,0.240882,-0.042749 144 | 0.962856,0.270008,-0.00173896 145 | 0,0,0 146 | 0.668613,0.0755198,-0.739767 147 | 0.620262,0.091102,-0.779087 148 | 0.646942,0.12505,-0.752217 149 | 0,0,0 150 | 0.770938,0.054181,-0.634601 151 | 0,0,0 152 | 0.568294,0.119468,-0.814107 153 | 0.584596,0.134966,-0.800021 154 | 0.600503,0.100998,-0.793218 155 | 0.608238,0.146877,-0.780048 156 | 0.785831,0.0587255,-0.615647 157 | 0.743568,0.0673879,-0.665256 158 | 0.558543,0.275119,-0.782525 159 | 0.575652,0.268942,-0.772207 160 | 0.540513,0.283739,-0.792049 161 | 0,0,0 162 | 0.693245,0.0478801,-0.71911 163 | 0.76976,0.0726233,-0.634189 164 | 0.938568,0.272102,-0.212254 165 | 0.917573,0.237605,-0.318754 166 | 0.843939,0.189952,-0.501683 167 | 0.861936,0.213439,-0.459903 168 | 0,0,0 169 | 0.619101,0.00696903,-0.785281 170 | 0.690952,0.0157405,-0.722729 171 | 0.946354,0.161514,-0.279869 172 | 0.947964,0.219108,-0.230992 173 | 0.596812,0.00334501,-0.802374 174 | 0,0,0 175 | 0,0,0 176 | 0.80329,0.122809,-0.582789 177 | 0.768211,0.112467,-0.630241 178 | 0.597888,0.058649,-0.799432 179 | 0.583589,0.0307686,-0.811466 180 | 0.57776,0.0663029,-0.813509 181 | 0.731534,0.0618575,-0.678994 182 | 0.704942,0.0845248,-0.704212 183 | 0.889356,0.241317,-0.388347 184 | 0.91237,0.262685,-0.313972 185 | 0.571258,0.0695425,-0.81782 186 | 0.615549,0.223029,-0.755884 187 | 0.912793,0.109835,-0.393377 188 | 0.928013,0.1091,-0.356221 189 | 0,0,0 190 | 0.308496,0.109783,-0.94487 191 | 0.279582,0.117159,-0.952947 192 | 0.88439,0.219643,-0.411839 193 | 0.948209,0.273078,-0.162258 194 | 0.944387,0.300531,-0.133467 195 | 0.833897,0.147187,-0.531934 196 | 0.526473,0.112968,-0.842653 197 | 0.494939,0.102443,-0.862871 198 | 0.518848,0.0980125,-0.84923 199 | 0.410288,0.0701989,-0.90925 200 | 0.441646,0.0541676,-0.895553 201 | 0.456751,0.0987946,-0.884092 202 | 0,0,0 203 | 0.928444,0.326757,-0.176696 204 | 0,0,0 205 | 0,0,0 206 | 0.88277,0.2447,-0.401047 207 | 0,0,0 208 | 0,0,0 209 | 0.579446,0.338689,-0.741306 210 | 0.653603,0.238436,-0.718299 211 | 0.676856,0.230216,-0.699191 212 | 0,0,0 213 | 0,0,0 214 | 0.94078,0.334047,0.0579979 215 | 0,0,0 216 | 0.97399,0.214349,-0.0734714 217 | 0.616835,0.284801,-0.733761 218 | 0.59804,0.288985,-0.747555 219 | 0.584362,0.318228,-0.746493 220 | 0.549292,0.325913,-0.769454 221 | 0,0,0 222 | 0,0,0 223 | 0.943038,0.326922,-0.0616776 224 | 0,0,0 225 | 0,0,0 226 | 0.946786,0.315857,-0.0618968 227 | 0.946132,0.309883,-0.0938399 228 | 0.959591,0.278119,-0.0428379 229 | 0.962422,0.249602,-0.10698 230 | 0,0,0 231 | 0,0,0 232 | 0.775713,0.296755,-0.556962 233 | 0.524638,0.270249,-0.807293 234 | 0.509224,0.257569,-0.821189 235 | 0.5117,0.255719,-0.820226 236 | 0.960059,0.236722,-0.149165 237 | 0,0,0 238 | 0,0,0 239 | 0,0,0 240 | 0.658633,0.301939,-0.689231 241 | 0.672188,0.303512,-0.675311 242 | 0.493759,0.301344,-0.815717 243 | 0,0,0 244 | 0.702112,0.200536,-0.683246 245 | 0.710579,0.204877,-0.67313 246 | 0.713514,0.185168,-0.67573 247 | 0.393763,0.24408,-0.886216 248 | 0.31717,0.203652,-0.926246 249 | 0.368488,0.214976,-0.904436 250 | 0.704717,0.225575,-0.672675 251 | 0.731166,0.228785,-0.642694 252 | 0,0,0 253 | 0,0,0 254 | 0.132561,0.0397132,-0.990379 255 | 0.501247,0.202992,-0.84116 256 | 0.473523,0.179387,-0.862321 257 | 0.493679,0.166102,-0.853638 258 | 0.321511,0.24228,-0.915387 259 | 0.384869,0.271821,-0.882038 260 | 0.34109,0.272453,-0.899682 261 | 0.209918,0.075815,-0.974776 262 | 0.250016,0.135683,-0.958688 263 | 0.273552,0.176682,-0.945492 264 | 0.231835,0.129601,-0.964084 265 | 0.486276,0.0773704,-0.870375 266 | 0.581246,0.0151676,-0.813587 267 | 0,0,0 268 | 0,0,0 269 | 0,0,0 270 | 0.505809,0.0918342,-0.857744 271 | 0.531036,0.0753876,-0.843989 272 | 0.477143,0.0300724,-0.878313 273 | 0.514579,0.0497391,-0.856001 274 | 0.319977,0.275511,-0.906481 275 | 0,0,0 276 | 0,0,0 277 | 0.465295,0.256553,-0.847162 278 | 0.364097,0.0842517,-0.927546 279 | 0,0,0 280 | 0.386512,0.175754,-0.905384 281 | 0.422083,0.118074,-0.898835 282 | 0,0,0 283 | 0,0,0 284 | 0,0,0 285 | 0.731828,0.185367,-0.655795 286 | 0,0,0 287 | 0.728395,0.173276,-0.662885 288 | 0.661999,0.232212,-0.712626 289 | 0.65876,0.23139,-0.715888 290 | 0.683756,0.222661,-0.69491 291 | 0.354908,0.245303,-0.902146 292 | 0.294155,0.20323,-0.933904 293 | 0,0,0 294 | 0.45232,0.0920258,-0.887096 295 | 0,0,0 296 | 0.680413,0.119215,-0.723069 297 | 0.295221,0.225381,-0.928465 298 | 0.513326,0.289476,-0.807904 299 | 0,0,0 300 | 0.504714,0.363655,-0.782955 301 | 0.542844,0.353936,-0.76161 302 | 0.42416,0.289641,-0.858019 303 | 0.268522,0.143025,-0.952597 304 | 0,0,0 305 | 0.226825,0.138548,-0.964031 306 | 0,0,0 307 | 0,0,0 308 | 0.973334,0.228369,-0.0216311 309 | 0.97283,0.221741,-0.066576 310 | 0,0,0 311 | 0.957173,0.288829,0.0199411 312 | 0.966432,0.255285,0.028959 313 | 0.958734,0.278047,0.0593249 314 | 0.332147,0.0754718,-0.940204 315 | 0.310126,0.0884086,-0.946602 316 | 0.744235,0.0777448,-0.663378 317 | 0.629644,0.239606,-0.739012 318 | 0.621312,0.235269,-0.747409 319 | 0.586598,0.253672,-0.769126 320 | 0.469498,0.297906,-0.831158 321 | 0.378641,0.298648,-0.876051 322 | 0.27309,0.172165,-0.946457 323 | 0.29186,0.224766,-0.929676 324 | 0,0,0 325 | 0.490995,0.243267,-0.836509 326 | 0,0,0 327 | 0,0,0 328 | 0,0,0 329 | 0.705052,0.213881,-0.676134 330 | 0.609511,0.253016,-0.751319 331 | 0.630172,0.256331,-0.732928 332 | 0.641819,0.240683,-0.728108 333 | 0.7083,0.216342,-0.671945 334 | 0.686771,0.218303,-0.693318 335 | 0.624903,0.303643,-0.719234 336 | 0.608102,0.340185,-0.717278 337 | 0.582216,0.267804,-0.767667 338 | 0.539617,0.288206,-0.791046 339 | 0.629341,0.245365,-0.737379 340 | 0.59979,0.263025,-0.755693 341 | 0.506899,0.346497,-0.789301 342 | 0.509768,0.357281,-0.782615 343 | 0.50396,0.230918,-0.832289 344 | 0.511229,0.250569,-0.822108 345 | 0.771844,0.0556275,-0.633374 346 | 0.961829,0.219514,-0.163396 347 | 0,0,0 348 | 0,0,0 349 | 0.572173,0.137865,-0.808463 350 | 0.558907,0.131489,-0.81874 351 | 0.269521,0.168156,-0.948199 352 | 0.510655,0.218222,-0.831632 353 | 0.512319,0.192091,-0.837037 354 | 0.521318,0.178038,-0.834585 355 | 0.509162,0.255401,-0.821904 356 | 0,0,0 357 | 0,0,0 358 | 0.551638,0.292275,-0.781199 359 | 0,0,0 360 | 0.973664,0.227983,0.00211524 361 | 0.962296,0.267277,0.0505172 362 | 0.970763,0.237312,0.0360996 363 | 0,0,0 364 | 0.802296,0.304403,-0.513491 365 | 0.824505,0.325943,-0.46255 366 | 0.675101,0.151783,-0.721943 367 | 0.233305,0.112127,-0.965918 368 | 0.948575,0.309325,0.0672559 369 | 0.57077,0.018837,-0.820894 370 | 0.891388,0.259971,-0.371272 371 | 0,0,0 372 | 0,0,0 373 | 0,0,0 374 | 0.786484,0.281789,-0.54958 375 | 0.532873,0.278624,-0.799011 376 | 0.518096,0.312858,-0.796051 377 | 0.572048,0.0707739,-0.817161 378 | 0.716985,0.164233,-0.677466 379 | 0.727532,0.137467,-0.672163 380 | 0.948623,0.306611,0.0781291 381 | 0,0,0 382 | 0.254213,-0.0228429,-0.96689 383 | 0.55522,0.0141663,-0.831583 384 | 0.447941,0.154171,-0.880672 385 | 0.510697,0.169644,-0.842858 386 | 0.951815,0.271734,-0.142161 387 | 0.955891,0.281848,-0.0827098 388 | 0.948614,0.294767,-0.115082 389 | 0.335809,0.174216,-0.925679 390 | 0.809213,0.0429929,-0.58594 391 | 0,0,0 392 | 0.628975,0.0180079,-0.777217 393 | 0.639419,0.0467198,-0.767438 394 | 0.667772,0.0281289,-0.743835 395 | 0.607267,0.0337942,-0.793779 396 | 0,0,0 397 | 0.607005,0.254215,-0.752942 398 | 0.516421,0.283642,-0.807996 399 | 0.965191,0.222897,-0.136831 400 | 0.942002,0.301495,-0.147424 401 | 0.936995,0.296443,-0.184828 402 | 0.547108,0.113418,-0.829343 403 | 0,0,0 404 | 0,0,0 405 | 0.535013,0.0928149,-0.839731 406 | 0.597399,0.161432,-0.785534 407 | 0.559087,0.126511,-0.819401 408 | 0.585932,0.172223,-0.791852 409 | 0.566096,0.141522,-0.812112 410 | 0.579209,0.233672,-0.780971 411 | 0.66725,0.00780913,-0.744793 412 | 0,0,0 413 | 0.688434,0.302371,-0.659266 414 | 0.578376,0.152326,-0.801425 415 | 0,0,0 416 | 0.257619,0.140589,-0.955964 417 | 0.478349,0.338177,-0.810444 418 | 0.49515,0.305414,-0.813357 419 | 0.855598,0.0717642,-0.512644 420 | 0.682274,0.214865,-0.69881 421 | 0.549221,0.118181,-0.827278 422 | 0.731765,0.0300281,-0.680896 423 | 0.694595,0.0223002,-0.719056 424 | 0.766988,0.048185,-0.63985 425 | 0.29426,0.160571,-0.942141 426 | 0,0,0 427 | 0.745463,0.205291,-0.634147 428 | 0.538808,0.157165,-0.827645 429 | 0.511359,0.302396,-0.804409 430 | 0,0,0 431 | 0.814303,0.152883,-0.559945 432 | 0.515488,0.243747,-0.821507 433 | 0.513473,0.205112,-0.833232 434 | 0.959241,0.174011,-0.22266 435 | 0,0,0 436 | 0.871315,0.22172,-0.43778 437 | 0,0,0 438 | 0.148811,0.0714338,-0.986283 439 | 0.0981096,0.0417097,-0.994301 440 | 0.196293,0.102323,-0.975192 441 | 0,0,0 442 | 0.204768,0.0925609,-0.974426 443 | 0.17348,0.0599832,-0.98301 444 | 0.544204,0.116371,-0.830845 445 | 0.219744,0.109234,-0.969423 446 | 0.171043,0.0887606,-0.981258 447 | 0.921896,0.3006,-0.244434 448 | 0.183537,0.0801702,-0.979739 449 | 0.958012,0.249147,-0.14191 450 | 0.200382,0.112366,-0.973254 451 | 0.189013,0.0966689,-0.977206 452 | 0.18621,0.096772,-0.977733 453 | 0.430241,0.304718,-0.849742 454 | 0.114702,0.0493228,-0.992175 455 | 0.0754228,0.0160414,-0.997023 456 | 0.103518,0.0318763,-0.994117 457 | 0.150616,0.0650426,-0.986451 458 | 0.130866,0.0582992,-0.989686 459 | 0,0,0 460 | 0.478619,0.0789055,-0.874471 461 | 0.146411,0.071613,-0.986629 462 | 0.161903,0.0800265,-0.983557 463 | 0,0,0 464 | 0.577668,0.291827,-0.762326 465 | 0.213305,0.0639341,-0.974892 466 | 0.17229,0.0647611,-0.982916 467 | 0.898643,0.0743679,-0.432339 468 | 0,0,0 469 | 0,0,0 470 | 0,0,0 471 | 0,0,0 472 | 0,0,0 473 | 0.507879,0.2828,-0.813686 474 | 0.525616,0.276146,-0.804656 475 | 0.4637,0.306789,-0.831182 476 | 0.484217,0.290382,-0.825356 477 | 0.645761,0.321758,-0.692434 478 | 0.798937,0.301695,-0.520272 479 | 0.707425,0.138501,-0.693086 480 | 0.713593,0.107182,-0.692314 481 | 0.494096,0.325928,-0.806004 482 | 0.872625,0.0841474,-0.481089 483 | 0.780728,0.283946,-0.556632 484 | 0.77811,0.29345,-0.555368 485 | 0,0,0 486 | 0.736844,0.27468,-0.617751 487 | 0.711434,0.246833,-0.65798 488 | 0.690764,0.26857,-0.671358 489 | 0.712172,0.217171,-0.66757 490 | 0.500144,0.335563,-0.798283 491 | 0.528577,0.320429,-0.786089 492 | 0.955261,0.232437,-0.18289 493 | 0.757902,0.233225,-0.609279 494 | 0.252894,0.126921,-0.959133 495 | 0.957438,0.188425,-0.218653 496 | 0.162569,0.0781859,-0.983595 497 | 0.853364,0.197203,-0.482578 498 | 0.844959,0.173044,-0.506064 499 | 0.874513,0.30706,-0.375445 500 | 0,0,0 501 | 0.654109,0.252164,-0.713132 502 | 0.63385,0.140091,-0.760664 503 | 0,0,0 504 | 0.192106,0.0910486,-0.977142 505 | 0.172113,0.0737939,-0.98231 506 | 0.972162,0.227768,-0.0549741 507 | 0.968891,0.23572,-0.0754124 508 | 0.68177,0.244571,-0.689475 509 | 0.645784,0.27893,-0.710748 510 | 0.729487,0.0424132,-0.68268 511 | 0,0,0 512 | 0.952518,0.303271,-0.0271207 513 | 0,0,0 514 | 0.841859,0.32158,-0.433428 515 | 0.577373,0.0942113,-0.811027 516 | 0,0,0 517 | 0.578952,0.245899,-0.777399 518 | 0.533957,0.276799,-0.79892 519 | 0.567203,0.269978,-0.778076 520 | 0.600237,0.17638,-0.780133 521 | 0.534904,0.277633,-0.797997 522 | 0.629229,0.177059,-0.756785 523 | 0,0,0 524 | 0,0,0 525 | 0.581928,0.203457,-0.78738 526 | 0.751277,0.25392,-0.609187 527 | 0,0,0 528 | 0,0,0 529 | 0,0,0 530 | 0.95537,0.21789,-0.199482 531 | 0.898276,0.278567,-0.339858 532 | 0,0,0 533 | 0.953198,0.152326,-0.26117 534 | 0,0,0 535 | 0.720659,0.211609,-0.660206 536 | 0.718679,0.304385,-0.625181 537 | 0.48392,0.214164,-0.848504 538 | 0.976879,0.212117,-0.0267654 539 | 0.663791,0.314945,-0.678375 540 | 0.314018,0.0904708,-0.945098 541 | 0.419313,0.0582304,-0.905974 542 | 0,0,0 543 | 0,0,0 544 | 0,0,0 545 | 0.9681,0.228694,-0.10238 546 | 0,0,0 547 | 0.743402,0.262723,-0.615087 548 | 0.693836,0.0493693,-0.718439 549 | 0.41123,0.20683,-0.887757 550 | 0,0,0 551 | 0,0,0 552 | 0,0,0 553 | 0.613369,0.194463,-0.765483 554 | 0.603022,0.20074,-0.772056 555 | 0.497938,0.0626151,-0.86495 556 | 0,0,0 557 | 0,0,0 558 | 0.974316,0.224797,-0.0133597 559 | 0.719404,0.20849,-0.662563 560 | 0,0,0 561 | 0.739521,0.294215,-0.605432 562 | 0.802839,0.29782,-0.516483 563 | 0.868137,0.0416866,-0.494572 564 | 0.250201,0.0819004,-0.964724 565 | 0,0,0 566 | 0.443654,0.195646,-0.874583 567 | 0.592975,0.183115,-0.784125 568 | 0,0,0 569 | 0.579458,0.19579,-0.791136 570 | 0,0,0 571 | 0,0,0 572 | 0.832849,0.0618731,-0.550032 573 | 0,0,0 574 | 0,0,0 575 | 0.81359,0.0519312,-0.579117 576 | 0.765838,0.0491953,-0.64115 577 | 0.853882,0.290512,-0.431844 578 | 0,0,0 579 | 0.870131,0.302252,-0.389251 580 | 0.829602,0.0377609,-0.557092 581 | 0.800473,0.0512701,-0.597172 582 | 0,0,0 583 | 0.44197,0.233375,-0.866142 584 | 0.759855,0.284655,-0.58446 585 | 0.705217,0.292594,-0.645801 586 | 0,0,0 587 | 0.977518,0.210614,-0.0100159 588 | 0,0,0 589 | 0,0,0 590 | 0.574559,0.165814,-0.801492 591 | 0,0,0 592 | 0,0,0 593 | 0,0,0 594 | 0.96962,0.240845,0.0427964 595 | 0,0,0 596 | 0,0,0 597 | 0.961577,0.266831,0.0645977 598 | 0,0,0 599 | 0.821167,0.299602,-0.485721 600 | 0.473718,0.219843,-0.852797 601 | 0,0,0 602 | 0,0,0 603 | 0,0,0 604 | 0,0,0 605 | 0.954803,0.293407,0.0475799 606 | 0,0,0 607 | 0,0,0 608 | 0,0,0 609 | 0,0,0 610 | 0,0,0 611 | 0.953936,0.299543,0.0167624 612 | 0,0,0 613 | 0,0,0 614 | 0.723995,0.19945,-0.660344 615 | 0,0,0 616 | 0,0,0 617 | 0,0,0 618 | 0.255626,0.167667,-0.952126 619 | 0,0,0 620 | 0,0,0 621 | -------------------------------------------------------------------------------- /data/interactive/readme.txt: -------------------------------------------------------------------------------- 1 | This example is to test interactive design. 2 | 3 | "s_shape_mod.obj" is the mesh. Don't forget to unit-scale it after loading the mesh. 4 | "s1*" are the strokes. Load it and it will be drawn on the mesh. 5 | "smooth1.csv" is the scalar field follows the strokes. 6 | "48p75_1.csv" and "48p75_1b.csv" are the scalar field and binormal vector field of \theta = 48.75. They are obtained by automatic optimization. -------------------------------------------------------------------------------- /data/interactive/s1_0x.csv: -------------------------------------------------------------------------------- 1 | 33.07,18.7471,-19.0375,-49.8022,-52.4624,-50.4465,-47.0893,-33.0032,-29.7834 2 | -------------------------------------------------------------------------------- /data/interactive/s1_0y.csv: -------------------------------------------------------------------------------- 1 | -355.91,-345.269,-302.999,-258.579,-248.984,-200.603,-188.435,-134.438,-120.139 2 | -------------------------------------------------------------------------------- /data/interactive/s1_0z.csv: -------------------------------------------------------------------------------- 1 | -39.7859,-46.5491,-62.6832,-61.855,-61.2318,-56.6277,-52.2693,0.100386,20.5503 2 | -------------------------------------------------------------------------------- /data/interactive/s1_1x.csv: -------------------------------------------------------------------------------- 1 | 115.982,97.0812,91.3869,85.082,68.7273,46.1017,43.567,37.8529,36.5658,37.6581,46.8171,50.4302,52.7224 2 | -------------------------------------------------------------------------------- /data/interactive/s1_1y.csv: -------------------------------------------------------------------------------- 1 | -349.718,-340.16,-336.27,-331.799,-317.14,-274.962,-263.948,-234.565,-225.003,-188.429,-147.307,-131.181,-120.38 2 | -------------------------------------------------------------------------------- /data/interactive/s1_1z.csv: -------------------------------------------------------------------------------- 1 | -40.2064,-45.8709,-48.4637,-51.2193,-59.1983,-72.2619,-73.3765,-74.0749,-73.753,-68.1695,-38.3745,-17.8432,-2.27759 2 | -------------------------------------------------------------------------------- /data/interactive/s1_2x.csv: -------------------------------------------------------------------------------- 1 | 191.677,182.882,162.55,157.445,145.889,126.444,117.198,117.239,119.94,123.286,127.344,129.528,137.614,139.613,147.989,153.237 2 | -------------------------------------------------------------------------------- /data/interactive/s1_2y.csv: -------------------------------------------------------------------------------- 1 | -339.875,-336.424,-321.513,-316.342,-298.983,-269.306,-240.287,-229.543,-199.244,-186.971,-176.262,-169.391,-152.313,-144.516,-117.825,-104.799 2 | -------------------------------------------------------------------------------- /data/interactive/s1_2z.csv: -------------------------------------------------------------------------------- 1 | -48.661,-50.0454,-56.8305,-59.1013,-65.9668,-73.1246,-75.3263,-75.415,-74.1311,-71.5865,-68.0111,-64.3998,-50.7838,-42.2722,-5.08892,17.0347 2 | -------------------------------------------------------------------------------- /data/interactive/s1_bc.csv: -------------------------------------------------------------------------------- 1 | 0.122656,0.412127,0.465217,0.249853,0.0148849,0.735262,0.359696,0.039519,0.600785,0.0404916,0.564883,0.394625,0.505678,0.207065,0.287257,0.633304,0.244545,0.122151,0.395323,0.473119,0.131558,0.180808,0.33748,0.481712,0.377473,0.407713,0.214814, 2 | 0.0622153,0.104708,0.833076,0.697893,0.238788,0.0633194,0.163153,0.136152,0.700695,0.121477,0.512179,0.366344,0.804763,0.126753,0.0684836,0.299477,0.667946,0.032577,0.128203,0.672333,0.199464,0.0191341,0.0175537,0.963312,0.071943,0.428398,0.499659,0.105926,0.556339,0.337735,0.354001,0.0790401,0.566959,0.372584,0.211889,0.415528,0.175161,0.354651,0.470188, 3 | 0.0227417,0.977011,0.000247595,0.611338,0.244285,0.144377,0.809235,0.120052,0.0707127,0.595075,0.223878,0.181048,0.219208,0.276629,0.504163,0.335655,0.586323,0.0780212,0.045721,0.0947566,0.859522,0.249708,0.28308,0.467211,0.794384,0.106716,0.0989003,0.457385,0.174496,0.368119,0.0364131,0.935739,0.0278482,0.0160019,0.855413,0.128585,0.0461732,0.14286,0.810967,0.361052,0.488565,0.150383,0.0572123,0.0223372,0.92045,0.764508,0.0152765,0.220215, 4 | -------------------------------------------------------------------------------- /data/interactive/s1_flist.csv: -------------------------------------------------------------------------------- 1 | 416,263,922,861,749,592,316,556,539 2 | 952,531,66,67,685,352,353,712,202,131,140,846,836 3 | 745,313,537,538,206,989,949,1025,354,483,575,1053,1068,760,617,331 4 | -------------------------------------------------------------------------------- /data/interactive/smooth1.csv: -------------------------------------------------------------------------------- 1 | 8.35407 2 | 7.23357 3 | 7.57716 4 | 12.0729 5 | 12.986 6 | 12.4133 7 | 11.4315 8 | 1.19141 9 | 1.13375 10 | 1.9471 11 | -1.8667 12 | -0.52978 13 | -1.16479 14 | 7.27009 15 | 6.8923 16 | 6.19234 17 | -8.5145 18 | -8.11819 19 | -8.70649 20 | -0.243981 21 | 0.324514 22 | 0.439075 23 | -11.0872 24 | -11.9239 25 | -12.0574 26 | -12.3022 27 | -12.6114 28 | -12.86 29 | -10.3907 30 | -9.62306 31 | -10.3921 32 | -11.5491 33 | -11.5702 34 | -12.267 35 | -10.9222 36 | -10.141 37 | -10.9039 38 | 0.482517 39 | 0.320988 40 | -0.628889 41 | 10.4759 42 | 10.1032 43 | 10.6839 44 | 8.11606 45 | 7.7425 46 | 7.08089 47 | 14.25 48 | 15.2852 49 | 14.7345 50 | -7.16037 51 | -8.21328 52 | -7.36284 53 | 9.82874 54 | 10.8334 55 | 9.25482 56 | 8.33025 57 | 8.76239 58 | 4.63347 59 | 5.79735 60 | 5.64786 61 | 6.55376 62 | 6.14175 63 | 10.3627 64 | 10.4445 65 | 10.1238 66 | 10.3696 67 | 9.91255 68 | 9.30443 69 | 8.98496 70 | 8.45782 71 | 8.66783 72 | 8.98728 73 | -9.3735 74 | -9.84894 75 | -9.49333 76 | 8.60954 77 | 9.16386 78 | 7.83836 79 | 9.04212 80 | 3.86733 81 | 4.49898 82 | 4.47004 83 | 13.5686 84 | 12.8499 85 | 14.142 86 | -1.05585 87 | -0.0746753 88 | -0.0896064 89 | -14.5585 90 | -12.9923 91 | -14.6038 92 | -3.58489 93 | -4.9764 94 | -3.48994 95 | 6.54433 96 | 0.830811 97 | 2.29446 98 | 0.8812 99 | 2.12265 100 | 3.48905 101 | 2.4507 102 | 5.48181 103 | 5.58551 104 | 4.62322 105 | -12.9839 106 | -12.6557 107 | -14.4466 108 | 8.89141 109 | 8.94677 110 | 7.87449 111 | 7.71707 112 | 6.57233 113 | 6.57488 114 | 5.50302 115 | 6.91177 116 | -2.15513 117 | -2.72622 118 | 7.01192 119 | 7.88963 120 | 4.51914 121 | 3.67476 122 | 4.0776 123 | 5.01305 124 | -5.34254 125 | -6.03392 126 | -6.33356 127 | 10.0727 128 | 10.4086 129 | 11.0793 130 | -2.23832 131 | -1.18541 132 | -1.53694 133 | 9.92744 134 | 14.957 135 | 13.3214 136 | 9.87066 137 | 8.89478 138 | 7.88273 139 | -4.45757 140 | -5.10696 141 | -6.17339 142 | 11.4626 143 | 11.4192 144 | 12.3691 145 | 6.38801 146 | 3.72899 147 | 1.64809 148 | 2.07885 149 | 5.71439 150 | 5.39021 151 | 5.47262 152 | -2.2168 153 | -1.38983 154 | 0.314216 155 | -0.669745 156 | 5.86044 157 | 4.92394 158 | -4.35507 159 | -4.00196 160 | -5.05758 161 | -3.9015 162 | 5.50852 163 | 6.56857 164 | 10.7579 165 | 9.56207 166 | 9.1103 167 | 9.91983 168 | 9.17626 169 | 3.69416 170 | 5.12423 171 | 9.13473 172 | 9.79854 173 | 3.21552 174 | 2.90931 175 | 2.26081 176 | 7.5651 177 | 6.98389 178 | 1.76116 179 | 2.11754 180 | 0.266565 181 | 5.03656 182 | 4.27344 183 | 10.2322 184 | 10.5962 185 | -9.93281 186 | -2.54091 187 | 7.98633 188 | 8.32409 189 | -14.2885 190 | -12.702 191 | -12.5079 192 | 9.63107 193 | 11.2323 194 | 12.0805 195 | 8.01831 196 | -5.59689 197 | -6.65551 198 | -5.86078 199 | -12.9624 200 | -12.8453 201 | -12.0065 202 | 5.27177 203 | 12.3599 204 | 11.1618 205 | 10.2715 206 | 10.8619 207 | 0.232801 208 | 1.25605 209 | 1.51307 210 | -1.0297 211 | -0.186546 212 | 15.8794 213 | 16.0798 214 | 15.3934 215 | 7.55088 216 | 10.8451 217 | 0.48229 218 | -0.335121 219 | 0.455384 220 | -0.755314 221 | 16.1208 222 | 16.0287 223 | 14.6554 224 | 15.8792 225 | 15.5492 226 | 13.4186 227 | 13.2822 228 | 12.2665 229 | 11.3091 230 | 6.35042 231 | 4.46975 232 | 4.60627 233 | -6.45047 234 | -7.41358 235 | -7.30936 236 | 10.0282 237 | 10.3138 238 | 9.461 239 | 11.3694 240 | 2.18516 241 | 2.74436 242 | -5.83293 243 | -6.16533 244 | 1.11222 245 | 1.58372 246 | 2.12611 247 | -9.21444 248 | -10.4186 249 | -10.1096 250 | 1.18037 251 | 2.39595 252 | -14.0874 253 | -14.4173 254 | -13.4361 255 | -8.90778 256 | -10.0885 257 | -10.0071 258 | -9.18443 259 | -8.22789 260 | -8.26069 261 | -13.3029 262 | -10.9818 263 | -9.87572 264 | -10.7935 265 | -11.8385 266 | -11.1021 267 | -11.4904 268 | -10.501 269 | -13.3048 270 | -11.3091 271 | -11.0154 272 | -12.6362 273 | -11.8614 274 | -8.24008 275 | -7.71559 276 | -8.01193 277 | -8.22869 278 | -13.1443 279 | -14.1101 280 | -10.9754 281 | -12.1302 282 | -13.7992 283 | -13.5383 284 | 4.46859 285 | 3.64498 286 | 4.4972 287 | 3.60586 288 | -1.16089 289 | -1.00805 290 | -0.242924 291 | -9.11219 292 | -10.2677 293 | -9.01789 294 | -7.6404 295 | -8.13121 296 | 3.18061 297 | -9.47933 298 | -5.06273 299 | 4.51501 300 | -0.425446 301 | 0.754511 302 | -7.07985 303 | -11.7579 304 | -9.65645 305 | -10.1663 306 | -9.55018 307 | 12.7965 308 | 12.2645 309 | 11.3592 310 | -9.19893 311 | 13.1818 312 | 12.5976 313 | 13.6882 314 | -9.25864 315 | -9.39835 316 | 4.71092 317 | -2.06288 318 | -2.17192 319 | -3.05373 320 | -6.01914 321 | -7.14555 322 | -10.5564 323 | -9.2529 324 | -8.30278 325 | -8.1919 326 | -7.33061 327 | -6.99609 328 | -6.62287 329 | 1.1612 330 | -2.79622 331 | -0.794771 332 | -1.84589 333 | 0.833099 334 | 0.0325416 335 | 1.48578 336 | 1.80565 337 | -3.16265 338 | -4.25161 339 | -2.02348 340 | -2.17402 341 | -1.7667 342 | -0.896528 343 | -8.19926 344 | -7.46595 345 | 5.60197 346 | 10.747 347 | 10.5122 348 | 10.6594 349 | -2.91218 350 | -3.94998 351 | -10.8222 352 | -8.00245 353 | -8.70525 354 | -8.89005 355 | -6.98047 356 | -8.01669 357 | -7.08488 358 | -2.97418 359 | 14.1945 360 | 12.8887 361 | 14.3183 362 | 13.3056 363 | 5.15566 364 | 4.59212 365 | 4.90576 366 | 2.16346 367 | -12.1332 368 | 14.5725 369 | 1.9821 370 | 10.8826 371 | 5.2599 372 | -1.97583 373 | 4.9168 374 | 4.29316 375 | -5.43857 376 | -3.65092 377 | -0.93062 378 | 3.07173 379 | 3.89575 380 | 14.969 381 | -8.91857 382 | -9.10343 383 | -11.5466 384 | -11.0718 385 | -9.46916 386 | 11.54 387 | 12.2544 388 | 12.4063 389 | -11.1822 390 | 6.3726 391 | 6.0781 392 | 3.65754 393 | 3.50141 394 | 4.33568 395 | 2.79359 396 | -9.23398 397 | -2.9235 398 | -5.73468 399 | 10.0612 400 | 11.7911 401 | 11.5778 402 | -4.84089 403 | -5.73921 404 | -5.44179 405 | -5.37099 406 | -2.03192 407 | -4.56922 408 | -3.43623 409 | -4.01785 410 | -3.34442 411 | 4.61489 412 | -12.1984 413 | 3.37812 414 | -3.14372 415 | 10.5428 416 | -11.1197 417 | -4.48633 418 | -5.61212 419 | 7.06436 420 | 0.00307759 421 | -4.72921 422 | 5.58296 423 | 4.91193 424 | 5.91386 425 | -11.43 426 | -0.79376 427 | 3.18045 428 | -8.82009 429 | -4.98856 430 | 8.08249 431 | 8.04356 432 | -7.48518 433 | -8.0501 434 | 10.0574 435 | 9.89606 436 | 10.0147 437 | 11.8417 438 | -11.4122 439 | -12.4145 440 | -10.3783 441 | -9.71125 442 | -12.5256 443 | -13.3761 444 | -4.86185 445 | -11.6716 446 | -11.2845 447 | 11.2661 448 | -10.4562 449 | 11.3124 450 | -10.7995 451 | -11.7424 452 | -11.3829 453 | -6.07406 454 | -12.3877 455 | -12.9982 456 | -13.082 457 | -12.6968 458 | -12.5094 459 | 15.2776 460 | -6.99052 461 | -11.8856 462 | -11.9773 463 | 10.7164 464 | -1.39816 465 | -10.3237 466 | -10.8012 467 | 7.73676 468 | 8.38162 469 | 8.79597 470 | 9.16259 471 | 9.97987 472 | 9.54542 473 | -6.22382 474 | -4.07762 475 | -5.05922 476 | -4.98496 477 | 2.65647 478 | 4.40598 479 | 3.42236 480 | 4.05529 481 | -4.40775 482 | 7.26856 483 | 4.15236 484 | 4.14865 485 | 7.23501 486 | 3.40625 487 | 2.38279 488 | 2.34252 489 | 0.809509 490 | -3.07527 491 | -2.42265 492 | 10.7315 493 | 3.57245 494 | -11.797 495 | 10.0941 496 | -12.2507 497 | 9.09934 498 | 8.57913 499 | 6.09903 500 | 10.2726 501 | 0.379388 502 | 0.954861 503 | 9.04952 504 | -12.1221 505 | -12.7902 506 | 10.9523 507 | 10.7638 508 | 1.32429 509 | 1.29623 510 | 5.2816 511 | -5.16055 512 | 13.289 513 | -13.6263 514 | 5.24173 515 | -1.29743 516 | -2.43094 517 | -3.12056 518 | -3.89245 519 | -3.97608 520 | -2.51933 521 | -4.18931 522 | -0.883536 523 | -4.40924 524 | -4.32875 525 | -3.65056 526 | 3.38598 527 | 2.29818 528 | 5.7745 529 | 5.41967 530 | 10.3141 531 | 6.88411 532 | -14.5522 533 | 9.50745 534 | -7.19013 535 | 1.65149 536 | 3.64903 537 | -9.11952 538 | 11.8306 539 | 2.73736 540 | -9.16861 541 | -7.89988 542 | -4.33406 543 | -9.70352 544 | -8.65407 545 | 10.7015 546 | -4.85315 547 | 3.35822 548 | 4.58747 549 | -10.0741 550 | -10.9549 551 | -5.43548 552 | -5.72277 553 | -2.29677 554 | -2.9947 555 | -6.56512 556 | -6.11918 557 | -6.48578 558 | 11.6786 559 | 2.01689 560 | 7.13138 561 | 3.86141 562 | 4.84533 563 | 7.29525 564 | -9.91507 565 | -10.3005 566 | -10.1734 567 | -3.34999 568 | 5.05524 569 | -3.79526 570 | -4.59497 571 | -9.71232 572 | 6.67268 573 | 4.61607 574 | 4.54555 575 | 6.40692 576 | 5.67507 577 | 5.78117 578 | 9.55564 579 | 6.00021 580 | 6.6157 581 | 6.11498 582 | -4.77804 583 | -9.15682 584 | 3.96 585 | 3.06977 586 | 1.39943 587 | 11.9599 588 | 6.59392 589 | -5.1166 590 | -4.11743 591 | -9.62962 592 | 4.72222 593 | 4.86845 594 | 12.9112 595 | 3.35283 596 | -7.23692 597 | 14.0794 598 | -4.43703 599 | 4.96387 600 | -9.0411 601 | 7.9286 602 | 10.7142 603 | 10.6845 604 | -4.57224 605 | 13.8753 606 | 4.55932 607 | -1.43751 608 | 5.91159 609 | 7.53011 610 | 4.66615 611 | 13.6628 612 | -6.30215 613 | -6.02724 614 | 2.82801 615 | -8.92822 616 | -9.14392 617 | -6.78744 618 | -9.94377 619 | -7.72476 620 | -9.38923 621 | -------------------------------------------------------------------------------- /data/pseudo-geodesic/readme.txt: -------------------------------------------------------------------------------- 1 | "Hall.obj" is the triangle mesh, 2 | "72.csv" is the scalar field for \theta = 72 degree, 3 | "72b.csv" is the corresponding binormal vectors of the level sets. -------------------------------------------------------------------------------- /data/quads/info_colleft.csv: -------------------------------------------------------------------------------- 1 | 474,518,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 2 | 391,432,475,519,563,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 3 | 352,392,433,476,520,564,608,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 4 | 280,315,353,393,434,477,521,565,609,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 5 | 281,316,354,394,435,478,522,566,610,654,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 6 | 248,282,317,355,395,436,479,523,567,611,655,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 7 | 218,249,283,318,356,396,437,480,524,568,612,656,699,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 8 | 190,219,250,284,319,357,397,438,481,525,569,613,657,700,742,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 9 | 191,220,251,285,320,358,398,439,482,526,570,614,658,701,743,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 10 | 141,165,192,221,252,286,321,359,399,440,483,527,571,615,659,702,744,783,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 11 | 119,142,166,193,222,253,287,322,360,400,441,484,528,572,616,660,703,745,784,821,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 12 | 99,120,143,167,194,223,254,288,323,361,401,442,485,529,573,617,661,704,746,785,822,858,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 13 | 80,100,121,144,168,195,224,255,289,324,362,402,443,486,530,574,618,662,705,747,786,823,859,893,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 14 | 63,81,101,122,145,169,196,225,256,290,325,363,403,444,487,531,575,619,663,706,748,787,824,860,894,926,956,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 15 | 48,64,82,102,123,146,170,197,226,257,291,326,364,404,445,488,532,576,620,664,707,749,788,825,861,895,927,957,985,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 16 | 35,49,65,83,103,124,147,171,198,227,258,292,327,365,405,446,489,533,577,621,665,708,750,789,826,862,896,928,958,986,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 17 | 14,24,36,50,66,84,104,125,148,172,199,228,259,293,328,366,406,447,490,534,578,622,666,709,751,790,827,863,897,929,959,987,1012,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 18 | 6,15,25,37,51,67,85,105,126,149,173,200,229,260,294,329,367,407,448,491,535,579,623,667,710,752,791,828,864,898,930,960,988,1013,1036,-1,-1,-1,-1,-1,-1,-1,-1,-1 19 | 0,7,16,26,38,52,68,86,106,127,150,174,201,230,261,295,330,368,408,449,492,536,580,624,668,711,753,792,829,865,899,931,961,989,1014,1037,1058,-1,-1,-1,-1,-1,-1,-1 20 | 1,8,17,27,39,53,69,87,107,128,151,175,202,231,262,296,331,369,409,450,493,537,581,625,669,712,754,793,830,866,900,932,962,990,1015,1038,1059,1078,-1,-1,-1,-1,-1,-1 21 | 2,9,18,28,40,54,70,88,108,129,152,176,203,232,263,297,332,370,410,451,494,538,582,626,670,713,755,794,831,867,901,933,963,991,1016,1039,1060,1079,1096,1111,-1,-1,-1,-1 22 | 3,10,19,29,41,55,71,89,109,130,153,177,204,233,264,298,333,371,411,452,495,539,583,627,671,714,756,795,832,868,902,934,964,992,1017,1040,1061,1080,1097,1112,1126,-1,-1,-1 23 | 4,11,20,30,42,56,72,90,110,131,154,178,205,234,265,299,334,372,412,453,496,540,584,628,672,715,757,796,833,869,903,935,965,993,1018,1041,1062,1081,1098,1113,1127,1139,1150,-1 24 | 12,21,31,43,57,73,91,111,132,155,179,206,235,266,300,335,373,413,454,497,541,585,629,673,716,758,797,834,870,904,936,966,994,1019,1042,1063,1082,1099,1114,1128,1140,1151,1160,-1 25 | 22,32,44,58,74,92,112,133,156,180,207,236,267,301,336,374,414,455,498,542,586,630,674,717,759,798,835,871,905,937,967,995,1020,1043,1064,1083,1100,1115,1129,1141,1152,1161,1169,1176 26 | 33,45,59,75,93,113,134,157,181,208,237,268,302,337,375,415,456,499,543,587,631,675,718,760,799,836,872,906,938,968,996,1021,1044,1065,1084,1101,1116,1130,1142,1153,1162,1170,1177,-1 27 | 46,60,76,94,114,135,158,182,209,238,269,303,338,376,416,457,500,544,588,632,676,719,761,800,837,873,907,939,969,997,1022,1045,1066,1085,1102,1117,1131,1143,1154,1163,1171,1178,-1,-1 28 | 61,77,95,115,136,159,183,210,239,270,304,339,377,417,458,501,545,589,633,677,720,762,801,838,874,908,940,970,998,1023,1046,1067,1086,1103,1118,1132,1144,1155,1164,1172,1179,-1,-1,-1 29 | 78,96,116,137,160,184,211,240,271,305,340,378,418,459,502,546,590,634,678,721,763,802,839,875,909,941,971,999,1024,1047,1068,1087,1104,1119,1133,1145,1156,1165,1173,-1,-1,-1,-1,-1 30 | 97,117,138,161,185,212,241,272,306,341,379,419,460,503,547,591,635,679,722,764,803,840,876,910,942,972,1000,1025,1048,1069,1088,1105,1120,1134,1146,1157,1166,1174,-1,-1,-1,-1,-1,-1 31 | 139,162,186,213,242,273,307,342,380,420,461,504,548,592,636,680,723,765,804,841,877,911,943,973,1001,1026,1049,1070,1089,1106,1121,1135,1147,1158,1167,-1,-1,-1,-1,-1,-1,-1,-1,-1 32 | 163,187,214,243,274,308,343,381,421,462,505,549,593,637,681,724,766,805,842,878,912,944,974,1002,1027,1050,1071,1090,1107,1122,1136,1148,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 33 | 188,215,244,275,309,344,382,422,463,506,550,594,638,682,725,767,806,843,879,913,945,975,1003,1028,1051,1072,1091,1108,1123,1137,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 34 | 216,245,276,310,345,383,423,464,507,551,595,639,683,726,768,807,844,880,914,946,976,1004,1029,1052,1073,1092,1109,1124,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 35 | 246,277,311,346,384,424,465,508,552,596,640,684,727,769,808,845,881,915,947,977,1005,1030,1053,1074,1093,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 36 | 278,312,347,385,425,466,509,553,597,641,685,728,770,809,846,882,916,948,978,1006,1031,1054,1075,1094,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 37 | 313,348,386,426,467,510,554,598,642,686,729,771,810,847,883,917,949,979,1007,1032,1055,1076,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 38 | 349,387,427,468,511,555,599,643,687,730,772,811,848,884,918,950,980,1008,1033,1056,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 39 | 350,388,428,469,512,556,600,644,688,731,773,812,849,885,919,951,981,1009,1034,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 40 | 389,429,470,513,557,601,645,689,732,774,813,850,886,920,952,982,1010,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 41 | 430,471,514,558,602,646,690,733,775,814,851,887,921,953,983,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 42 | 472,515,559,603,647,691,734,776,815,852,888,922,954,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 43 | 516,560,604,648,692,735,777,816,853,889,923,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 44 | 561,605,649,693,736,778,817,854,890,924,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 45 | 606,650,694,737,779,818,855,891,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 46 | 651,695,738,780,819,856,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 47 | 652,696,739,781,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 48 | 697,740,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 49 | -------------------------------------------------------------------------------- /data/quads/info_colright.csv: -------------------------------------------------------------------------------- 1 | 475,519,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 2 | 392,433,476,520,564,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 3 | 353,393,434,477,521,565,609,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 4 | 281,316,354,394,435,478,522,566,610,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 5 | 282,317,355,395,436,479,523,567,611,655,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 6 | 249,283,318,356,396,437,480,524,568,612,656,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 7 | 219,250,284,319,357,397,438,481,525,569,613,657,700,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 8 | 191,220,251,285,320,358,398,439,482,526,570,614,658,701,743,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 9 | 192,221,252,286,321,359,399,440,483,527,571,615,659,702,744,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 10 | 142,166,193,222,253,287,322,360,400,441,484,528,572,616,660,703,745,784,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 11 | 120,143,167,194,223,254,288,323,361,401,442,485,529,573,617,661,704,746,785,822,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 12 | 100,121,144,168,195,224,255,289,324,362,402,443,486,530,574,618,662,705,747,786,823,859,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 13 | 81,101,122,145,169,196,225,256,290,325,363,403,444,487,531,575,619,663,706,748,787,824,860,894,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 14 | 64,82,102,123,146,170,197,226,257,291,326,364,404,445,488,532,576,620,664,707,749,788,825,861,895,927,957,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 15 | 49,65,83,103,124,147,171,198,227,258,292,327,365,405,446,489,533,577,621,665,708,750,789,826,862,896,928,958,986,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 16 | 36,50,66,84,104,125,148,172,199,228,259,293,328,366,406,447,490,534,578,622,666,709,751,790,827,863,897,929,959,987,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 17 | 15,25,37,51,67,85,105,126,149,173,200,229,260,294,329,367,407,448,491,535,579,623,667,710,752,791,828,864,898,930,960,988,1013,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 18 | 7,16,26,38,52,68,86,106,127,150,174,201,230,261,295,330,368,408,449,492,536,580,624,668,711,753,792,829,865,899,931,961,989,1014,1037,-1,-1,-1,-1,-1,-1,-1,-1,-1 19 | 1,8,17,27,39,53,69,87,107,128,151,175,202,231,262,296,331,369,409,450,493,537,581,625,669,712,754,793,830,866,900,932,962,990,1015,1038,1059,-1,-1,-1,-1,-1,-1,-1 20 | 2,9,18,28,40,54,70,88,108,129,152,176,203,232,263,297,332,370,410,451,494,538,582,626,670,713,755,794,831,867,901,933,963,991,1016,1039,1060,1079,-1,-1,-1,-1,-1,-1 21 | 3,10,19,29,41,55,71,89,109,130,153,177,204,233,264,298,333,371,411,452,495,539,583,627,671,714,756,795,832,868,902,934,964,992,1017,1040,1061,1080,1097,1112,-1,-1,-1,-1 22 | 4,11,20,30,42,56,72,90,110,131,154,178,205,234,265,299,334,372,412,453,496,540,584,628,672,715,757,796,833,869,903,935,965,993,1018,1041,1062,1081,1098,1113,1127,-1,-1,-1 23 | 5,12,21,31,43,57,73,91,111,132,155,179,206,235,266,300,335,373,413,454,497,541,585,629,673,716,758,797,834,870,904,936,966,994,1019,1042,1063,1082,1099,1114,1128,1140,1151,-1 24 | 13,22,32,44,58,74,92,112,133,156,180,207,236,267,301,336,374,414,455,498,542,586,630,674,717,759,798,835,871,905,937,967,995,1020,1043,1064,1083,1100,1115,1129,1141,1152,1161,-1 25 | 23,33,45,59,75,93,113,134,157,181,208,237,268,302,337,375,415,456,499,543,587,631,675,718,760,799,836,872,906,938,968,996,1021,1044,1065,1084,1101,1116,1130,1142,1153,1162,1170,1177 26 | 34,46,60,76,94,114,135,158,182,209,238,269,303,338,376,416,457,500,544,588,632,676,719,761,800,837,873,907,939,969,997,1022,1045,1066,1085,1102,1117,1131,1143,1154,1163,1171,1178,-1 27 | 47,61,77,95,115,136,159,183,210,239,270,304,339,377,417,458,501,545,589,633,677,720,762,801,838,874,908,940,970,998,1023,1046,1067,1086,1103,1118,1132,1144,1155,1164,1172,1179,-1,-1 28 | 62,78,96,116,137,160,184,211,240,271,305,340,378,418,459,502,546,590,634,678,721,763,802,839,875,909,941,971,999,1024,1047,1068,1087,1104,1119,1133,1145,1156,1165,1173,1180,-1,-1,-1 29 | 79,97,117,138,161,185,212,241,272,306,341,379,419,460,503,547,591,635,679,722,764,803,840,876,910,942,972,1000,1025,1048,1069,1088,1105,1120,1134,1146,1157,1166,1174,-1,-1,-1,-1,-1 30 | 98,118,139,162,186,213,242,273,307,342,380,420,461,504,548,592,636,680,723,765,804,841,877,911,943,973,1001,1026,1049,1070,1089,1106,1121,1135,1147,1158,1167,1175,-1,-1,-1,-1,-1,-1 31 | 140,163,187,214,243,274,308,343,381,421,462,505,549,593,637,681,724,766,805,842,878,912,944,974,1002,1027,1050,1071,1090,1107,1122,1136,1148,1159,1168,-1,-1,-1,-1,-1,-1,-1,-1,-1 32 | 164,188,215,244,275,309,344,382,422,463,506,550,594,638,682,725,767,806,843,879,913,945,975,1003,1028,1051,1072,1091,1108,1123,1137,1149,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 33 | 189,216,245,276,310,345,383,423,464,507,551,595,639,683,726,768,807,844,880,914,946,976,1004,1029,1052,1073,1092,1109,1124,1138,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 34 | 217,246,277,311,346,384,424,465,508,552,596,640,684,727,769,808,845,881,915,947,977,1005,1030,1053,1074,1093,1110,1125,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 35 | 247,278,312,347,385,425,466,509,553,597,641,685,728,770,809,846,882,916,948,978,1006,1031,1054,1075,1094,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 36 | 279,313,348,386,426,467,510,554,598,642,686,729,771,810,847,883,917,949,979,1007,1032,1055,1076,1095,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 37 | 314,349,387,427,468,511,555,599,643,687,730,772,811,848,884,918,950,980,1008,1033,1056,1077,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 38 | 350,388,428,469,512,556,600,644,688,731,773,812,849,885,919,951,981,1009,1034,1057,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 39 | 351,389,429,470,513,557,601,645,689,732,774,813,850,886,920,952,982,1010,1035,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 40 | 390,430,471,514,558,602,646,690,733,775,814,851,887,921,953,983,1011,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 41 | 431,472,515,559,603,647,691,734,776,815,852,888,922,954,984,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 42 | 473,516,560,604,648,692,735,777,816,853,889,923,955,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 43 | 517,561,605,649,693,736,778,817,854,890,924,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 44 | 562,606,650,694,737,779,818,855,891,925,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 45 | 607,651,695,738,780,819,856,892,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 46 | 652,696,739,781,820,857,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 47 | 653,697,740,782,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 48 | 698,741,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 49 | -------------------------------------------------------------------------------- /data/quads/info_cols.csv: -------------------------------------------------------------------------------- 1 | 474,518,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 2 | 391,432,475,519,563,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 3 | 352,392,433,476,520,564,608,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 4 | 280,315,353,393,434,477,521,565,609,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 5 | 281,316,354,394,435,478,522,566,610,654,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 6 | 248,282,317,355,395,436,479,523,567,611,655,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 7 | 218,249,283,318,356,396,437,480,524,568,612,656,699,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 8 | 190,219,250,284,319,357,397,438,481,525,569,613,657,700,742,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 9 | 191,220,251,285,320,358,398,439,482,526,570,614,658,701,743,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 10 | 141,165,192,221,252,286,321,359,399,440,483,527,571,615,659,702,744,783,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 11 | 119,142,166,193,222,253,287,322,360,400,441,484,528,572,616,660,703,745,784,821,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 12 | 99,120,143,167,194,223,254,288,323,361,401,442,485,529,573,617,661,704,746,785,822,858,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 13 | 80,100,121,144,168,195,224,255,289,324,362,402,443,486,530,574,618,662,705,747,786,823,859,893,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 14 | 63,81,101,122,145,169,196,225,256,290,325,363,403,444,487,531,575,619,663,706,748,787,824,860,894,926,956,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 15 | 48,64,82,102,123,146,170,197,226,257,291,326,364,404,445,488,532,576,620,664,707,749,788,825,861,895,927,957,985,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 16 | 35,49,65,83,103,124,147,171,198,227,258,292,327,365,405,446,489,533,577,621,665,708,750,789,826,862,896,928,958,986,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 17 | 14,24,36,50,66,84,104,125,148,172,199,228,259,293,328,366,406,447,490,534,578,622,666,709,751,790,827,863,897,929,959,987,1012,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 18 | 6,15,25,37,51,67,85,105,126,149,173,200,229,260,294,329,367,407,448,491,535,579,623,667,710,752,791,828,864,898,930,960,988,1013,1036,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 19 | 0,7,16,26,38,52,68,86,106,127,150,174,201,230,261,295,330,368,408,449,492,536,580,624,668,711,753,792,829,865,899,931,961,989,1014,1037,1058,-1,-1,-1,-1,-1,-1,-1,-1,-1 20 | 1,8,17,27,39,53,69,87,107,128,151,175,202,231,262,296,331,369,409,450,493,537,581,625,669,712,754,793,830,866,900,932,962,990,1015,1038,1059,1078,-1,-1,-1,-1,-1,-1,-1,-1 21 | 2,9,18,28,40,54,70,88,108,129,152,176,203,232,263,297,332,370,410,451,494,538,582,626,670,713,755,794,831,867,901,933,963,991,1016,1039,1060,1079,1096,1111,-1,-1,-1,-1,-1,-1 22 | 3,10,19,29,41,55,71,89,109,130,153,177,204,233,264,298,333,371,411,452,495,539,583,627,671,714,756,795,832,868,902,934,964,992,1017,1040,1061,1080,1097,1112,1126,-1,-1,-1,-1,-1 23 | 4,11,20,30,42,56,72,90,110,131,154,178,205,234,265,299,334,372,412,453,496,540,584,628,672,715,757,796,833,869,903,935,965,993,1018,1041,1062,1081,1098,1113,1127,1139,1150,-1,-1,-1 24 | 5,12,21,31,43,57,73,91,111,132,155,179,206,235,266,300,335,373,413,454,497,541,585,629,673,716,758,797,834,870,904,936,966,994,1019,1042,1063,1082,1099,1114,1128,1140,1151,1160,-1,-1 25 | 13,22,32,44,58,74,92,112,133,156,180,207,236,267,301,336,374,414,455,498,542,586,630,674,717,759,798,835,871,905,937,967,995,1020,1043,1064,1083,1100,1115,1129,1141,1152,1161,1169,1176,-1 26 | 23,33,45,59,75,93,113,134,157,181,208,237,268,302,337,375,415,456,499,543,587,631,675,718,760,799,836,872,906,938,968,996,1021,1044,1065,1084,1101,1116,1130,1142,1153,1162,1170,1177,-1,-1 27 | 34,46,60,76,94,114,135,158,182,209,238,269,303,338,376,416,457,500,544,588,632,676,719,761,800,837,873,907,939,969,997,1022,1045,1066,1085,1102,1117,1131,1143,1154,1163,1171,1178,-1,-1,-1 28 | 47,61,77,95,115,136,159,183,210,239,270,304,339,377,417,458,501,545,589,633,677,720,762,801,838,874,908,940,970,998,1023,1046,1067,1086,1103,1118,1132,1144,1155,1164,1172,1179,-1,-1,-1,-1 29 | 62,78,96,116,137,160,184,211,240,271,305,340,378,418,459,502,546,590,634,678,721,763,802,839,875,909,941,971,999,1024,1047,1068,1087,1104,1119,1133,1145,1156,1165,1173,1180,-1,-1,-1,-1,-1 30 | 79,97,117,138,161,185,212,241,272,306,341,379,419,460,503,547,591,635,679,722,764,803,840,876,910,942,972,1000,1025,1048,1069,1088,1105,1120,1134,1146,1157,1166,1174,-1,-1,-1,-1,-1,-1,-1 31 | 98,118,139,162,186,213,242,273,307,342,380,420,461,504,548,592,636,680,723,765,804,841,877,911,943,973,1001,1026,1049,1070,1089,1106,1121,1135,1147,1158,1167,1175,-1,-1,-1,-1,-1,-1,-1,-1 32 | 140,163,187,214,243,274,308,343,381,421,462,505,549,593,637,681,724,766,805,842,878,912,944,974,1002,1027,1050,1071,1090,1107,1122,1136,1148,1159,1168,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 33 | 164,188,215,244,275,309,344,382,422,463,506,550,594,638,682,725,767,806,843,879,913,945,975,1003,1028,1051,1072,1091,1108,1123,1137,1149,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 34 | 189,216,245,276,310,345,383,423,464,507,551,595,639,683,726,768,807,844,880,914,946,976,1004,1029,1052,1073,1092,1109,1124,1138,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 35 | 217,246,277,311,346,384,424,465,508,552,596,640,684,727,769,808,845,881,915,947,977,1005,1030,1053,1074,1093,1110,1125,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 36 | 247,278,312,347,385,425,466,509,553,597,641,685,728,770,809,846,882,916,948,978,1006,1031,1054,1075,1094,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 37 | 279,313,348,386,426,467,510,554,598,642,686,729,771,810,847,883,917,949,979,1007,1032,1055,1076,1095,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 38 | 314,349,387,427,468,511,555,599,643,687,730,772,811,848,884,918,950,980,1008,1033,1056,1077,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 39 | 350,388,428,469,512,556,600,644,688,731,773,812,849,885,919,951,981,1009,1034,1057,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 40 | 351,389,429,470,513,557,601,645,689,732,774,813,850,886,920,952,982,1010,1035,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 41 | 390,430,471,514,558,602,646,690,733,775,814,851,887,921,953,983,1011,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 42 | 431,472,515,559,603,647,691,734,776,815,852,888,922,954,984,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 43 | 473,516,560,604,648,692,735,777,816,853,889,923,955,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 44 | 517,561,605,649,693,736,778,817,854,890,924,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 45 | 562,606,650,694,737,779,818,855,891,925,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 46 | 607,651,695,738,780,819,856,892,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 47 | 652,696,739,781,820,857,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 48 | 653,697,740,782,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 49 | 698,741,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 50 | -------------------------------------------------------------------------------- /data/quads/info_rowleft.csv: -------------------------------------------------------------------------------- 1 | 0,1,2,3,4,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 2 | 6,7,8,9,10,11,12,13,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 3 | 14,15,16,17,18,19,20,21,22,23,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 4 | 24,25,26,27,28,29,30,31,32,33,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 5 | 35,36,37,38,39,40,41,42,43,44,45,46,47,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 6 | 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 7 | 63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 8 | 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 9 | 99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 10 | 119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 11 | 141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 12 | 165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 13 | 190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 14 | 218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 15 | 248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 16 | 280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,-1,-1,-1,-1,-1,-1,-1,-1,-1 17 | 315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,-1,-1,-1,-1,-1,-1,-1 18 | 352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,-1,-1,-1,-1,-1 19 | 391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,-1,-1,-1 20 | 432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,-1,-1 21 | 474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517 22 | 519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562 23 | 564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607 24 | 610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653 25 | 656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,-1 26 | 700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,-1,-1,-1 27 | 744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,-1,-1,-1,-1,-1,-1 28 | 784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,-1,-1,-1,-1,-1,-1,-1 29 | 822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,-1,-1,-1,-1,-1,-1,-1,-1,-1 30 | 859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 31 | 894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 32 | 926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 33 | 957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 34 | 987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 35 | 1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 36 | 1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 37 | 1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 38 | 1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 39 | 1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 40 | 1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 41 | 1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 42 | 1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 43 | 1151,1152,1153,1154,1155,1156,1157,1158,1159,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 44 | 1161,1162,1163,1164,1165,1166,1167,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 45 | 1169,1170,1171,1172,1173,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 46 | -------------------------------------------------------------------------------- /data/quads/info_rowright.csv: -------------------------------------------------------------------------------- 1 | 7,8,9,10,11,12,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 2 | 15,16,17,18,19,20,21,22,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 3 | 24,25,26,27,28,29,30,31,32,33,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 4 | 36,37,38,39,40,41,42,43,44,45,46,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 5 | 49,50,51,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 6 | 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 7 | 81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 8 | 100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 9 | 120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 10 | 142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 11 | 165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 12 | 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 13 | 219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 14 | 249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 15 | 282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 16 | 315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,-1,-1,-1,-1,-1,-1,-1,-1,-1 17 | 353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,-1,-1,-1,-1,-1,-1,-1 18 | 392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,-1,-1,-1,-1,-1 19 | 432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,-1,-1,-1 20 | 475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,-1,-1 21 | 518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561 22 | 563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606 23 | 608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651 24 | 654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697 25 | 699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,-1 26 | 742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,-1,-1,-1 27 | 783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,-1,-1,-1,-1,-1,-1 28 | 821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,-1,-1,-1,-1,-1,-1,-1 29 | 858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,-1,-1,-1,-1,-1,-1,-1,-1,-1 30 | 893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 31 | 926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 32 | 956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 33 | 985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 34 | 1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 35 | 1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 36 | 1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 37 | 1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 38 | 1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 39 | 1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 40 | 1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 41 | 1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 42 | 1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 43 | 1160,1161,1162,1163,1164,1165,1166,1167,1168,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 44 | 1169,1170,1171,1172,1173,1174,1175,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 45 | 1176,1177,1178,1179,1180,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 46 | -------------------------------------------------------------------------------- /data/quads/info_rows.csv: -------------------------------------------------------------------------------- 1 | 0,1,2,3,4,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 2 | 6,7,8,9,10,11,12,13,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 3 | 14,15,16,17,18,19,20,21,22,23,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 4 | 24,25,26,27,28,29,30,31,32,33,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 5 | 35,36,37,38,39,40,41,42,43,44,45,46,47,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 6 | 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 7 | 63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 8 | 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 9 | 99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 10 | 119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 11 | 141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 12 | 165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 13 | 190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 14 | 218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 15 | 248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 16 | 280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 17 | 315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,-1,-1,-1,-1,-1,-1,-1,-1,-1 18 | 352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,-1,-1,-1,-1,-1,-1,-1 19 | 391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,-1,-1,-1,-1,-1 20 | 432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,-1,-1,-1,-1 21 | 474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,-1,-1 22 | 518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,-1 23 | 563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,-1 24 | 608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653 25 | 654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,-1 26 | 699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,-1,-1,-1 27 | 742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,-1,-1,-1,-1,-1 28 | 783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,-1,-1,-1,-1,-1,-1,-1,-1 29 | 821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,-1,-1,-1,-1,-1,-1,-1,-1,-1 30 | 858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 31 | 893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 32 | 926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 33 | 956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 34 | 985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 35 | 1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 36 | 1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 37 | 1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 38 | 1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 39 | 1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 40 | 1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 41 | 1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 42 | 1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 43 | 1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 44 | 1160,1161,1162,1163,1164,1165,1166,1167,1168,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 45 | 1169,1170,1171,1172,1173,1174,1175,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 46 | 1176,1177,1178,1179,1180,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 47 | -------------------------------------------------------------------------------- /data/quads/readme.txt: -------------------------------------------------------------------------------- 1 | This is to test extrating quad meshes from scalar fields, and quad mesh optimizations. 2 | "tri.obj" is the triangle mesh 3 | "60.csv" and "120.csv" are the two scalar fields. 4 | "quad.obj" is the quad mesh extracted directly from the triangle mesh and the two scalar fields 5 | "info*" are for the structural information of the quad mesh. 6 | "quad_opt.obj" is the PP quad mesh whose binormal vectors of the two families of curves has desired inclination angles with the normal vectors. -------------------------------------------------------------------------------- /data/strip/crease_b_x.csv: -------------------------------------------------------------------------------- 1 | 0.691707,0.6482,0.66753,0.808486,1.18267,1.24225,1.11489,0.616848,0.136677,-0.370062,-0.804815,-0.906053,-0.971946,-0.774136,-0.675923,-0.618256,-0.625176,-0.669136 2 | -------------------------------------------------------------------------------- /data/strip/crease_b_y.csv: -------------------------------------------------------------------------------- 1 | 0.287854,0.422981,0.64421,0.841893,1.07945,1.10099,1.07005,0.995796,0.958253,0.948569,0.969201,0.9833,1.00253,0.900784,0.794813,0.599241,0.530124,0.405947 2 | -------------------------------------------------------------------------------- /data/strip/crease_b_z.csv: -------------------------------------------------------------------------------- 1 | -0.663263,-0.643064,-0.526066,-0.323481,0.0350464,0.0802943,0.00909455,-0.18462,-0.288919,-0.312676,-0.256003,-0.224259,-0.191881,-0.341824,-0.455983,-0.589245,-0.61371,-0.628273 2 | -------------------------------------------------------------------------------- /data/strip/crease_x.csv: -------------------------------------------------------------------------------- 1 | -2.89691,-3.06792,-3.03014,-2.78142,-2.41267,-1.97841,-1.49765,-0.97734,-0.428251,0.134403,0.692477,1.2251,1.71198,2.1261,2.42518,2.55336,2.49429,2.30591 2 | -------------------------------------------------------------------------------- /data/strip/crease_y.csv: -------------------------------------------------------------------------------- 1 | 1.38413,1.91156,2.3997,2.74908,2.9827,3.14669,3.26223,3.33722,3.3787,3.39,3.36647,3.29648,3.16623,2.9541,2.63152,2.18498,1.66186,1.13559 2 | -------------------------------------------------------------------------------- /data/strip/crease_z.csv: -------------------------------------------------------------------------------- 1 | -0.720693,-0.640792,-0.375696,-0.015232,0.339381,0.658449,0.929095,1.13275,1.25256,1.27875,1.20481,1.0349,0.783951,0.468693,0.120617,-0.191612,-0.384741,-0.448236 2 | -------------------------------------------------------------------------------- /data/strip/opt_b_x.csv: -------------------------------------------------------------------------------- 1 | 0.674752,0.677582,0.661974,0.569793,0.428512,0.286595,0.161629,0.0655918,0.0100923,-0.00478803,-0.00368079,-0.0191764,-0.0734576,-0.171437,-0.308001,-0.464514,-0.599441,-0.674312,-0.702969,-0.702316 2 | -------------------------------------------------------------------------------- /data/strip/opt_b_y.csv: -------------------------------------------------------------------------------- 1 | 0.31805,0.320006,0.317488,0.357694,0.482858,0.635673,0.770842,0.87034,0.929717,0.951538,0.944572,0.901837,0.81975,0.698249,0.551183,0.414022,0.33592,0.321571,0.327779,0.327398 2 | -------------------------------------------------------------------------------- /data/strip/opt_b_z.csv: -------------------------------------------------------------------------------- 1 | -0.665998,-0.662178,-0.678964,-0.739859,-0.763692,-0.716787,-0.616181,-0.488064,-0.368137,-0.307495,-0.328284,-0.431651,-0.567991,-0.695023,-0.775456,-0.782824,-0.726519,-0.664752,-0.631186,-0.63211 2 | -------------------------------------------------------------------------------- /data/strip/opt_x.csv: -------------------------------------------------------------------------------- 1 | -2.62115,-2.89691,-3.06792,-3.03014,-2.78142,-2.41267,-1.97841,-1.49765,-0.97734,-0.428251,0.134403,0.692477,1.2251,1.71198,2.1261,2.42518,2.55336,2.49429,2.30591,2.0495 2 | -------------------------------------------------------------------------------- /data/strip/opt_y.csv: -------------------------------------------------------------------------------- 1 | 0.895294,1.38413,1.91156,2.3997,2.74908,2.9827,3.14669,3.26223,3.33722,3.3787,3.39,3.36647,3.29648,3.16623,2.9541,2.63152,2.18498,1.66186,1.13559,0.634377 2 | -------------------------------------------------------------------------------- /data/strip/opt_z.csv: -------------------------------------------------------------------------------- 1 | -0.674746,-0.720693,-0.640792,-0.375696,-0.015232,0.339381,0.658449,0.929095,1.13275,1.25256,1.27875,1.20481,1.0349,0.783951,0.468693,0.120617,-0.191612,-0.384741,-0.448236,-0.422951 2 | -------------------------------------------------------------------------------- /data/strip/readme.txt: -------------------------------------------------------------------------------- 1 | The files "opt_*.csv" are the files for a high-quality binormal strip. "crease_*.csv" are for the rectifying strip optimized from the binormal strip. -------------------------------------------------------------------------------- /data/tracing/readme.txt: -------------------------------------------------------------------------------- 1 | This is for you to test the initialization -> optimization -> binormal strip optimization -> rectifying developable optimization. 2 | 3 | "Wave.obj" is the triangle mesh, 4 | "saved_traced_*" are the traced curves of \theta = 60. You can load them one by one. 5 | "smooth.csv" is a random smooth scalar field without singularities. Load it as the start of initialization. 6 | "initial_ls.csv" is the scalar field generally follows the traced P-curves. 7 | "60.csv" and "60_b.csv" are the scalar field and the binormal vector field of \theta = 60. 8 | "ply*" are the strips extracted from the fields. 9 | "opt*" are the optimized high-quality binormal strips optimized from "ply*". 10 | "crease*" are the rectifying developables optimized from "opt*". 11 | -------------------------------------------------------------------------------- /data/tracing/saved_traced_0.csv: -------------------------------------------------------------------------------- 1 | -9.69174,-14.6651,1.31878,16551 2 | -9.55915,-14.6399,1.35972,16552 3 | -9.10561,-14.5592,1.50682,16554 4 | -9.02079,-14.5436,1.53372,16558 5 | -8.97187,-14.5346,1.54923,3019 6 | -8.25528,-14.415,1.79061,3014 7 | -8.17279,-14.3998,1.81669,15667 8 | -8.05566,-14.3811,1.85696,1023 9 | -7.55855,-14.3009,2.02724,1024 10 | -7.2846,-14.2534,2.1173,9654 11 | -6.74284,-14.1633,2.2996,12029 12 | -6.41472,-14.1189,2.42126,12030 13 | -6.26519,-14.0918,2.46937,12176 14 | -5.94761,-14.0377,2.57527,1299 15 | -5.6048,-13.9758,2.68587,1300 16 | -5.26627,-13.9116,2.79176,6242 17 | -4.89437,-13.8356,2.90246,9292 18 | -4.74199,-13.8002,2.94369,14337 19 | -4.27813,-13.6945,3.07098,7493 20 | -4.06171,-13.6422,3.12741,5415 21 | -3.954,-13.6147,3.1539,5412 22 | -3.44193,-13.4629,3.25926,12002 23 | -2.94624,-13.3129,3.3585,14221 24 | -2.89276,-13.2942,3.36701,9297 25 | -2.32752,-13.0761,3.44015,9294 26 | -2.19038,-13.0179,3.45344,6303 27 | -1.64143,-12.7706,3.49456,6295 28 | -1.53716,-12.7192,3.49872,4553 29 | -1.02922,-12.4581,3.51024,4554 30 | -1.00189,-12.4429,3.50996,13422 31 | -0.947814,-12.4127,3.50928,13827 32 | -0.454719,-12.1214,3.48982,12287 33 | -0.179756,-11.9498,3.47093,5209 34 | 0.174568,-11.7227,3.44143,5204 35 | 0.435514,-11.5522,3.41684,14498 36 | 0.741182,-11.3364,3.37366,15096 37 | 1.00211,-11.1553,3.33965,14693 38 | 1.33043,-10.9135,3.28379,5817 39 | 1.57893,-10.7348,3.24553,5814 40 | 1.82937,-10.5433,3.19581,11898 41 | 2.18953,-10.2749,3.13133,15365 42 | 2.20558,-10.2622,3.12765,15366 43 | 2.21831,-10.2521,3.12471,4627 44 | 2.65047,-9.91605,3.03279,4628 45 | 2.9045,-9.72006,2.98057,1779 46 | 3.10021,-9.56706,2.93801,1776 47 | 3.28272,-9.43149,2.90641,11154 48 | 3.60825,-9.17625,2.83369,14041 49 | 3.99852,-8.88338,2.76343,11993 50 | 4.14617,-8.77164,2.73566,11990 51 | 4.30327,-8.66062,2.71601,8819 52 | 4.77433,-8.31296,2.63704,8820 53 | 5.18344,-8.02684,2.59091,11767 54 | 5.36666,-7.8998,2.57183,2189 55 | 6.01353,-7.47003,2.53129,2192 56 | 6.713,-7.02238,2.51363,1276 57 | 7.08944,-6.79967,2.53342,67 58 | 7.47132,-6.57038,2.54831,70 59 | 7.99063,-6.28441,2.60715,10197 60 | 8.05832,-6.24529,2.61222,10200 61 | 8.29602,-6.12089,2.64743,10701 62 | 8.74558,-5.88155,2.70832,10702 63 | 8.96791,-5.77104,2.74965,5897 64 | 9.38743,-5.55564,2.81831,5894 65 | 9.96369,-5.28053,2.93944,1739 66 | 10.0975,-5.21338,2.96352,1742 67 | 10.2095,-5.15948,2.98645,1801 68 | 10.7886,-4.89018,3.11569,1802 69 | 10.9767,-4.79915,3.15371,10222 70 | 11.411,-4.60051,3.25384,11612 71 | 11.8608,-4.39033,3.35295,15181 72 | 11.9819,-4.33472,3.38065,4867 73 | 12.398,-4.13385,3.4659,4864 74 | 12.6367,-4.02224,3.51833,13214 75 | 13.1101,-3.78406,3.60678,13560 76 | 13.5004,-3.5877,3.67972,8673 77 | 13.8593,-3.39438,3.736,8670 78 | 14.3541,-3.12103,3.80796,11747 79 | 14.5701,-2.99289,3.8325,11748 80 | 14.6931,-2.91963,3.84623,7929 81 | 15.1391,-2.64463,3.889,5569 82 | 15.3164,-2.53501,3.90573,1165 83 | 15.4308,-2.45931,3.91274,1166 84 | 15.9268,-2.11603,3.93182,7209 85 | 16.3825,-1.78007,3.93483,7206 86 | 16.4825,-1.70554,3.93487,9686 87 | 16.5388,-1.6614,3.93335,6675 88 | 17.1033,-1.19643,3.90146,4091 89 | 17.2096,-1.10263,3.89097,4086 90 | 17.6881,-0.66258,3.83114,8127 91 | 17.8201,-0.533744,3.80947,8128 92 | 18.1566,-0.190304,3.74396,10075 93 | 18.3172,-0.0169173,3.70629,10070 94 | 18.6372,0.348479,3.61787,11508 95 | 18.8234,0.575597,3.5566,4293 96 | 19.1731,1.03952,3.41621,4290 97 | 19.3105,1.23988,3.34877,11538 98 | 19.4604,1.46792,3.26868,13240 99 | 19.6633,1.80465,3.14158,15583 100 | 19.8088,2.08065,3.02759,3273 101 | 20.0002,2.48328,2.85122,3268 102 | 20.0444,2.58048,2.80769,4622 103 | 20.1195,2.77493,2.71461,4897 104 | 20.287,3.2364,2.48844,4898 105 | 20.369,3.48342,2.36321,10425 106 | 20.4925,3.90433,2.14151,10421 107 | 20.6949,4.61349,1.76516,10422 108 | 20.7064,4.65466,1.74319,15058 109 | 20.83,5.14366,1.47601,15061 110 | 20.8659,5.27843,1.40331,15064 111 | 20.9628,5.63299,1.21324,10343 112 | 21.011,5.82631,1.10704,9747 113 | 21.0395,5.93476,1.04839,9748 114 | 21.1663,6.41243,0.790645,15967 115 | 21.2486,6.69961,0.639253,15964 116 | -------------------------------------------------------------------------------- /data/tracing/saved_traced_1.csv_0.csv: -------------------------------------------------------------------------------- 1 | -12.1011,-11.4803,1.2168,17201 2 | -11.9495,-11.407,1.26054,17202 3 | -11.58,-11.2318,1.37188,15415 4 | -11.414,-11.1518,1.42005,10391 5 | -10.8891,-10.9062,1.58352,10388 6 | -10.587,-10.7606,1.67111,4395 7 | -10.1503,-10.5576,1.80941,4398 8 | -9.83509,-10.4046,1.89861,4077 9 | -9.38792,-10.1936,2.03567,4074 10 | -9.27241,-10.1363,2.06608,11876 11 | -8.81859,-9.91801,2.19818,5395 12 | -8.50444,-9.75901,2.27406,5390 13 | -8.22761,-9.62321,2.35,9290 14 | -7.933,-9.47659,2.42628,2829 15 | -7.64479,-9.32619,2.48491,2824 16 | -7.22374,-9.10812,2.57467,6009 17 | -7.09793,-9.04017,2.59409,6010 18 | -6.71741,-8.83686,2.65917,10395 19 | -6.32151,-8.61676,2.70053,10392 20 | -6.03388,-8.45902,2.73786,4125 21 | -5.53062,-8.17143,2.76029,4120 22 | -5.39307,-8.09342,2.76881,9698 23 | -4.83352,-7.76573,2.75697,1819 24 | -4.78755,-7.73894,2.75665,1089 25 | -4.43692,-7.52939,2.72538,1086 26 | -4.19224,-7.38315,2.70348,13839 27 | -4.15966,-7.3633,2.69792,13051 28 | -3.59706,-7.02099,2.60621,1603 29 | -3.49055,-6.9553,2.5806,1598 30 | -3.01801,-6.66405,2.46922,1127 31 | -2.83223,-6.54847,2.41267,1128 32 | -2.2605,-6.19254,2.23503,9621 33 | -2.24253,-6.18136,2.22947,7217 34 | -1.70939,-5.8478,2.03406,12434 35 | -1.55256,-5.74962,1.97526,7211 36 | -1.12251,-5.48001,1.80526,7212 37 | -0.758697,-5.25213,1.66691,11370 38 | -0.467961,-5.06995,1.55341,11498 39 | -0.0702492,-4.821,1.41075,12815 40 | 0.0954643,-4.71729,1.35239,12816 41 | 0.516125,-4.45423,1.21739,9815 42 | 0.559458,-4.42715,1.20518,9816 43 | 1.05382,-4.11824,1.06722,13571 44 | 1.22248,-4.01297,1.0296,6227 45 | 1.56878,-3.79681,0.950939,6230 46 | 1.97593,-3.5431,0.882119,9810 47 | 2.23394,-3.3824,0.84283,3981 48 | 2.8861,-2.97758,0.793933,3984 49 | 2.9076,-2.96423,0.792021,15081 50 | 2.91674,-2.95856,0.791842,15079 51 | 3.05496,-2.87288,0.793886,8781 52 | 3.63031,-2.51618,0.800448,8778 53 | 3.66576,-2.49424,0.8017,5177 54 | 3.85299,-2.37895,0.824309,5174 55 | 4.36105,-2.06601,0.883085,8417 56 | 4.48108,-1.99254,0.910664,8418 57 | 4.98126,-1.6859,1.01603,13320 58 | 5.46021,-1.39521,1.16384,13319 59 | 5.48778,-1.3785,1.17276,6693 60 | 5.52776,-1.3545,1.18867,3967 61 | 6.03667,-1.04794,1.37982,2249 62 | 6.48016,-0.784636,1.58059,2246 63 | 6.555,-0.740269,1.61504,1853 64 | 6.60348,-0.711962,1.64063,1848 65 | 7.07149,-0.436624,1.87359,893 66 | 7.38255,-0.257278,2.05006,894 67 | 7.65296,-0.0995164,2.19361,13448 68 | 8.16328,0.192178,2.49313,7561 69 | 8.27089,0.25484,2.55134,7558 70 | 8.71557,0.509,2.80996,12035 71 | 8.86562,0.594907,2.89665,8569 72 | 8.90252,0.616012,2.91806,8564 73 | 9.3599,0.881469,3.16866,14486 74 | 9.67172,1.06664,3.32439,15853 75 | 9.91642,1.21101,3.44983,2429 76 | 10.2836,1.43475,3.6146,2432 77 | 10.57,1.61148,3.73584,9726 78 | 10.9133,1.83061,3.85828,7701 79 | 11.2565,2.05376,3.96867,7702 80 | 11.4378,2.1775,4.01,14713 81 | 11.8808,2.48013,4.1104,12775 82 | 11.9509,2.52861,4.12451,3299 83 | 11.981,2.5499,4.1291,3300 84 | 12.5418,2.95579,4.1844,845 85 | 12.6268,3.01895,4.18778,840 86 | 12.9749,3.284,4.18278,627 87 | 13.388,3.60616,4.15625,630 88 | 13.4946,3.68976,4.14805,2686 89 | 13.6149,3.78702,4.13027,3134 90 | 13.9856,4.09131,4.06239,8942 91 | 14.3765,4.4215,3.96583,12947 92 | 14.4715,4.50245,3.94049,6185 93 | 14.5525,4.57318,3.9139,235 94 | 14.8892,4.87184,3.79106,238 95 | 15.1546,5.11441,3.67608,7081 96 | 15.41,5.34981,3.56044,6813 97 | 15.5658,5.49725,3.47997,6814 98 | 15.8684,5.78834,3.31123,11115 99 | 15.9125,5.83164,3.28449,11116 100 | 16.1847,6.10363,3.10676,10483 101 | 16.4525,6.37633,2.91932,10479 102 | 16.6338,6.56451,2.78402,10457 103 | 16.8619,6.80601,2.60275,7099 104 | 17.0937,7.05243,2.41636,5679 105 | 17.3191,7.29651,2.2246,5217 106 | 17.5241,7.52263,2.04077,5214 107 | 17.6685,7.68233,1.9104,3651 108 | 17.8823,7.91996,1.71482,3652 109 | 18.2084,8.28263,1.41598,4524 110 | 18.2797,8.36196,1.35043,2081 111 | 18.3729,8.46516,1.26615,2082 112 | 18.7417,8.88105,0.915948,13256 113 | 19.0072,9.17504,0.675059,16331 114 | 19.1415,9.32294,0.554977,16332 115 | -------------------------------------------------------------------------------- /data/tracing/saved_traced_2_0.csv: -------------------------------------------------------------------------------- 1 | -14.7347,-8.4881,1.1216,16133 2 | -14.3701,-8.25228,1.21322,16134 3 | -14.0912,-8.0722,1.28375,15337 4 | -13.9641,-7.98739,1.31246,15335 5 | -13.3733,-7.59649,1.44999,8315 6 | -12.8947,-7.26922,1.54802,803 7 | -12.7737,-7.18474,1.57051,798 8 | -12.436,-6.94686,1.63067,9425 9 | -12.202,-6.77601,1.66436,9426 10 | -12.0488,-6.66537,1.6881,13763 11 | -11.8853,-6.54281,1.70715,13764 12 | -11.5336,-6.27694,1.74513,13766 13 | -11.1214,-5.94989,1.76848,15419 14 | -11.0997,-5.93217,1.76891,14729 15 | -10.7419,-5.6376,1.77436,11069 16 | -10.5633,-5.48193,1.76478,11064 17 | -10.3083,-5.26172,1.75415,15492 18 | -10.0453,-5.02204,1.72461,15149 19 | -9.95702,-4.94067,1.71342,2547 20 | -9.67367,-4.67445,1.67008,457 21 | -9.27126,-4.26977,1.56905,460 22 | -9.23693,-4.23592,1.56142,11462 23 | -9.18784,-4.18341,1.5447,12419 24 | -8.86817,-3.84652,1.44316,12416 25 | -8.67416,-3.62762,1.3599,12425 26 | -8.41987,-3.34379,1.25526,6931 27 | -8.01676,-2.85905,1.03974,6928 28 | -7.95705,-2.78757,1.00826,12909 29 | -7.8245,-2.61782,0.923293,12910 30 | -7.4818,-2.18508,0.712215,11513 31 | -7.40765,-2.08639,0.659273,11514 32 | -7.06975,-1.63804,0.419999,8635 33 | -7.04527,-1.60574,0.402916,8632 34 | -7.00328,-1.54817,0.370479,7083 35 | -6.62868,-1.05123,0.103868,7084 36 | -6.49308,-0.872622,0.00900898,10474 37 | -6.00914,-0.224453,-0.343278,3923 38 | -5.97582,-0.18236,-0.364378,3924 39 | -5.74407,0.108027,-0.508278,9352 40 | -5.44402,0.481767,-0.691793,11632 41 | -5.39942,0.535961,-0.717317,6825 42 | -4.97013,1.02497,-0.921585,6826 43 | -4.80963,1.20403,-0.993331,8743 44 | -4.44392,1.57881,-1.11711,8744 45 | -4.21923,1.80448,-1.18779,13543 46 | -4.03486,1.97472,-1.22884,5591 47 | -3.54194,2.4136,-1.32063,5588 48 | -3.49217,2.45485,-1.32668,14217 49 | -3.12836,2.74374,-1.35816,14215 50 | -2.94727,2.88688,-1.37314,5101 51 | -2.93574,2.89585,-1.37393,5104 52 | -2.90743,2.91704,-1.37496,8844 53 | -2.41819,3.27039,-1.37916,3917 54 | -1.92043,3.61145,-1.3651,3920 55 | -1.90652,3.62064,-1.36438,10757 56 | -1.87608,3.63955,-1.36169,10754 57 | -1.30559,3.99304,-1.31044,9659 58 | -1.12096,4.10406,-1.2906,9656 59 | -0.656893,4.36812,-1.22639,2167 60 | -0.450537,4.48254,-1.19507,2168 61 | -0.32091,4.54965,-1.1712,12574 62 | 0.173104,4.79568,-1.0714,12578 63 | 0.718793,5.04988,-0.944807,13002 64 | 0.778347,5.07615,-0.929594,9459 65 | 0.85561,5.10835,-0.908026,9456 66 | 1.31495,5.2965,-0.776704,14690 67 | 1.61208,5.40946,-0.68355,14353 68 | 1.91909,5.51822,-0.579687,14354 69 | 2.29706,5.64728,-0.447109,6923 70 | 2.70487,5.77619,-0.293844,6920 71 | 2.81795,5.81112,-0.250541,5261 72 | 3.33681,5.94914,-0.0290419,5258 73 | 3.74645,6.06612,0.13704,15001 74 | 4.25798,6.19248,0.366963,9527 75 | 4.50758,6.25443,0.478818,9528 76 | 4.58084,6.27438,0.509562,7519 77 | 4.89596,6.3514,0.65263,4079 78 | 5.29948,6.44558,0.841625,2329 79 | 5.4435,6.47855,0.910001,2332 80 | 5.87387,6.58318,1.1054,11546 81 | 6.34778,6.70022,1.31784,12195 82 | 6.49073,6.73843,1.37741,2321 83 | 6.84036,6.83374,1.52011,2316 84 | 7.07859,6.89576,1.62245,2287 85 | 7.17646,6.92178,1.66348,2290 86 | 7.72311,7.08007,1.86703,11881 87 | 8.04602,7.17703,1.98012,11878 88 | 8.36385,7.27982,2.07545,2001 89 | 8.87276,7.45085,2.21343,2004 90 | 9.02365,7.50506,2.246,1691 91 | 9.66468,7.74392,2.36294,1688 92 | 9.68442,7.75169,2.36546,6146 93 | 9.8989,7.83945,2.38381,12537 94 | 10.4273,8.0544,2.43281,12534 95 | 10.4666,8.07068,2.4355,6313 96 | 10.5499,8.10709,2.43467,6310 97 | 11.0712,8.33392,2.43333,5147 98 | 11.596,8.57588,2.38622,5148 99 | 11.6095,8.58205,2.3852,15438 100 | 11.6224,8.58824,2.38316,11179 101 | 12.1733,8.85193,2.29781,11180 102 | 12.7207,9.12898,2.15992,10735 103 | 12.8813,9.21031,2.11925,4241 104 | 13.3636,9.46672,1.95641,3085 105 | 13.4207,9.49695,1.9377,3088 106 | 13.4329,9.50362,1.93283,9366 107 | 13.932,9.77643,1.73607,15185 108 | 14.0494,9.84192,1.68508,15139 109 | 14.8716,10.3103,1.29371,5903 110 | 14.9046,10.3293,1.2773,5904 111 | 14.9297,10.3442,1.26337,15511 112 | 15.7029,10.7961,0.854424,13679 113 | 15.74,10.8182,0.833624,13676 114 | 16.3099,11.154,0.523153,16355 115 | 16.3549,11.1811,0.496993,16352 116 | -------------------------------------------------------------------------------- /data/tracing/saved_traced_3_0.csv: -------------------------------------------------------------------------------- 1 | -18.931,-4.23365,0.986597,16303 2 | -18.6527,-4.10402,1.08474,16304 3 | -18.485,-4.02674,1.14494,14975 4 | -18.3362,-3.95828,1.19861,11287 5 | -17.94,-3.77063,1.33427,11290 6 | -17.5152,-3.56727,1.47687,10345 7 | -17.4631,-3.54182,1.49378,471 8 | -17.3857,-3.50265,1.51709,468 9 | -16.7022,-3.15969,1.72661,8906 10 | -16.152,-2.86392,1.87183,14379 11 | -16.1004,-2.83638,1.88567,14055 12 | -16.0372,-2.80075,1.90043,14056 13 | -15.6247,-2.56389,1.99207,14053 14 | -15.2252,-2.31776,2.06223,12833 15 | -15.0651,-2.22045,2.09178,8457 16 | -14.9213,-2.12556,2.1102,8458 17 | -14.4352,-1.79748,2.1648,10004 18 | -13.8917,-1.39406,2.1877,1003 19 | -13.85,-1.36342,2.18977,998 20 | -13.8064,-1.32826,2.18878,2032 21 | -13.3524,-0.957322,2.17366,12603 22 | -13.1022,-0.733729,2.14669,12599 23 | -12.891,-0.545732,2.12462,1501 24 | -12.4223,-0.086385,2.0358,1502 25 | -12.345,-0.0109905,2.0215,6562 26 | -12.31,0.0269713,2.01149,11735 27 | -11.7865,0.595414,1.86182,2991 28 | -11.6003,0.819113,1.78984,2988 29 | -11.2648,1.22014,1.66186,10105 30 | -10.9489,1.63015,1.51413,7585 31 | -10.7037,1.94459,1.40266,2045 32 | -10.3044,2.48032,1.20185,2042 33 | -10.2032,2.61247,1.15387,1121 34 | -9.70608,3.26871,0.912519,1124 35 | -9.64307,3.34832,0.884713,6387 36 | -9.46291,3.56836,0.811047,6382 37 | -9.11769,3.99731,0.664361,6469 38 | -8.93811,4.20366,0.600587,6466 39 | -8.54368,4.64542,0.46903,12322 40 | -8.14727,5.05165,0.364727,2445 41 | -7.98316,5.2163,0.324146,2440 42 | -7.60942,5.56056,0.254372,9028 43 | -7.43373,5.72414,0.220303,9683 44 | -7.36995,5.77881,0.211344,9680 45 | -6.90285,6.17289,0.150273,6645 46 | -6.62729,6.38742,0.127188,6601 47 | -6.36053,6.59287,0.106453,1733 48 | -5.82479,6.97324,0.0880609,1734 49 | -5.8103,6.98361,0.0875055,6866 50 | -5.25533,7.34768,0.0898351,6598 51 | -4.8789,7.57607,0.104647,1155 52 | -4.69065,7.68962,0.112535,1150 53 | -4.44261,7.82746,0.131308,11910 54 | -4.03559,8.05458,0.161465,11909 55 | -3.61434,8.27088,0.205999,5571 56 | -3.40973,8.37596,0.227623,5572 57 | -3.23669,8.45826,0.250556,1407 58 | -2.79142,8.66932,0.31008,1410 59 | -2.46458,8.81434,0.360783,14962 60 | -2.26685,8.9012,0.39207,15771 61 | -1.85741,9.07127,0.463773,7935 62 | -1.68231,9.14202,0.495839,7936 63 | -1.21659,9.32118,0.58749,9917 64 | -0.864459,9.45121,0.660641,9912 65 | -0.592483,9.5475,0.72009,13508 66 | -0.0254344,9.74031,0.849733,14305 67 | -0.00173962,9.7484,0.85512,13671 68 | 0.00558714,9.75086,0.856817,13672 69 | 0.01832,9.755,0.859866,13669 70 | 0.675789,9.9646,1.02021,10253 71 | 0.918802,10.0416,1.07985,1305 72 | 1.62235,10.2577,1.25749,1308 73 | 1.70184,10.2831,1.27679,5931 74 | 1.99057,10.374,1.34806,5926 75 | 2.44028,10.514,1.46025,5960 76 | 2.57886,10.5563,1.4955,4479 77 | 3.32701,10.8068,1.66752,4474 78 | 3.43413,10.8412,1.69345,13262 79 | 3.55899,10.8857,1.71962,15070 80 | 4.08752,11.0794,1.82604,14143 81 | 4.36992,11.186,1.87993,9585 82 | 4.80809,11.3671,1.94848,3935 83 | 5.16438,11.5186,2.00002,3932 84 | 5.39181,11.6202,2.02777,12543 85 | 5.66465,11.755,2.04755,12538 86 | 6.01468,11.9218,2.07966,12544 87 | 6.49811,12.1809,2.09102,4645 88 | 6.57142,12.2199,2.09314,4642 89 | 6.98873,12.4643,2.0774,12927 90 | 7.20699,12.5911,2.07038,9893 91 | 7.23763,12.6102,2.06776,9894 92 | 7.65938,12.8794,2.02478,3613 93 | 7.70458,12.9082,2.02029,3616 94 | 8.07908,13.1598,1.96574,3753 95 | 8.59685,13.5374,1.85107,3754 96 | 8.66805,13.5878,1.83727,13500 97 | 8.7239,13.6301,1.8227,13954 98 | 9.34196,14.1141,1.63891,5909 99 | 9.45539,14.2062,1.60058,5906 100 | 9.95141,14.6244,1.41138,14357 101 | 10.0447,14.7033,1.37547,10527 102 | 10.1575,14.8032,1.32552,6917 103 | 10.5964,15.1933,1.1297,6918 104 | 10.9037,15.4771,0.977288,5273 105 | 11.1264,15.6844,0.864519,5268 106 | 11.5543,16.0929,0.6335,6571 107 | 11.7204,16.2542,0.540009,6572 108 | 12.0508,16.578,0.349694,16465 109 | 12.0963,16.6229,0.322981,16462 110 | -------------------------------------------------------------------------------- /data/tracing/saved_traced_4_0.csv: -------------------------------------------------------------------------------- 1 | -21.1029,1.2891,0.813709,16211 2 | -20.7583,1.45345,1.00931,16214 3 | -20.6111,1.52406,1.09174,15163 4 | -20.4604,1.59736,1.1736,10981 5 | -20.1491,1.75089,1.33723,10978 6 | -19.7734,1.94154,1.52177,13125 7 | -19.6137,2.02393,1.59702,13123 8 | -19.2487,2.21823,1.75438,13120 9 | -19.0777,2.31147,1.82282,8385 10 | -18.7985,2.47011,1.91897,8382 11 | -18.5252,2.62573,2.01229,1705 12 | -18.3912,2.70267,2.05631,1706 13 | -18.0786,2.88929,2.14102,8789 14 | -17.9266,2.98131,2.17904,8792 15 | -17.7902,3.06643,2.20756,13285 16 | -17.4829,3.26239,2.26185,11917 17 | -17.0354,3.55491,2.32351,11918 18 | -16.9282,3.62597,2.33609,12045 19 | -16.8667,3.66814,2.34037,12046 20 | -16.4198,3.97897,2.36222,14405 21 | -16.1213,4.19379,2.36201,14402 22 | -15.9866,4.29168,2.35972,7711 23 | -15.7168,4.49246,2.34553,7712 24 | -15.4701,4.67893,2.32671,12572 25 | -15.3695,4.75812,2.3134,12663 26 | -14.9747,5.06699,2.26428,5857 27 | -14.7692,5.23327,2.22899,5854 28 | -14.5018,5.44767,2.18659,7385 29 | -14.1973,5.69945,2.12513,7382 30 | -13.8461,5.98943,2.05512,15718 31 | -13.7645,6.05877,2.03581,15675 32 | -13.7274,6.09073,2.02627,7663 33 | -13.2786,6.47092,1.92154,7664 34 | -13.0607,6.65818,1.86685,11579 35 | -12.7127,6.95151,1.78744,3595 36 | -12.2985,7.30127,1.69217,3592 37 | -12.1454,7.4282,1.66014,7031 38 | -11.7298,7.76898,1.57811,7032 39 | -11.5753,7.89812,1.54455,11432 40 | -11.5193,7.94377,1.53372,11570 41 | -11.0015,8.35918,1.44173,12789 42 | -10.7097,8.58523,1.39926,11605 43 | -10.4218,8.80549,1.36062,11606 44 | -9.84877,9.22491,1.3055,6465 45 | -9.8358,9.23436,1.30431,6462 46 | -9.82051,9.2448,1.3037,3787 47 | -9.26597,9.64017,1.26323,3784 48 | -8.89946,9.88441,1.25462,9310 49 | -8.71488,10.0066,1.25113,6765 50 | -8.35219,10.2308,1.26141,6760 51 | -8.09817,10.3953,1.26095,4201 52 | -7.9604,10.4787,1.26641,2931 53 | -7.35006,10.836,1.30201,2932 54 | -7.02527,11.0175,1.32911,4063 55 | -6.61897,11.2325,1.37451,4058 56 | -6.10641,11.4949,1.43979,1573 57 | -5.9277,11.5808,1.46763,1574 58 | -5.23816,11.9062,1.58053,5194 59 | -5.18491,11.9298,1.59063,9929 60 | -5.02409,11.999,1.62285,9927 61 | -4.48045,12.2412,1.72498,9924 62 | -4.3391,12.3024,1.75294,4353 63 | -3.84518,12.5033,1.86054,4354 64 | -3.64515,12.5881,1.90161,7571 65 | -3.27571,12.7318,1.98686,6287 66 | -2.9842,12.8435,2.05535,6282 67 | -2.77959,12.9178,2.10644,15866 68 | -2.26482,13.1134,2.2288,10193 69 | -1.92731,13.2396,2.31047,8169 70 | -1.52743,13.386,2.40936,8170 71 | -1.13526,13.5325,2.50441,10991 72 | -0.590369,13.7428,2.63183,10985 73 | -0.403078,13.8156,2.67527,10982 74 | 0.211271,14.0755,2.80335,8973 75 | 0.314357,14.1192,2.82477,8974 76 | 0.911261,14.4034,2.92675,11648 77 | 0.997322,14.4444,2.94148,11295 78 | 1.01108,14.4519,2.94314,10917 79 | 1.72198,14.8386,3.02899,10914 80 | 1.83728,14.9118,3.03475,2401 81 | 2.39574,15.2603,3.06749,2404 82 | 2.77013,15.5237,3.06494,14578 83 | 2.89342,15.6104,3.06417,9603 84 | 3.44393,16.0433,3.02139,9604 85 | 3.49705,16.0851,3.01717,15936 86 | 3.56955,16.1482,3.00615,9437 87 | 3.91848,16.4527,2.95204,9438 88 | 4.20282,16.7242,2.88657,5553 89 | 4.37192,16.8844,2.84875,5556 90 | 4.78474,17.315,2.71936,13091 91 | 4.82069,17.3525,2.70807,13087 92 | 4.83707,17.3712,2.70134,13088 93 | 5.21418,17.7985,2.55041,6651 94 | 5.45563,18.0991,2.42727,6646 95 | 5.72014,18.4232,2.29744,8723 96 | 5.88473,18.641,2.20054,8720 97 | 5.99738,18.7914,2.13279,559 98 | 6.28878,19.2007,1.93697,560 99 | 6.34877,19.2843,1.89727,9561 100 | 6.36711,19.3104,1.88465,9558 101 | 6.41801,19.3858,1.84638,13432 102 | 6.70917,19.8187,1.62576,15530 103 | 6.99874,20.2698,1.38455,15622 104 | 7.04185,20.3364,1.34923,14901 105 | 7.06364,20.3706,1.33081,12431 106 | 7.33782,20.8149,1.08399,12432 107 | 7.43338,20.9693,0.998413,4759 108 | 7.7012,21.4177,0.741458,1667 109 | 7.79853,21.5783,0.650657,1664 110 | 8.02952,21.9712,0.42214,13400 111 | 8.14473,22.1643,0.311272,16487 112 | 8.31836,22.4612,0.13765,16482 113 | -------------------------------------------------------------------------------- /src/MeshProcessing.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | // -------------------- OpenMesh 6 | #include 7 | #include 8 | 9 | 10 | // ---------------------------------------------------------------------------- 11 | typedef OpenMesh::PolyMesh_ArrayKernelT<> CGMesh; 12 | typedef Eigen::SparseMatrix spMat; 13 | typedef Eigen::Triplet T; 14 | 15 | 16 | class MeshProcessing 17 | { 18 | public: 19 | MeshProcessing() {}; 20 | ~MeshProcessing(); 21 | 22 | 23 | 24 | private: 25 | 26 | 27 | public: 28 | //std::vector fillMatandSolve_CheckBoard(); 29 | void mesh2Matrix(CGMesh& mesh, Eigen::MatrixXd& V, Eigen::MatrixXi& F); 30 | void matrix2Mesh(CGMesh& mesh, Eigen::MatrixXd& V, Eigen::MatrixXi& F); 31 | void meshEdges(CGMesh& mesh, Eigen::MatrixXi& E); 32 | void MeshUpdate(CGMesh& originMesh, CGMesh& updatedMesh, std::vector& pts); 33 | void MeshUpdate(CGMesh& originMesh, CGMesh& updatedMesh, double* pts); 34 | std::vector meshCorners(CGMesh& mesh); 35 | void MeshEdgeDual(CGMesh& coarseMesh, CGMesh& fineMesh, std::vector& Vtype, double s, int type); 36 | 37 | spMat SubdivCoarseMesh_CaltmullClack(CGMesh& coarseMesh, CGMesh& fineMesh); 38 | std::vector MeshVertexClassificationBlackWhite(CGMesh& mesh); 39 | std::vector MeshFaceClassificationBlackWhite(CGMesh& mesh); 40 | std::vector MeshFaceClassificationCube4types(CGMesh& mesh, int stFaceId, std::vector& vType); 41 | void getEdgeLengthStatistics(CGMesh& mesh, double& totalL, double& minL, double& maxL, double& avgL); 42 | void MeshUnitScale(CGMesh& originMesh, CGMesh& updatedMesh); 43 | void MeshScale(CGMesh& originMesh, CGMesh& updatedMesh, double s); 44 | void MeshDiag(CGMesh& originMesh, CGMesh& updatedMesh, int type); 45 | 46 | 47 | //***************************************** mesh refinement ********************* 48 | void subdivision_EdgeSplit(CGMesh& coarseMesh, CGMesh& fineMesh); 49 | 50 | //***************************************** mesh Planarity ********************* 51 | void meshPlanarity(CGMesh& inputMesh, std::vector& planarity); 52 | void meshFaceCenter(CGMesh& inputMesh, std::vector& fcen); 53 | 54 | 55 | 56 | public: 57 | //CGMesh coarseMesh; 58 | 59 | 60 | 61 | 62 | private: 63 | 64 | }; 65 | -------------------------------------------------------------------------------- /src/SOURCE.cmake: -------------------------------------------------------------------------------- 1 | set(LSC_SOURCES 2 | 3 | src/MeshProcessing.cpp 4 | src/MeshProcessing.h 5 | src/basic.h 6 | src/basic.cpp 7 | src/igl_tool.h 8 | src/igl_tool.cpp 9 | src/tools.h 10 | src/tools.cpp 11 | src/tracing.cpp 12 | src/energy.cpp 13 | src/functional.cpp 14 | src/mesh_opt.cpp 15 | src/nodes.cpp 16 | src/polyline.cpp 17 | src/interaction.cpp 18 | src/interaction.h 19 | src/topology.cpp 20 | ) 21 | ################################################################################ 22 | # Subfolders 23 | ################################################################################ 24 | -------------------------------------------------------------------------------- /src/igl_tool.h: -------------------------------------------------------------------------------- 1 | 2 | #pragma once 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | #include 13 | 14 | // Lib IGL includes 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | 21 | 22 | typedef enum 23 | { 24 | SPHERE_SEARCH, 25 | K_RING_SEARCH 26 | } searchType; 27 | 28 | typedef enum 29 | { 30 | AVERAGE, 31 | PROJ_PLANE 32 | } normalType; 33 | class QuadricCalculator 34 | { 35 | public: 36 | /* Row number i represents the i-th vertex, whose columns are: 37 | curv[i][0] : K2 38 | curv[i][1] : K1 39 | curvDir[i][0] : PD1 40 | curvDir[i][1] : PD2 41 | */ 42 | std::vector< std::vector > curv; 43 | std::vector< std::vector > curvDir; 44 | bool curvatureComputed; 45 | class Quadric 46 | { 47 | public: 48 | 49 | IGL_INLINE Quadric () 50 | { 51 | a() = b() = c() = d() = e() = 1.0; 52 | } 53 | 54 | IGL_INLINE Quadric(double av, double bv, double cv, double dv, double ev) 55 | { 56 | a() = av; 57 | b() = bv; 58 | c() = cv; 59 | d() = dv; 60 | e() = ev; 61 | } 62 | 63 | IGL_INLINE double& a() { return data[0];} 64 | IGL_INLINE double& b() { return data[1];} 65 | IGL_INLINE double& c() { return data[2];} 66 | IGL_INLINE double& d() { return data[3];} 67 | IGL_INLINE double& e() { return data[4];} 68 | 69 | double data[5]; 70 | 71 | IGL_INLINE double evaluate(double u, double v) 72 | { 73 | return a()*u*u + b()*u*v + c()*v*v + d()*u + e()*v; 74 | } 75 | 76 | IGL_INLINE double du(double u, double v) 77 | { 78 | return 2.0*a()*u + b()*v + d(); 79 | } 80 | 81 | IGL_INLINE double dv(double u, double v) 82 | { 83 | return 2.0*c()*v + b()*u + e(); 84 | } 85 | 86 | IGL_INLINE double duv(double u, double v) 87 | { 88 | return b(); 89 | } 90 | 91 | IGL_INLINE double duu(double u, double v) 92 | { 93 | return 2.0*a(); 94 | } 95 | 96 | IGL_INLINE double dvv(double u, double v) 97 | { 98 | return 2.0*c(); 99 | } 100 | 101 | 102 | IGL_INLINE static Quadric fit(const std::vector &VV) 103 | { 104 | assert(VV.size() >= 5); 105 | if (VV.size() < 5) 106 | { 107 | std::cerr << "ASSERT FAILED! fit function requires at least 5 points: Only " << VV.size() << " were given." << std::endl; 108 | exit(0); 109 | } 110 | 111 | Eigen::MatrixXd A(VV.size(),5); 112 | Eigen::MatrixXd b(VV.size(),1); 113 | Eigen::MatrixXd sol(5,1); 114 | 115 | for(unsigned int c=0; c < VV.size(); ++c) 116 | { 117 | double u = VV[c][0]; 118 | double v = VV[c][1]; 119 | double n = VV[c][2]; 120 | 121 | A(c,0) = u*u; 122 | A(c,1) = u*v; 123 | A(c,2) = v*v; 124 | A(c,3) = u; 125 | A(c,4) = v; 126 | 127 | b(c) = n; 128 | } 129 | 130 | sol=A.jacobiSvd(Eigen::ComputeThinU | Eigen::ComputeThinV).solve(b); 131 | 132 | return Quadric(sol(0),sol(1),sol(2),sol(3),sol(4)); 133 | } 134 | }; 135 | 136 | public: 137 | 138 | Eigen::MatrixXd vertices; 139 | // Face list of current mesh (#F x 3) or (#F x 4) 140 | // The i-th row contains the indices of the vertices that forms the i-th face in ccw order 141 | Eigen::MatrixXi faces; 142 | 143 | std::vector > vertex_to_vertices; 144 | std::vector > vertex_to_faces; 145 | std::vector > vertex_to_faces_index; 146 | Eigen::MatrixXd face_normals; 147 | Eigen::MatrixXd vertex_normals; 148 | 149 | /* Size of the neighborhood */ 150 | double sphereRadius; 151 | int kRing; 152 | 153 | bool localMode; /* Use local mode */ 154 | bool projectionPlaneCheck; /* Check collected vertices on tangent plane */ 155 | bool montecarlo; 156 | unsigned int montecarloN; 157 | 158 | searchType st; /* Use either a sphere search or a k-ring search */ 159 | normalType nt; 160 | 161 | double lastRadius; 162 | double scaledRadius; 163 | std::string lastMeshName; 164 | 165 | /* Benchmark related variables */ 166 | bool expStep; /* True if we want the radius to increase exponentially */ 167 | int step; /* If expStep==false, by how much rhe radius increases on every step */ 168 | int maxSize; /* The maximum limit of the radius in the benchmark */ 169 | 170 | QuadricCalculator(); 171 | IGL_INLINE void init(const Eigen::MatrixXd& V, const Eigen::MatrixXi& F); 172 | 173 | IGL_INLINE void finalEigenStuff(int, const std::vector&, Quadric&); 174 | IGL_INLINE void fitQuadric(const Eigen::Vector3d&, const std::vector& ref, const std::vector& , Quadric *); 175 | void applyProjOnPlane(const Eigen::Vector3d&, const std::vector&, std::vector&); 176 | IGL_INLINE void getSphere(const int, const double, std::vector&, int min); 177 | IGL_INLINE void getSphere(const Eigen::Vector3d &, const int, const double, std::vector &, int min); 178 | 179 | IGL_INLINE void getKRing(const int, const double,std::vector&); 180 | IGL_INLINE Eigen::Vector3d project(const Eigen::Vector3d&, const Eigen::Vector3d&, const Eigen::Vector3d&); 181 | void computeReferenceFrame(int i, const Eigen::Vector3d& normal, std::vector& ref); 182 | void computeReferenceFrame_face(const Eigen::Vector3d& mp, const int fid, const Eigen::Vector3d &normal, std::vector &ref); 183 | IGL_INLINE void getAverageNormal(int, const std::vector&, Eigen::Vector3d&); 184 | IGL_INLINE void getAverageNormal_face(const std::vector &, Eigen::Vector3d &); 185 | IGL_INLINE void getProjPlane(int, const std::vector&, Eigen::Vector3d&); 186 | IGL_INLINE void applyMontecarlo(const std::vector&,std::vector*); 187 | IGL_INLINE void computeCurvature(); 188 | void computeCurvature_faces(); 189 | // get the derivates, get the second fundamental form, and get the corresponding normals 190 | IGL_INLINE void get_I_and_II(Eigen::MatrixXd& ru, Eigen::MatrixXd& rv, Eigen::MatrixXd& ruu, Eigen::MatrixXd& ruv, 191 | Eigen::MatrixXd& rvv, std::vector& L_list,std::vector& M_list, std::vector &N_list,Eigen::MatrixXd &normals); 192 | IGL_INLINE void get_pseudo_vertex_on_edge( 193 | const int center_id, 194 | const Eigen::Vector3d &epoint, const Eigen::Vector3d &pnormal,Eigen::Vector3d &pvertex); 195 | IGL_INLINE void printCurvature(const std::string& outpath); 196 | IGL_INLINE double getAverageEdge(); 197 | 198 | IGL_INLINE static int rotateForward (double *v0, double *v1, double *v2) 199 | { 200 | double t; 201 | 202 | if (std::abs(*v2) >= std::abs(*v1) && std::abs(*v2) >= std::abs(*v0)) 203 | return 0; 204 | 205 | t = *v0; 206 | *v0 = *v2; 207 | *v2 = *v1; 208 | *v1 = t; 209 | 210 | return 1 + rotateForward (v0, v1, v2); 211 | } 212 | 213 | IGL_INLINE static void rotateBackward (int nr, double *v0, double *v1, double *v2) 214 | { 215 | double t; 216 | 217 | if (nr == 0) 218 | return; 219 | 220 | t = *v2; 221 | *v2 = *v0; 222 | *v0 = *v1; 223 | *v1 = t; 224 | 225 | rotateBackward (nr - 1, v0, v1, v2); 226 | } 227 | 228 | IGL_INLINE static Eigen::Vector3d chooseMax (Eigen::Vector3d n, Eigen::Vector3d abc, double ab) 229 | { 230 | int max_i; 231 | double max_sp; 232 | Eigen::Vector3d nt[8]; 233 | 234 | n.normalize (); 235 | abc.normalize (); 236 | 237 | max_sp = - std::numeric_limits::max(); 238 | 239 | for (int i = 0; i < 4; ++i) 240 | { 241 | nt[i] = n; 242 | if (ab > 0) 243 | { 244 | switch (i) 245 | { 246 | case 0: 247 | break; 248 | 249 | case 1: 250 | nt[i][2] = -n[2]; 251 | break; 252 | 253 | case 2: 254 | nt[i][0] = -n[0]; 255 | nt[i][1] = -n[1]; 256 | break; 257 | 258 | case 3: 259 | nt[i][0] = -n[0]; 260 | nt[i][1] = -n[1]; 261 | nt[i][2] = -n[2]; 262 | break; 263 | } 264 | } 265 | else 266 | { 267 | switch (i) 268 | { 269 | case 0: 270 | nt[i][0] = -n[0]; 271 | break; 272 | 273 | case 1: 274 | nt[i][1] = -n[1]; 275 | break; 276 | 277 | case 2: 278 | nt[i][0] = -n[0]; 279 | nt[i][2] = -n[2]; 280 | break; 281 | 282 | case 3: 283 | nt[i][1] = -n[1]; 284 | nt[i][2] = -n[2]; 285 | break; 286 | } 287 | } 288 | 289 | if (nt[i].dot(abc) > max_sp) 290 | { 291 | max_sp = nt[i].dot(abc); 292 | max_i = i; 293 | } 294 | } 295 | return nt[max_i]; 296 | } 297 | 298 | }; 299 | 300 | 301 | -------------------------------------------------------------------------------- /src/interaction.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | #include 6 | // to use sleep() 7 | #ifdef _WIN32 8 | #include 9 | #else 10 | #include 11 | #endif 12 | 13 | void draw_stroke_on_mesh(const CGMesh &mesh, igl::opengl::glfw::Viewer &viewer, 14 | const Eigen::MatrixXd &V, const Eigen::MatrixXi &F, const std::vector &xs, 15 | const std::vector &ys, Eigen::MatrixXd& Vers, std::vector &fout, 16 | std::vector &bcout); 17 | class PartOfAutoRun{ 18 | public: 19 | PartOfAutoRun(){}; 20 | int iterations; // nbr of iterations 21 | double weight_gravity; 22 | double weight_lap ; 23 | double weight_bnd; 24 | double weight_pg; 25 | double weight_strip_width; 26 | }; 27 | 28 | 29 | // the default arguments for running the pseudo-geodesics with drawing strokes 30 | class AutoRunArgs{ 31 | public: 32 | AutoRunArgs(){}; 33 | std::vector parts; 34 | bool compute_pg; 35 | double stop_step_length; // when the step length lower than this, stop 36 | double stop_energy_sqrt; // when the energy sqrt lower than this, stop 37 | 38 | 39 | }; 40 | void AssignAutoRunDefaultArgs(AutoRunArgs &args, const bool compute_pg); -------------------------------------------------------------------------------- /src/tools.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | std::vector to_triplets(spMat &M); 4 | // convert a vector to a matrix with size 1*n 5 | Eigen::VectorXd duplicate_valus(const double value, const int n); 6 | Eigen::MatrixXd duplicate_vector(const Eigen::Vector2d& vec, const int n); 7 | spMat sparse_vec_to_sparse_maxrix(Efunc &vec); 8 | Efunc sparse_mat_col_to_sparse_vec(const spMat &mat, const int col); 9 | Efunc dense_vec_to_sparse_vec(const Eigen::VectorXd &vec); 10 | void mat_col_to_triplets(const spMat &mat, const int col, const int ref, const bool inverse, std::vector &triplets); 11 | spMat dense_mat_list_as_sparse_diagnal(const std::vector &mlist); 12 | Eigen::MatrixXd vec_list_to_matrix(const std::vector &vec); 13 | Eigen::VectorXd vec_list_to_vector(const std::vector& vec); 14 | bool triangles_coplanar(const Eigen::Vector3d &t0, const Eigen::Vector3d &t1, const Eigen::Vector3d &t2, 15 | const Eigen::Vector3d &p0, const Eigen::Vector3d &p1, const Eigen::Vector3d &p2); 16 | 17 | bool triangles_coplanar(const Eigen::MatrixXd& V, const Eigen::MatrixXi& F, const int fid1, const int fid2); 18 | bool segments_colinear(const Eigen::Vector3d& s1, const Eigen::Vector3d& s2); 19 | // -1: boundary edge 20 | // 0 not coplanar 21 | // 1 co-planar 22 | int edge_is_coplanar(const CGMesh &lsmesh, const CGMesh::EdgeHandle &edge_middle, const Eigen::MatrixXd &V, const Eigen::MatrixXi &F); 23 | std::vector polynomial_simplify(const std::vector &poly); 24 | std::vector polynomial_add(const std::vector &poly1, const std::vector &poly2); 25 | std::vector polynomial_times(const std::vector &poly1, const std::vector &poly2); 26 | std::vector polynomial_times(const std::vector &poly1, const double &nbr); 27 | double polynomial_value(const std::vector &poly, const double para); 28 | std::vector polynomial_integration(const std::vector &poly); 29 | double polynomial_integration(const std::vector &poly, const double lower, const double upper); 30 | 31 | void cylinder_example(double radius, double height, int nr, int nh); 32 | void cylinder_open_example(double radius, double height, int nr, int nh); 33 | // theta <= pi/2, phi<=pi 34 | void sphere_example(double radius, double theta, double phi, int nt, int np); 35 | 36 | void split_mesh_boundary_by_corner_detection(CGMesh& lsmesh, const Eigen::MatrixXd& V, const double threadshold_angel_degree, 37 | const std::vector &Boundary_Edges, std::vector>& boundaries); 38 | 39 | bool save_levelset(const Eigen::VectorXd &ls, const Eigen::MatrixXd& binormals); 40 | bool save_levelset(const Eigen::VectorXd &ls); 41 | bool read_levelset(Eigen::VectorXd &ls); 42 | bool read_bi_normals(Eigen::MatrixXd &bn); 43 | std::array get_vers_around_edge(CGMesh& lsmesh, int edgeid, int& fid1, int &fid2); 44 | double get_t_of_segment(const Eigen::Vector3d &ver, const Eigen::Vector3d &start, const Eigen::Vector3d &end); 45 | double get_t_of_value(const double &ver, const double &start, const double &end); 46 | Eigen::Vector2d get_2d_ver_from_t(const double t, const Eigen::Vector2d& start, const Eigen::Vector2d& end); 47 | Eigen::Vector3d get_3d_ver_from_t(const double t, const Eigen::Vector3d& start, const Eigen::Vector3d& end); 48 | bool angles_match(const double angle_degree1, const double angle_degree2); 49 | void assign_angles_based_on_funtion_values(const Eigen::VectorXd &fvalues, 50 | const double angle_large_function, const double angle_small_function, 51 | std::vector& angle_degree); 52 | bool find_one_ls_segment_on_triangle(const double value, const Eigen::MatrixXi &F, const Eigen::MatrixXd &V, 53 | const Eigen::VectorXd &fvalues, const int fid, Eigen::Vector3d &E0, Eigen::Vector3d &E1); 54 | void extract_levelset_web(const CGMesh &lsmesh, const Eigen::MatrixXd &V, 55 | const Eigen::MatrixXi &F, const Eigen::VectorXd &ls0, const Eigen::VectorXd &ls1, 56 | const int nbr_ls0, const int nbr_ls1, const int threadshold_nbr, 57 | Eigen::MatrixXd &vers, Eigen::MatrixXi &Faces, bool even_pace); 58 | void extract_levelset_web_stable(const CGMesh &lsmesh, const std::vector& loop, const Eigen::MatrixXd &V, 59 | const Eigen::MatrixXi &F, const Eigen::VectorXd &ls0, const Eigen::VectorXd &ls1, 60 | const int expect_nbr_ls0, const int expect_nbr_ls1, const int threadshold_nbr, 61 | Eigen::MatrixXd &vers, Eigen::MatrixXi &Faces, bool even_pace, bool diagSegments); 62 | void extract_shading_lines(const CGMesh &lsmesh, const Eigen::MatrixXd &V, const std::vector &loop, 63 | const Eigen::MatrixXi &F, const Eigen::VectorXd &ls, 64 | const int expect_nbr_ls, const bool write_binormals); 65 | double get_mat_max_diag(spMat& M); 66 | void solve_mean_value_laplacian_mat(CGMesh& lsmesh, const std::vector& IVids, spMat& mat); 67 | spMat sum_uneven_spMats(const spMat& mat_small, const spMat& mat_large); 68 | Eigen::VectorXd sum_uneven_vectors(const Eigen::VectorXd& vsmall, const Eigen::VectorXd& vlarge); 69 | spMat three_spmat_in_diag(const spMat& mat0, const spMat& mat1, const spMat& mat2, const int ntarget); 70 | Eigen::VectorXd three_vec_in_row(const Eigen::VectorXd& ve0, const Eigen::VectorXd& ve1, const Eigen::VectorXd& ve2, const int ntarget); 71 | // Ft, Vt belong to the triangle mesh, 72 | bool write_quad_mesh_with_binormal(const std::string & fname, const Eigen::MatrixXd& Vt, const Eigen::MatrixXi& Ft, const Eigen::MatrixXd& bi, 73 | const Eigen::MatrixXd& Vq, const Eigen::MatrixXi& Fq); 74 | void levelset_unit_scale(Eigen::VectorXd& func, Eigen::MatrixXd &GradValueF, const double length); 75 | void extract_Quad_Mesh_Zigzag(const CGMesh &lsmesh,const std::vector& loop, const Eigen::MatrixXd &V, 76 | const Eigen::MatrixXi &F, const Eigen::VectorXd &ls, 77 | const int expect_nbr_ls, const int expect_nbr_dis, const int threadshold_nbr, 78 | Eigen::MatrixXd &vers, Eigen::MatrixXi &Faces); 79 | Eigen::MatrixXd get_each_face_direction(const Eigen::MatrixXd &V, const Eigen::MatrixXi &F, const Eigen::VectorXd &func); 80 | void visual_extract_levelset_web(const CGMesh &lsmesh, const Eigen::MatrixXd &V, 81 | const Eigen::MatrixXi &F, const Eigen::VectorXd &ls0, const Eigen::VectorXd &ls1, 82 | const int expect_nbr_ls0, const int expect_nbr_ls1, Eigen::MatrixXd &E0, Eigen::MatrixXd& E1, 83 | Eigen::MatrixXd &E2, Eigen::MatrixXd& E3, 84 | bool even_pace = false, bool debug = false, int dbg0 = -1, int dbg1 = -1); 85 | void visual_extract_levelset_web_stable(const CGMesh &lsmesh, const std::vector& loop, const Eigen::MatrixXd &V, 86 | const Eigen::MatrixXi &F, const Eigen::VectorXd &ls0, const Eigen::VectorXd &ls1, 87 | const int expect_nbr_ls0, const int expect_nbr_ls1, Eigen::MatrixXd &E0, Eigen::MatrixXd &E1, 88 | Eigen::MatrixXd &E2, Eigen::MatrixXd &E3, 89 | bool even_pace, bool debug, int dbg0, int dbg1); 90 | CGMesh::HalfedgeHandle boundary_halfedge(const CGMesh& lsmesh, const CGMesh::HalfedgeHandle& boundary_edge); 91 | void select_mesh_boundary_curve_on_boundary_loop(CGMesh &lsmesh, const Eigen::MatrixXd &V, const int loopid, 92 | const int start_edge, const int nbr_edges, 93 | const std::vector &Boundary_Edges, 94 | std::vector &selected); 95 | bool vector_contains_NAN(Eigen::VectorXd &B); 96 | bool vector_contains_NAN(Eigen::VectorXd &B, int& loc); 97 | void get_one_ring_vertices(CGMesh &lsmesh, const int id, std::vector &pts); 98 | Eigen::VectorXi Second_Angle_Inner_Vers(); 99 | // the angles are in degree. 100 | Eigen::Vector3d angle_ray_converter(const double theta, const double phi); 101 | void rotate_z_axis_to_earth_axis(const Eigen::MatrixXd &Vori, Eigen::MatrixXd &Vnew, const double latitude_degree); 102 | void mesh_unit_scale(const Eigen::MatrixXd &V, Eigen::MatrixXd &Vout); 103 | void mark_high_energy_vers(const Eigen::VectorXd &energy, const int ninner, const double percentage, 104 | const std::vector &IVids, Eigen::VectorXi &he, std::vector& refid); 105 | void read_plylines_and_binormals(std::vector>& ply, std::vector>& bin); 106 | bool read_polylines(std::vector>& ply); 107 | CGMesh polyline_to_strip_mesh(const std::vector> &ply, const std::vector> &bi, 108 | const double ratio, const double ratio_back = 0); 109 | 110 | std::vector sample_one_polyline_based_on_length(const std::vector& polyline, const double avg); 111 | std::vector sample_one_polyline_and_binormals_based_on_length(const std::vector &polyline, const int nbr, 112 | const std::vector &binormals, std::vector &bn_out); 113 | double polyline_length(const std::vector& line); 114 | void write_polyline_xyz(const std::vector> &lines, const std::string prefix); 115 | Eigen::Vector3d orient_vector(const Eigen::Vector3d& base, const Eigen::Vector3d &vec); 116 | void read_origami_and_convert_to_polylines(std::vector>& ply, std::vector>& bin); 117 | std::array barycenter_coordinate(const Eigen::Vector3d &v0, const Eigen::Vector3d &v1, const Eigen::Vector3d &v2, const Eigen::Vector3d &p); 118 | void update_qd_mesh_with_plylines(); 119 | Eigen::Vector3d get_light_rotated_back_from_earth_axis(const double latitude_degree, const double theta, const double phi); 120 | bool read_csv_data_lbl(const std::string fname, std::vector> &data); 121 | void project_mesh_and_get_shading_info(CGMesh &ref, CGMesh &base, const int nbr_rings, Eigen::VectorXi &info, 122 | Eigen::MatrixXd &P1, Eigen::MatrixXd &P2); 123 | void project_mesh_and_get_vertex_class(std::vector &ref, CGMesh &base, Eigen::VectorXi &info); 124 | spMat put_mat_in_middle(const spMat &mat, const int sizemat); 125 | Eigen::VectorXd put_vec_in_middle(const Eigen::VectorXd &vec); 126 | double get_interactive_angle(const Eigen::VectorXd &func, const LSAnalizer &analizer, 127 | const CGMesh &lsmesh, const Eigen::MatrixXd &norm_v, 128 | const Eigen::MatrixXd &V, 129 | const Eigen::MatrixXi &F, const std::vector> interactive_flist, 130 | const std::vector> &interactive_bclist, const Eigen::VectorXi &InnerV); 131 | void convert_polyline_to_developable_strips(const std::vector &ply, 132 | const std::vector &bnm, std::vector &creases); 133 | void convert_polyline_to_developable_strips_reflection_method(const std::vector &ply, 134 | const std::vector &bnm, std::vector &creases); 135 | void evaluate_and_print_strip_developability(const std::vector> &ply, 136 | const std::vector> &crease); 137 | void get_polyline_rectifying_planes(const std::vector> &ply, 138 | const std::vector> &bnm, 139 | std::vector>& vertices, 140 | std::vector>& tangents, 141 | std::vector>& binormals); 142 | 143 | void save_strokes(const std::vector> &flist, const std::vector> &bclist, 144 | const Eigen::MatrixXd& V, const Eigen::MatrixXi& F); 145 | void read_strokes( std::vector> &flist, std::vector> &bclist); 146 | void get_geodesic_distance(const Eigen::MatrixXd &V, const Eigen::MatrixXi &F, const std::vector &IVids, 147 | const std::vector &idinner, Eigen::VectorXd &D); 148 | void assign_pg_angle_based_on_geodesic_distance(const Eigen::VectorXd &D, const double percentage, Eigen::VectorXd &angle); 149 | void read_ver_write_into_xyz_files(); 150 | 151 | void get_iso_lines_baricenter_coord(const CGMesh &lsmesh, const std::vector& loop, const Eigen::MatrixXd &V, 152 | const Eigen::MatrixXi &F, const Eigen::VectorXd &ls, double value, std::vector> ¶s, 153 | std::vector> &handles, 154 | std::vector& left_large); 155 | void get_diff_polylines_order(const std::vector> &pls, std::vector> &sorted, 156 | const int threadshold); 157 | void read_pts_csv_and_write_xyz_files(); 158 | // the optimization results of the strips lose the endpoints. this function recovers the endpoints by comparing with the 159 | // version before opt 160 | void recover_polyline_endpts(); 161 | 162 | // read the developable strip, and unfold it in 2d. 163 | void write_unfold_single_strip(int which_curve = 0); 164 | // the first version of straight strips: not exactly straight. 165 | void construct_single_developable_strips_by_intersect_rectifying(const int which); 166 | void construct_developable_strips_by_intersect_rectifying(); 167 | void draw_catenaries_on_cylinder(); 168 | 169 | void match_the_two_catenaries(const CGMesh &lsmesh, const std::vector &loop, const Eigen::MatrixXd &V, 170 | const Eigen::MatrixXi &F, const Eigen::MatrixXd &normals, const Eigen::VectorXd &ls, 171 | Eigen::MatrixXd& Vcout, Eigen::MatrixXd& Vlout); 172 | bool quadratic_solver(const std::vector &func, std::array &roots); 173 | void orthogonal_slope_for_different_shading_types(const int whichtype, Eigen::VectorXi InnerV, const Eigen::VectorXi &info, 174 | const Eigen::MatrixXd &V, const Eigen::MatrixXi &F, 175 | const Eigen::MatrixXd &norm_f, const double theta, 176 | const double phi, const double theta_tol, const double phi_tol, 177 | const double theta2, const double phi2, 178 | std::vector &fout, std::vector &ortho); 179 | void get_orthogonal_direction_minimal_principle_curvature(const Eigen::MatrixXd &V, const Eigen::MatrixXi &F, 180 | std::vector &idspos, 181 | std::vector &idsneg, std::vector &ortho, 182 | std::vector &coscos, std::vector>& CurvDir); 183 | void obj2csv(); 184 | void csv2objcurves(); 185 | void project_polylines_on_shading_curves_and_save_results(); 186 | void read_draw_pts_from_plylines(Eigen::MatrixXd &ver); 187 | void read_plylines_extract_offset_mesh(const double scale_front, const double scale_back, CGMesh& mesh); 188 | void make_example_comparing_two_plylines_distance(); 189 | void compare_multiple_correspoding_curves_dis(); 190 | void run_sort_polylines(); 191 | void show_rotback_slopes(const Eigen::MatrixXd &E0, const Eigen::MatrixXd &E1, const double latitude_degree, 192 | Eigen::MatrixXd &rotmids, Eigen::MatrixXd &rotdirs); 193 | void save_rotback_slopes(const Eigen::MatrixXd &rotmids, const Eigen::MatrixXd &rotdirs); 194 | void decrease_ply_nbr_by_half(); 195 | void evaluate_strip_straightness(const std::vector>& plys,const std::vector>& bnms); 196 | void save_invert_levelset(const Eigen::VectorXd& func); 197 | void write_polyline_joints(const Eigen::MatrixXd& V, const Eigen::MatrixXi& F, const Eigen::MatrixXd &norm_v); 198 | void generate_rulings_outof_plylines(); 199 | void assign_const_rulings_to_strips(const Eigen::Vector3d& bnm); 200 | void compute_ls_intersections_and_assign_parallel_joints(const CGMesh &lsmesh, const Eigen::Vector3d &joint, 201 | const double scale, const Eigen::MatrixXd &V, 202 | const Eigen::MatrixXi &F, const Eigen::VectorXd &ls0, const Eigen::VectorXd &ls1, 203 | const int expect_nbr_ls0, const int expect_nbr_ls1, 204 | bool even_pace); 205 | void angle_range_calculator(double theta, double phi, double theta_tol, double phi_tol, double &zmin, double &zmax, double &tanmin, 206 | double &tanmax); 207 | void assign_ls_to_subpatch(CGMesh &ref, CGMesh &base, const Eigen::VectorXd &func, Eigen::VectorXd &funout); 208 | void runRotateArrows(double scaling); 209 | void writeRectifyingPlanes(double scaling); 210 | void writeMessyPoints(double scaling); 211 | void readTriMeshConvert2QuadMesh(); 212 | void readQuadMesh2TriMesh(); 213 | void evaluateGGGConsineConstraints(); 214 | void processKhusravData(); --------------------------------------------------------------------------------