OpenVolumeMesh issueshttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues2019-08-16T19:20:09Zhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/14CMake overhaul2019-08-16T19:20:09ZMartin HeistermannCMake overhaul* [x] CMakeLists rewrite
* [ ] Windows dll/lib build (need to add OVM_EXPORT macros / disable warnings about STL containers)
* [ ] Tests on windows (with or without ctest?)
* [x] Support static library build (if needed?)
* [x] Adjus...* [x] CMakeLists rewrite
* [ ] Windows dll/lib build (need to add OVM_EXPORT macros / disable warnings about STL containers)
* [ ] Tests on windows (with or without ctest?)
* [x] Support static library build (if needed?)
* [x] Adjust OpenFlipper to work with new OVM (without its own custom finder)
* [ ] Test in-tree build
* [ ] Test standalone build
* [ ] File converter
* [ ] support find_package after add_subdirectory
http://www.brianlheim.com/2018/04/09/cmake-cheat-sheet.html
https://pabloariasal.github.io/2018/02/19/its-time-to-do-cmake-right/
Maybe: https://cmake.org/cmake/help/latest/module/WriteCompilerDetectionHeader.html
Development branch (may receive force pushes): https://www.graphics.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/commits/cmake-overhaul-2Martin HeistermannMartin Heistermannhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/17Support proper shared library build2019-08-13T13:21:54ZMartin HeistermannSupport proper shared library buildFor a clean shared library, we need to
* [ ] Avoid exposing STL containers in the interface.
* [ ] Add OVM_EXPORT macros in many placesFor a clean shared library, we need to
* [ ] Avoid exposing STL containers in the interface.
* [ ] Add OVM_EXPORT macros in many placeshttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/18TopologyKernel::face_cells return value contains an invalid handle for surfac...2019-08-19T15:27:26ZMartin HeistermannTopologyKernel::face_cells return value contains an invalid handle for surface facesThis is unexpected behaviour (at least for me).This is unexpected behaviour (at least for me).https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/21cleanup2021-08-19T10:10:00ZMartin Heistermanncleanup- [x] Make all relative `#include` "absolute" (`<OpenVolumeMesh/...`)
- [ ] Code formatting: Replace all tabs, maybe run clang-tidy- [x] Make all relative `#include` "absolute" (`<OpenVolumeMesh/...`)
- [ ] Code formatting: Replace all tabs, maybe run clang-tidyv3.0Martin HeistermannMartin Heistermannhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/22Implement OM-Style smart handles2023-02-01T10:57:31ZMartin HeistermannImplement OM-Style smart handlesWIP branch: https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/tree/dev/smart-handles
When everything works well, we can start returning smart handles everywhere :smile:WIP branch: https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/tree/dev/smart-handles
When everything works well, we can start returning smart handles everywhere :smile:v3.0Martin HeistermannMartin Heistermannhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/23OVMB: binary file format2021-11-19T14:55:28ZMartin HeistermannOVMB: binary file formatFor first release:
- [x] Implement ~~all~~ important prop types from the current ASCII format
- [x] get rid of (or catch) exceptions
- [x] save options
- [x] De-templatize implementation, often a TopologyKernel is sufficient
- [ ] Docume...For first release:
- [x] Implement ~~all~~ important prop types from the current ASCII format
- [x] get rid of (or catch) exceptions
- [x] save options
- [x] De-templatize implementation, often a TopologyKernel is sufficient
- [ ] Document API
- [ ] Standard load/save API
- [ ] Custom prop type API
- [x] file format
- [x] OF integration
- [x] .ovmb file picker
- [x] ACG vector types
- [x] PluginFunctions to register custom prop types
- [x] Add unit tests
- [x] save + load
- [x] load existing files (to avoid incompatibility regressions)
- [x] Eigen types
- [ ] custom property types
Later:
- [ ] compression (zstd?) - figure out how to handle dependency well
- [ ] progress callback + abort functionv3.0Martin HeistermannMartin Heistermannhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/24Add tests for TetTopoKernel split_*/collapse_*2021-08-19T10:08:02ZMartin HeistermannAdd tests for TetTopoKernel split_*/collapse_*v3.0https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/25Add tests for attributes2021-08-19T10:10:04ZMartin HeistermannAdd tests for attributesv3.0https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/26Better mixed mesh support2022-06-28T14:25:05ZMartin HeistermannBetter mixed mesh supportA lot of functionality implemented for tet/hex meshes would also be useful in polyhedral meshes for cells/regions of the appropriate type.A lot of functionality implemented for tet/hex meshes would also be useful in polyhedral meshes for cells/regions of the appropriate type.v3.0https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/27Add mesh analysis2021-08-19T10:10:03ZMartin HeistermannAdd mesh analysisMove code from OF/Plugin-InfoVolumeMeshMove code from OF/Plugin-InfoVolumeMeshv3.0Martin HeistermannMartin Heistermannhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/29Fix inconsistencies2021-09-09T15:41:49ZMartin HeistermannFix inconsistencies- [ ] `TopologyKernel::opposite_halfface()` returns face- [ ] `TopologyKernel::opposite_halfface()` returns facev3.0Martin HeistermannMartin Heistermannhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/30FileManager: check if mesh is garbage collected2021-11-08T13:29:44ZMartin HeistermannFileManager: check if mesh is garbage collectedsaving a non-garbage-collected mesh will have weird results and a potentially unreadable mesh.saving a non-garbage-collected mesh will have weird results and a potentially unreadable mesh.Martin HeistermannMartin Heistermannhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/31Clean up CI scripts2022-06-28T14:19:41ZMartin HeistermannClean up CI scriptsMartin HeistermannMartin Heistermannhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/32Ensure some (limited) thread safety2022-03-19T08:18:46ZMartin HeistermannEnsure some (limited) thread safetyAdding and removing (even private) properties requires synchronisation between threads for the `Tracker` modification.
As private properties are allowed for const meshes (using `mutable`), this behaviour is definitely unwanted and surpr...Adding and removing (even private) properties requires synchronisation between threads for the `Tracker` modification.
As private properties are allowed for const meshes (using `mutable`), this behaviour is definitely unwanted and surprising.Martin HeistermannMartin Heistermannhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/34Ensure move-assignment behaves as expected2022-06-28T14:22:21ZMartin HeistermannEnsure move-assignment behaves as expectedFor use in OF, it would be excellent if existing properties are ensured to keep working with the new moved-in mesh.
Write a test :)For use in OF, it would be excellent if existing properties are ensured to keep working with the new moved-in mesh.
Write a test :)Martin HeistermannMartin Heistermannhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/36Evaluate "Wuffs" for OVMB parsing2022-06-28T11:35:30ZMartin HeistermannEvaluate "Wuffs" for OVMB parsingPossibly better/safer than the hand-rolled parser (which demands some refactoring anyways to separate file parsing from mesh creation):
https://github.com/google/wuffsPossibly better/safer than the hand-rolled parser (which demands some refactoring anyways to separate file parsing from mesh creation):
https://github.com/google/wuffshttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/37Document, test and fix SmartTagger:2022-06-28T13:51:15ZMartin HeistermannDocument, test and fix SmartTagger:I think the comparison in reset() is the wrong way around:
https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/blob/52042166262c32729498a671b1b92ffe1c7eb299/src/OpenVolumeMesh/Util/SmartTagger.hh#L23-28I think the comparison in reset() is the wrong way around:
https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/blob/52042166262c32729498a671b1b92ffe1c7eb299/src/OpenVolumeMesh/Util/SmartTagger.hh#L23-28https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/38Move primitive generating functions from OpenFlipper to OVM2022-06-28T14:19:29ZMartin HeistermannMove primitive generating functions from OpenFlipper to OVMhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/39Iterate over all entities with range-for even when the mesh is modified2022-07-27T17:50:48ZMartin HeistermannIterate over all entities with range-for even when the mesh is modifiedCurrently, when using range-for on mesh entities (e.g. `for (auto c: mesh.cells()){}`), the end iterator is an explicit handle to a past-the-end element *during initialisation time*. If the mesh is modified, the loop will either skip the...Currently, when using range-for on mesh entities (e.g. `for (auto c: mesh.cells()){}`), the end iterator is an explicit handle to a past-the-end element *during initialisation time*. If the mesh is modified, the loop will either skip the new elements, or worse, go past the end.
```
CellIter cells_begin() const {
return CellIter(this, CellHandle(0));
}
CellIter cells_end() const {
return CellIter(this, CellHandle((int)cells_.size()));
}
std::pair<CellIter, CellIter> cells() const {
return std::make_pair(cells_begin(), cells_end());
}
```
While modifications during iteration usually is a bad idea, the expectation (IMO rightfully) is that this kind of range loop would iterate until the last element, as long as you use deferred deletion (or only add elements at the end).
My idea here would be to create a special immutable end iterator object, that compares equal to an iterator if the iterator is the current past-the-end element.
Maybe an extra type that implicitly converts to the current end iterator, or is that too much magic?
We could also comapare equal to an iterator that is further past the end - this way, even deleting the last element while iterating over it will work without deferred deletion.https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/40Add Read-only access to shared properties on const meshes2022-07-27T17:36:22ZMartin HeistermannAdd Read-only access to shared properties on const mesheshttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/41Throw exception instead of crashing when using ResourceManager::set_persisten...2022-07-29T14:08:38ZMartin HeistermannThrow exception instead of crashing when using ResourceManager::set_persistent on a property of another meshhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/42Add unit tests for find_half{face,edge}_in_cell2022-07-29T14:42:00ZMartin HeistermannAdd unit tests for find_half{face,edge}_in_cellhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/44Local Topology classes2022-08-18T11:01:18ZMartin HeistermannLocal Topology classesImprove local topology classes from `dev-v3-operators` branch
- [ ] add relabeling/rotation operators:
- [ ] tri: rotate ±2, "change labels to make vertex `x` the `a` vertex instead"
- [ ] tet: flip edge (6 options - but flips of non...Improve local topology classes from `dev-v3-operators` branch
- [ ] add relabeling/rotation operators:
- [ ] tri: rotate ±2, "change labels to make vertex `x` the `a` vertex instead"
- [ ] tet: flip edge (6 options - but flips of non-intersecting edges are equivalent; ab+cd, ac+bd, ad+bc)
- [ ] tet: rotate face (4 faces * 2 options (-1=+2, -2=+1)
- [ ] extend testsMartin HeistermannMartin Heistermannhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/45Add functions to check if input entities are incident.2022-09-07T14:49:04ZHeng LiuAdd functions to check if input entities are incident.e.g. bool is_incident(entity1, entity2), where the entities can be any of VH, EH, HEH, FH, HFH, CH.e.g. bool is_incident(entity1, entity2), where the entities can be any of VH, EH, HEH, FH, HFH, CH.https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/46TopologyKernel::adjacent_halfface_in_cell: Turn HEH argument into EH2022-09-09T12:13:59ZMartin HeistermannTopologyKernel::adjacent_halfface_in_cell: Turn HEH argument into EHKeep a compatibility version taking a HEH, marked as deprecated.Keep a compatibility version taking a HEH, marked as deprecated.https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/47Deprecate n_vertices etc?2022-09-14T13:54:56ZMartin HeistermannDeprecate n_vertices etc?`TopologyKernel::n_{vertices, edges, ...}()` counts include deleted entities that are not garbage collected yet. Uses for this include finding out the maximum index, for property-like structure or translations to other data structures.
...`TopologyKernel::n_{vertices, edges, ...}()` counts include deleted entities that are not garbage collected yet. Uses for this include finding out the maximum index, for property-like structure or translations to other data structures.
In many cases `n_logical_{vertices, ...}()` is the correct choice, when the user is actually interested in the properties of the mesh, e.g. checking if it is empty, face-less etc.
I would like to replace the former functions by something with a new name (hard problem!) and deprecate the old ones.https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/48FileManager (.ovm): Files with only valence-6 cells always identified as hexm...2023-02-01T10:21:40ZMartin HeistermannFileManager (.ovm): Files with only valence-6 cells always identified as hexmeshes[`FileManager::isHexahedralMesh`](https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/blob/master/src/OpenVolumeMesh/FileManager/FileManager.cc#L134-178) uses a very simplistic check to figure out if a file contains a ...[`FileManager::isHexahedralMesh`](https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/blob/master/src/OpenVolumeMesh/FileManager/FileManager.cc#L134-178) uses a very simplistic check to figure out if a file contains a hex mesh: if every cell has valence 6, it must be a hex mesh.
This leads to false positives, not only in the (less common) case of some unusual cells, but a hex mesh which was created and saved as polyhedral mesh, but not using the prescribed halfface order will be read as hex mesh, which causes all sorts of weird issues.
Not sure what the best way to fix this is!https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/49Check Hex half-face order consistency2023-02-01T10:27:44ZMartin HeistermannCheck Hex half-face order consistencyMultiple places define orderings for the half-faces of a hex cell:
- Figure in [doc description + induced_coordsys.png](https://www.graphics.rwth-aachen.de/media/openvolumemesh_static/Documentation/OpenVolumeMesh-Doc-Latest/classOpenVol...Multiple places define orderings for the half-faces of a hex cell:
- Figure in [doc description + induced_coordsys.png](https://www.graphics.rwth-aachen.de/media/openvolumemesh_static/Documentation/OpenVolumeMesh-Doc-Latest/classOpenVolumeMesh_1_1HexahedralMeshTopologyKernel.html]
- ASCII art in [`HexahedralMeshTopologyKernel::check_halfface_ordering`](https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/blob/master/src/OpenVolumeMesh/Mesh/HexahedralMeshTopologyKernel.cc#L159-182)
- Code in [HexahedralMeshTopologyKernel::add_cell(const std::vector<VertexHandle>& _vertices,...)`](https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/blob/master/src/OpenVolumeMesh/Mesh/HexahedralMeshTopologyKernel.hh#L114-134)
- OpenFlipper's [`FileVTKPlugin::addHexaCellToOpenVolumeMesh`](https://gitlab.vci.rwth-aachen.de:9000/OpenFlipper-Free/Plugin-FileVTK/-/blob/master/FileVTK.cc#L532-582)
- Maybe more places.
Are these all equivalent? Check, and definitely improve documentation!
#48 is related.
Internal discussion with PA: https://chat.inf.unibe.ch/group/cgg-coding-questions?msg=xYxP8FNw55kLgkTnshttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/51Hexmesh `add_cell` using vertex handles is surprisingly slow2023-07-04T17:57:29ZMartin HeistermannHexmesh `add_cell` using vertex handles is surprisingly slowprofile and optimize :smile:
Weirdly, in some preliminary tests bottom up incidences make it even *slower*?!
`reorder_incident_halffaces` is very expensive, much of it is `opposite_halfface`, which creates a new vector with the halfed...profile and optimize :smile:
Weirdly, in some preliminary tests bottom up incidences make it even *slower*?!
`reorder_incident_halffaces` is very expensive, much of it is `opposite_halfface`, which creates a new vector with the halfedges - this should be a cheap iterator instead.https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/52MeshChecker to test consistency2023-07-20T18:32:08ZMartin HeistermannMeshChecker to test consistencyLike OpenMesh's MeshChecker; very useful when using the low-level apis and messing up the mesh somehow.Like OpenMesh's MeshChecker; very useful when using the low-level apis and messing up the mesh somehow.https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/53Tetmesh topology kernel: implement vertex_opposite_halfface()2024-01-23T15:05:10ZMartin HeistermannTetmesh topology kernel: implement vertex_opposite_halfface()Go from a halfface of a tet cell to the opposite vertex.
This is currently possible with the local TetTopology, but that's overkill in many cases.
We also already have `halfface_opposite_vertex()` to go from halfface to opposite vertex ...Go from a halfface of a tet cell to the opposite vertex.
This is currently possible with the local TetTopology, but that's overkill in many cases.
We also already have `halfface_opposite_vertex()` to go from halfface to opposite vertex (although the naming is a bit confusing IMHO).
Ideally this would work for tet elements in mixed meshes too, not just in pure tet meshes.https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/54Support more file formats2024-01-23T15:33:45ZMartin HeistermannSupport more file formatsCompare https://github.com/cgg-bern/AlgoHex/issues/13Compare https://github.com/cgg-bern/AlgoHex/issues/13https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/55OVMB: support reading/writing float vertex coordinates2024-02-02T17:29:42ZMartin HeistermannOVMB: support reading/writing float vertex coordinates`vertex_encoding()` always claims `Double`, but `write()` may write floats.`vertex_encoding()` always claims `Double`, but `write()` may write floats.Martin HeistermannMartin Heistermannhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/56Make it easy to write glm::vec props2024-02-02T18:12:51ZMartin HeistermannMake it easy to write glm::vec props- [ ] Ascii writer: At least support it when used in the geometry kernel
- [ ] ovmb: `register_arraylike` won't work, need some type traits here to get dimensionality
- [ ] ovmb: support it in GeometryWriter (including `float` type cf #...- [ ] Ascii writer: At least support it when used in the geometry kernel
- [ ] ovmb: `register_arraylike` won't work, need some type traits here to get dimensionality
- [ ] ovmb: support it in GeometryWriter (including `float` type cf #55)
can we unify geometry and prop writing?Martin HeistermannMartin Heistermannhttps://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/57ovmb: improve error handling2024-02-02T17:33:39ZMartin Heistermannovmb: improve error handlingExample: a mesh that needs garbage collection. Currently we just return a failure code with no further info.
- [ ] make error text available
- [ ] add error code for `NeedsGarbageCollection`
- [ ] an empty (or worse, partial) file is st...Example: a mesh that needs garbage collection. Currently we just return a failure code with no further info.
- [ ] make error text available
- [ ] add error code for `NeedsGarbageCollection`
- [ ] an empty (or worse, partial) file is still written - see if there is a clean platform-independent way to delete the file upon failure in the filename-based interface.https://gitlab.vci.rwth-aachen.de:9000/OpenVolumeMesh/OpenVolumeMesh/-/issues/58`TetrahedralMeshTopologyKernel::split_edge` issues2024-02-05T15:51:14ZMartin Heistermann`TetrahedralMeshTopologyKernel::split_edge` issues- [ ] incident faces without cells are not split into two triangles
- [ ] the `alpha` parameter of `TetrahedralGeometryKernel::split_edge` is interpreted in a counter-intuitive way (to me). Guess we are stuck with this, but we should at ...- [ ] incident faces without cells are not split into two triangles
- [ ] the `alpha` parameter of `TetrahedralGeometryKernel::split_edge` is interpreted in a counter-intuitive way (to me). Guess we are stuck with this, but we should at least document it.