{"id":40433007,"url":"https://github.com/lihpc-computational-geometry/nightmare_of_polycubes","last_synced_at":"2026-01-20T16:09:27.038Z","repository":{"id":193012859,"uuid":"687705144","full_name":"LIHPC-Computational-Geometry/nightmare_of_polycubes","owner":"LIHPC-Computational-Geometry","description":"(Very) challenging 3D shapes for polycube-based hex-meshing","archived":false,"fork":false,"pushed_at":"2025-01-16T20:10:24.000Z","size":52920,"stargazers_count":11,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-05T02:44:52.758Z","etag":null,"topics":["3d","3d-graphics","3d-models","brep","cad","creative-commons","dataset","geometry-processing","hex-mesh","mesh-processing","obj","open-data","polycube","salome-platform","step","stl"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LIHPC-Computational-Geometry.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-09-05T20:45:28.000Z","updated_at":"2025-03-21T11:33:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"ba2e69a0-a81c-4337-9758-189c0c762211","html_url":"https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes","commit_stats":null,"previous_names":["lihpc-computational-geometry/nightmare_of_polycubes"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/LIHPC-Computational-Geometry/nightmare_of_polycubes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LIHPC-Computational-Geometry%2Fnightmare_of_polycubes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LIHPC-Computational-Geometry%2Fnightmare_of_polycubes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LIHPC-Computational-Geometry%2Fnightmare_of_polycubes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LIHPC-Computational-Geometry%2Fnightmare_of_polycubes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LIHPC-Computational-Geometry","download_url":"https://codeload.github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LIHPC-Computational-Geometry%2Fnightmare_of_polycubes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28606465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T14:45:23.139Z","status":"ssl_error","status_checked_at":"2026-01-20T14:44:16.929Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d","3d-graphics","3d-models","brep","cad","creative-commons","dataset","geometry-processing","hex-mesh","mesh-processing","obj","open-data","polycube","salome-platform","step","stl"],"created_at":"2026-01-20T16:09:26.346Z","updated_at":"2026-01-20T16:09:27.033Z","avatar_url":"https://github.com/LIHPC-Computational-Geometry.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nightmare of polycubes\n\n(Very) challenging 3D shapes for polycube-based hex-meshing\n\n[![Maintenance Level: Inactively Maintained](https://badgen.net/badge/Maintenance%20Level/Inactively%20Maintained?color=a4a61d)](https://gist.github.com/cheerfulstoic/d107229326a01ff0f333a1d3476e068d)\n\n## Dataset\n\nAll models were designed with the [Shaper](https://www.salome-platform.org/?page_id=327) module of the open-source [SALOME platform](https://www.salome-platform.org/).\n\n\u003c!--\nYes, a HTML table would make things more readable, but we have to stick to a Markdown one to have [^footnotes]\nhttps://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#footnotes\n--\u003e\nName | Thumbnail | Files | Comments\n:---:|-----------|-------|---------\n`7-connected` | \u003cdiv align=\"center\"\u003e\u003cimg src=\"7-connected/thumbnail.png\" width=\"300\"/\u003e\u003cbr/\u003e\u003ca href=\"https://3dviewer.net/#model=https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes/blob/main/7-connected/labeled_CAD.glb\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e3D viewer ↗\u003c/a\u003e\u003c/div\u003e | [.hdf](7-connected/SALOME_Study.hdf) \u003cbr/\u003e [.py](7-connected/SALOME_Shaper.py) \u003cbr/\u003e [.step](7-connected/CAD.step) \u003cbr/\u003e [.brep](7-connected/CAD.brep) \u003cbr/\u003e [.stl](7-connected/CAD.stl) \u003cbr/\u003e [.obj](7-connected/triangle_mesh.obj) | The node at the middle has 7 adjacent patches, which is usually forbidden [^eppstein2010][^livesu2013][^dumery2022][^he2024], despite that the polycuboid corresponding to the labeling can be used to generate a good hex-mesh.\n`8-connected` | \u003cdiv align=\"center\"\u003e\u003cimg src=\"8-connected/thumbnail.png\" width=\"300\"/\u003e\u003cbr/\u003e\u003ca href=\"https://3dviewer.net/#model=https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes/blob/main/8-connected/labeled_CAD.glb\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e3D viewer ↗\u003c/a\u003e\u003c/div\u003e | [.hdf](8-connected/SALOME_Study.hdf) \u003cbr/\u003e [.py](8-connected/SALOME_Shaper.py) \u003cbr/\u003e [.step](8-connected/CAD.step) \u003cbr/\u003e [.brep](8-connected/CAD.brep) \u003cbr/\u003e [.stl](8-connected/CAD.stl) \u003cbr/\u003e [.obj](8-connected/triangle_mesh.obj) | Another high valence corner (here of valence 8) is present in the labeling, but the latter can still be used to generate a good hex-mesh.\n`24-connected` | \u003cdiv align=\"center\"\u003e\u003cimg src=\"24-connected/thumbnail.png\" width=\"300\"/\u003e\u003cbr/\u003e\u003ca href=\"https://3dviewer.net/#model=https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes/blob/main/24-connected/labeled_CAD.glb\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e3D viewer ↗\u003c/a\u003e\u003c/div\u003e | [.hdf](24-connected/SALOME_Study.hdf) \u003cbr/\u003e [.py](24-connected/SALOME_Shaper.py) \u003cbr/\u003e [.step](24-connected/CAD.step) \u003cbr/\u003e [.brep](24-connected/CAD.brep) \u003cbr/\u003e [.stl](24-connected/CAD.stl) \u003cbr/\u003e [.obj](24-connected/triangle_mesh.obj) | 8 volumes connected by a vertex, making a labeling node with 24 adjacent patches. If we ignore diagonal feature edges, the labeling can be used to generate a polycube-based hex-mesh.\n`encrusted_cube` | \u003cdiv align=\"center\"\u003e\u003cimg src=\"encrusted_cube/thumbnail.png\" width=\"300\"/\u003e\u003cbr/\u003e\u003ca href=\"https://3dviewer.net/#model=https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes/blob/main/encrusted_cube/labeled_CAD.glb\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e3D viewer ↗\u003c/a\u003e\u003c/div\u003e | [.hdf](encrusted_cube/SALOME_Study.hdf) \u003cbr/\u003e [.py](encrusted_cube/SALOME_Shaper.py) \u003cbr/\u003e [.step](encrusted_cube/CAD.step) \u003cbr/\u003e [.brep](encrusted_cube/CAD.brep) \u003cbr/\u003e [.stl](encrusted_cube/CAD.stl) \u003cbr/\u003e [.obj](encrusted_cube/triangle_mesh.obj) | The labeling is justly classified as invalid (there are 4-connected corners with incident boundaries of the same axis) according to the \"simple orthogonal polyhedra\" criteria [^eppstein2010][^livesu2013]. But the issue is that the common processing for invalid corners (local relabeling [^dumery2022]) will result in a high distorsion, whereas a global operator (retracing of incident boundaries) would be better. Model inspired by ABC n°00001525 [^koch2019].\n`conjoined_twins` | \u003cdiv align=\"center\"\u003e\u003cimg src=\"conjoined_twins/thumbnail.png\" width=\"300\"/\u003e\u003cbr/\u003e\u003ca href=\"https://3dviewer.net/#model=https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes/blob/main/conjoined_twins/labeled_CAD.glb\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e3D viewer ↗\u003c/a\u003e\u003c/div\u003e | [.hdf](conjoined_twins/SALOME_Study.hdf) \u003cbr/\u003e [.py](conjoined_twins/SALOME_Shaper.py) \u003cbr/\u003e [.step](conjoined_twins/CAD.step) \u003cbr/\u003e [.brep](conjoined_twins/CAD.brep) \u003cbr/\u003e [.stl](conjoined_twins/CAD.stl) \u003cbr/\u003e [.obj](conjoined_twins/triangle_mesh.obj) | Simplified configuration of the previous model.\n`cuboid_screw_thread` | \u003cdiv align=\"center\"\u003e\u003cimg src=\"cuboid_screw_thread/thumbnail.png\" width=\"300\"/\u003e\u003cbr/\u003e\u003ca href=\"https://3dviewer.net/#model=https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes/blob/main/cuboid_screw_thread/labeled_CAD.glb\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e3D viewer ↗\u003c/a\u003e\u003c/div\u003e | [.hdf](cuboid_screw_thread/SALOME_Study.hdf) \u003cbr/\u003e [.py](cuboid_screw_thread/SALOME_Shaper.py) \u003cbr/\u003e [.step](cuboid_screw_thread/CAD.step) \u003cbr/\u003e [.brep](cuboid_screw_thread/CAD.brep) \u003cbr/\u003e [.stl](cuboid_screw_thread/CAD.stl) \u003cbr/\u003e [.obj](cuboid_screw_thread/triangle_mesh.obj) | Introduced in [^sokolov2015] and mentioned in appendices of [^dumery2022]. \u003cbr/\u003e Labeling-based approaches [^livesu2013][^dumery2022] will collapse the two parts of the slope, constrained to the same top and bottom planes.\n`cuboid_torus_with_step` | \u003cdiv align=\"center\"\u003e\u003cimg src=\"cuboid_torus_with_step/thumbnail.png\" width=\"300\"/\u003e\u003cbr/\u003e\u003ca href=\"https://3dviewer.net/#model=https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes/blob/main/cuboid_torus_with_step/labeled_CAD.glb\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e3D viewer ↗\u003c/a\u003e\u003c/div\u003e | [.hdf](cuboid_torus_with_step/SALOME_Study.hdf) \u003cbr/\u003e [.py](cuboid_torus_with_step/SALOME_Shaper.py) \u003cbr/\u003e [.step](cuboid_torus_with_step/CAD.step) \u003cbr/\u003e [.brep](cuboid_torus_with_step/CAD.brep) \u003cbr/\u003e [.stl](cuboid_torus_with_step/CAD.stl) \u003cbr/\u003e [.obj](cuboid_torus_with_step/triangle_mesh.obj) | Introduced in [^sokolov2015] I believe. \u003cbr/\u003e Here too labeling-based approaches [^livesu2013][^dumery2022] will not detect any invalidity and crush the step into the z-axis plane.\n`cuboid_tray_with_step` | \u003cdiv align=\"center\"\u003e\u003cimg src=\"cuboid_tray_with_step/thumbnail.png\" width=\"300\"/\u003e\u003cbr/\u003e\u003ca href=\"https://3dviewer.net/#model=https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes/blob/main/cuboid_tray_with_step/labeled_CAD.glb\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e3D viewer ↗\u003c/a\u003e\u003c/div\u003e | [.hdf](cuboid_tray_with_step/SALOME_Study.hdf) \u003cbr/\u003e [.py](cuboid_tray_with_step/SALOME_Shaper.py) \u003cbr/\u003e [.step](cuboid_tray_with_step/CAD.step) \u003cbr/\u003e [.brep](cuboid_tray_with_step/CAD.brep) \u003cbr/\u003e [.stl](cuboid_tray_with_step/CAD.stl) \u003cbr/\u003e [.obj](cuboid_tray_with_step/triangle_mesh.obj) | Similar to the previous model (the step will still be crushed), but of genus 0.\n`in-volume_twist` | \u003cdiv align=\"center\"\u003e\u003cimg src=\"in-volume_twist/thumbnail.png\" width=\"300\"/\u003e\u003cbr/\u003e\u003ca href=\"https://3dviewer.net/#model=https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes/blob/main/in-volume_twist/labeled_CAD.glb\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e3D viewer ↗\u003c/a\u003e\u003c/div\u003e | [.hdf](in-volume_twist/SALOME_Study.hdf) \u003cbr/\u003e [.py](in-volume_twist/SALOME_Shaper.py) \u003cbr/\u003e [.step](in-volume_twist/CAD.step) \u003cbr/\u003e [.brep](in-volume_twist/CAD.brep) \u003cbr/\u003e [.stl](in-volume_twist/CAD.stl) \u003cbr/\u003e [.obj](in-volume_twist/triangle_mesh.obj) | Introduced in [^mestrallet2023] \u003cbr/\u003e Labeling-based approaches [^livesu2013][^dumery2022] will not detect the twist. The slits prevent hex-mesh extraction algorithms from un-twisting the through-hole and pushing all distorsion towards the left and right faces.\n`in-volume_knot` | \u003cdiv align=\"center\"\u003e\u003cimg src=\"in-volume_knot/thumbnail.png\" width=\"300\"/\u003e\u003cbr/\u003e\u003ca href=\"https://3dviewer.net/#model=https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes/blob/main/in-volume_knot/labeled_CAD.glb\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e3D viewer ↗\u003c/a\u003e\u003c/div\u003e | [.hdf](in-volume_knot/SALOME_Study.hdf) \u003cbr/\u003e [.py](in-volume_knot/SALOME_Shaper.py) \u003cbr/\u003e [.step](in-volume_knot/CAD.step) \u003cbr/\u003e [.brep](in-volume_knot/CAD.brep) \u003cbr/\u003e [.stl](in-volume_knot/CAD.stl) \u003cbr/\u003e [.obj](in-volume_knot/triangle_mesh.obj) | Similar to the previous model, but the through-hole is twisting around itself.\n`pipe_helix_7` | \u003cdiv align=\"center\"\u003e\u003cimg src=\"pipe_helix_7/thumbnail.png\" width=\"300\"/\u003e\u003cbr/\u003e\u003ca href=\"https://3dviewer.net/#model=https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes/blob/main/pipe_helix_7/labeled_CAD.glb\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e3D viewer ↗\u003c/a\u003e\u003c/div\u003e | [.hdf](pipe_helix_7/SALOME_Study.hdf) \u003cbr/\u003e [.py](pipe_helix_7/SALOME_Shaper.py) \u003cbr/\u003e [.step](pipe_helix_7/CAD.step) \u003cbr/\u003e [.brep](pipe_helix_7/CAD.brep) \u003cbr/\u003e [.stl](pipe_helix_7/CAD.stl) \u003cbr/\u003e [.obj](pipe_helix_7/triangle_mesh.obj) | 7 pipes with helices around, inside a hexagonal prism. The helices slopes are likely to create conflicting normal constraints [^sokolov2015] along the pipes axis.\n`pipe_helix` | \u003cdiv align=\"center\"\u003e\u003cimg src=\"pipe_helix/thumbnail.png\" width=\"300\"/\u003e\u003cbr/\u003e\u003ca href=\"https://3dviewer.net/#model=https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes/blob/main/pipe_helix/labeled_CAD.glb\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e3D viewer ↗\u003c/a\u003e\u003c/div\u003e | [.hdf](pipe_helix/SALOME_Study.hdf) \u003cbr/\u003e [.py](pipe_helix/SALOME_Shaper.py) \u003cbr/\u003e [.step](pipe_helix/CAD.step) \u003cbr/\u003e [.brep](pipe_helix/CAD.brep) \u003cbr/\u003e [.stl](pipe_helix/CAD.stl) \u003cbr/\u003e [.obj](pipe_helix/triangle_mesh.obj) | Simplified configuration of the previous model.\n\n[^livesu2013]: Marco Livesu, Nicholas Vining, Alla Sheffer, James Gregson, Riccardo Scateni, \"PolyCut: Monotone Graph-Cuts for PolyCube Base-Complex Construction\", _Transactions on Graphics_ (Proc. SIGGRAPH ASIA 2013), 2013, DOI: [10.1145/2508363.2508388](https://dl.acm.org/doi/10.1145/2508363.2508388), project page: [www.cs.ubc.ca/labs/imager/tr/2013/polycut/](http://www.cs.ubc.ca/labs/imager/tr/2013/polycut/)\n[^sokolov2015]: Dmitry Sokolov, Nicolas Ray, \"Fixing normal constraints for generation of polycubes\", research report, LORIA, 2015, HAL: [hal-01211408](https://inria.hal.science/hal-01211408)\n[^dumery2022]: Corentin Dumery, François Protais, Sébastien Mestrallet, Christophe Bourcier, Franck Ledoux, \"Evocube: a Genetic Labeling Framework for Polycube-Maps\", _Computer Graphics Forum_, 2022, DOI: [10.1111/cgf.14649](http://doi.org/10.1111/cgf.14649), HAL: [hal-03657779](https://hal-cea.archives-ouvertes.fr/hal-03657779), project page: [corentindumery.github.io/projects/evocube.html](https://corentindumery.github.io/projects/evocube.html)\n[^mestrallet2023]: Sébastien Mestrallet, François Protais, Christophe Bourcier, Franck Ledoux, \"Limits and prospects of polycube labelings\", _SIAM International Meshing Roundtable_ Workshop, March 2023, HAL: [cea-04169841](https://cea.hal.science/cea-04169841)\n[^eppstein2010]: David Eppstein, Elena Mumford, \"Steinitz Theorems for Orthogonal Polyhedra\", _Proceedings of the 26th annual symposium on Computational Geometry_, pp.429–438, 2010, DOI: [10.1145/1810959.1811030](http://doi.org/10.1145/1810959.1811030)\n[^koch2019]: Sebastian Koch, Albert Matveev, Zhongshi Jiang, Francis Williams, Alexey Artemov, Evgeny Burnaev, Marc Alexa, Denis Zorin, Daniele Panozzo, \"ABC: A Big CAD Model Dataset For Geometric Deep Learning\", _Computer Vision and Pattern Recognition_, 2019, DOI: [10.1109/CVPR.2019.00983](http://doi.org/10.1109/CVPR.2019.00983), project page: [deep-geometry.github.io/abc-dataset](https://deep-geometry.github.io/abc-dataset/)\n[^he2024]: Lu He, Na Lei, Ziliang Wang, Chen Wang, Xiaopeng Zheng, and Zhongxuan Luo, \"Expanding the Solvable Space of Polycube-Map via Validity-Enhanced Construction\", _Proceedings of the 2024 International Meshing Roundtable_, 2024, DOI: [10.1137/1.9781611978001.4](https://doi.org/10.1137/1.9781611978001.4)\n\nThanks to François Protais for the ideas that led to `in-volume_twist` \u0026 `in-volume_knot`, and to Christophe Bourcier for your help with Shaper.\n\n## Per model files\n\n\u003cdetails\u003e \u003csummary\u003eSALOME_Study.hdf\u003c/summary\u003e\n\nThis is a study of the [SALOME platform](https://www.salome-platform.org/), based on the [Hierarchical Data Format](https://www.hdfgroup.org/solutions/hdf5/). It contains the CAD construction.\n\nTo open this file, open SALOME then, in the menu bar, click on \"File\" \u003e \"Open\", and select the SALOME_Study.hdf file. Last, open the Shaper module.\n\n\u003c/details\u003e\n\u003cdetails\u003e \u003csummary\u003eSALOME_Shaper.py\u003c/summary\u003e\n\nThis is a script generated by the [Shaper](https://www.salome-platform.org/?page_id=327) module of [SALOME](https://www.salome-platform.org/), to construct the CAD model from a text-based user interface.\n\nTo execute a Shaper script, open SALOME then the Shaper module. In the menu bar click on \"File\" \u003e \"Load Script\" and select the SALOME_Shaper.py file.\n\n\u003c/details\u003e\n\u003cdetails\u003e \u003csummary\u003eCAD.step\u003c/summary\u003e\n\nThis is a static 3D CAD model under the [STEP / ISO 10303](https://en.wikipedia.org/wiki/ISO_10303) format. It was exported from Shaper.\n\nYou can open it with many tools, like the [Shaper](https://www.salome-platform.org/?page_id=327) module of [SALOME](https://www.salome-platform.org/), [Mayo](https://github.com/fougue/mayo/), [f3d](https://github.com/f3d-app/f3d) or [3dviewer.net](https://3dviewer.net/). \n\n\u003c/details\u003e\n\u003cdetails\u003e \u003csummary\u003eCAD.brep\u003c/summary\u003e\n\nThis is a static 3D CAD model under the Boundary REPresentation format. It was exported from Shaper.\n\nYou can open it with many tools, like the [Shaper](https://www.salome-platform.org/?page_id=327) module of [SALOME](https://www.salome-platform.org/), [Mayo](https://github.com/fougue/mayo/), [f3d](https://github.com/f3d-app/f3d) or [3dviewer.net](https://3dviewer.net/).\n\n\u003c/details\u003e\n\u003cdetails\u003e \u003csummary\u003eCAD.stl\u003c/summary\u003e\n\nThis is a discretized 3D model under the [STL](https://en.wikipedia.org/wiki/STL_(file_format)) binary format. It was exported from Shaper with the default relative deflection of 0.0001.\n\nYou can open it with many tools, like the [Shaper](https://www.salome-platform.org/?page_id=327) module of [SALOME](https://www.salome-platform.org/), [Mayo](https://github.com/fougue/mayo/), [f3d](https://github.com/f3d-app/f3d) or [3dviewer.net](https://3dviewer.net/).\n\n\u003c/details\u003e\n\u003cdetails\u003e \u003csummary\u003etriangle_mesh.obj\u003c/summary\u003e\n\nThis is a fine 3D triangle mesh under the [Wavefront](https://en.wikipedia.org/wiki/Wavefront_.obj_file) format. A tetrahedral mesh was first generated using [Gmsh](http://gmsh.info/) (with Mesh.CharacteristicLengthFactor = 0.05), except for `encrusted_cube` where I had to use the [SMESH](https://www.salome-platform.org/?page_id=374) module of [SALOME](https://www.salome-platform.org/) to obtain a volume mesh with the prescribed feature edges. Then the surface was extracted with [extract_surface](https://github.com/LIHPC-Computational-Geometry/validity-first-polycube-labeling/blob/main/app/extract_surface.cpp) from [LIHPC-Computational-Geometry/validity-first-polycube-labeling](https://github.com/LIHPC-Computational-Geometry/validity-first-polycube-labeling). The mesh size is deliberately small and homogeneous to leave degrees of freedom to the labeling generation stage.\n\nYou can open it with many tools, like [Graphite](https://github.com/BrunoLevy/GraphiteThree), [f3d](https://github.com/f3d-app/f3d) or [3dviewer.net](https://3dviewer.net/).\n\n\u003c/details\u003e\n\u003cdetails\u003e \u003csummary\u003elabeling.txt\u003c/summary\u003e\n\nThis is an ASCII file with as many lines as there are triangles in triangle_mesh.obj. Each triangle is mapped to one of the 6 global directions : $\\{0 = +X, 1 = -X, 2 = +Y, 3 = -Y, 4 = +Z, 5 = -Z\\}$. In the thumbnail and the .glb file, red-white-blue colors are used to represent $X$, $Y$, and $Z$ labels. The text file was generated using [naive_labeling](https://github.com/LIHPC-Computational-Geometry/validity-first-polycube-labeling/blob/main/app/naive_labeling.cpp) from [LIHPC-Computational-Geometry/validity-first-polycube-labeling](https://github.com/LIHPC-Computational-Geometry/validity-first-polycube-labeling), that is by picking the closest direction of each triangle normal. Complex shapes (like `pipe_helix` and `pipe_helix_7`) cannot rely on such labeling to obtain a polycube.\n\nTo open this file, you have to load triangle_mesh.obj first in [labeling_viewer](https://github.com/LIHPC-Computational-Geometry/validity-first-polycube-labeling/blob/main/app/labeling_viewer.cpp) from [LIHPC-Computational-Geometry/validity-first-polycube-labeling](https://github.com/LIHPC-Computational-Geometry/validity-first-polycube-labeling), then the labeling.\n\n\u003c/details\u003e\n\u003cdetails\u003e \u003csummary\u003elabeled_CAD.glb\u003c/summary\u003e\n\nThis is a 3D render stored under the [glTF](https://www.khronos.org/gltf/) 2.0 binary format. It is not based on triangle_mesh.obj + labeling.txt (too heavy), but on a naive labeling of CAD.stl. It was generated using [to_glTF](https://github.com/LIHPC-Computational-Geometry/validity-first-polycube-labeling/blob/main/app/to_glTF.cpp) from [LIHPC-Computational-Geometry/validity-first-polycube-labeling](https://github.com/LIHPC-Computational-Geometry/validity-first-polycube-labeling).\n\nYou can open it with many tools, like the [official sample viewer from Khronos](https://github.khronos.org/glTF-Sample-Viewer-Release/), [f3d](https://github.com/f3d-app/f3d) or [3dviewer.net](https://3dviewer.net/).\n\n\u003c/details\u003e\n\n## Contributing\n\nIf you defined new validity criteria for polycube labelings, that better discriminate between valid and invalid configurations, you can send a PR to link to your work.\n\nLikewise, if you designed an automatic hex-meshing algorithm, in particular (but not limited to) a polycube-based one, that can handle one of these 3D models (except a `*-connected`, too easy), you can send a PR to link to your work.\n\n## License\n\n[CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/)\n\n## How to cite\n \n\u003e Sébastien Mestrallet and Christophe Bourcier, \"Nightmare of polycubes\", [https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes](https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes), licensed under [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/)\n\n\u003cdetails\u003e \u003csummary\u003eAPA\u003c/summary\u003e\n\nUse the \"[Cite this repository](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-citation-files)\" GitHub button.\n\n\u003c/details\u003e\n\u003cdetails\u003e \u003csummary\u003eBibTex\u003c/summary\u003e\n\nUse the \"[Cite this repository](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-citation-files)\" GitHub button.\n\n\u003c/details\u003e\n\u003cdetails\u003e \u003csummary\u003e\u003ca href=\"https://citation-file-format.github.io/\"\u003eCitation File Format\u003c/a\u003e (.cff)\u003c/summary\u003e\n\nSee [CITATION.cff](CITATION.cff).\n\n\u003c/details\u003e\n\u003cdetails\u003e \u003csummary\u003e\u003ca href=\"https://github.com/typst/hayagriva/blob/main/docs/file-format.md\"\u003eHayagriva\u003c/a\u003e (for \u003ca href=\"https://typst.app/\"\u003eTypst\u003c/a\u003e)\u003c/summary\u003e\n\n```yaml\nnightmare_of_polycubes:\n    title: Nightmare of polycubes\n    author: [\"Mestrallet, Sébastien\", \"Bourcier, Christophe\"]\n    type: repository\n    url: https://github.com/LIHPC-Computational-Geometry/nightmare_of_polycubes\n    date: 2024\n```\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flihpc-computational-geometry%2Fnightmare_of_polycubes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flihpc-computational-geometry%2Fnightmare_of_polycubes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flihpc-computational-geometry%2Fnightmare_of_polycubes/lists"}