OpenVolumeMesh issueshttps://gitlab.vci.rwth-aachen.de:9000/groups/OpenVolumeMesh/-/issues2024-02-05T15:51:14Zhttps://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.https://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/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/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/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/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/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/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/50Implement std::hash for handles2023-03-31T10:17:32ZMartin HeistermannImplement std::hash for handlesuse case: use handles as keys in std::unordered_mapuse case: use handles as keys in std::unordered_maphttps://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/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/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/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/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/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/43OVMB float endianness2022-08-18T10:44:58ZMartin HeistermannOVMB float endiannessApparently float byte order can also be different between machines! Make sure we always save as little-endian.Apparently float byte order can also be different between machines! Make sure we always save as little-endian.Martin HeistermannMartin Heistermannhttps://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/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/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/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.