Я мог читать и писать очень простые файлы .off в OpenMesh, но это не позволяет мне хорошо видеть ребра, соединяющие вершины моей треугольной сетки, когда я использую программу Geomview для визуализации сетки. Я понял, как изменить файл .off, чтобы окрасить мои треугольники, используя этот формат: http://www.geomview.org/docs/html/OFF.html, и Geomview принимает то, как я пишу эти файлы. Однако я не могу изменить функцию read_mesh в OpenMesh, чтобы она правильно читала все грани треугольника.
Я попытался изменить функции read_mesh и write_mesh, используя класс OpenMesh :: IO :: Options из https://www.openmesh.org/media/Documentations/OpenMesh-Doc-Latest/a00212.html и что я прочитал из исходного кода Options.hh. Вот что я пытался сделать:
....
#include <OpenMesh/Core/IO/Options.hh>
....
int main () {
MyMesh mesh;
...
OpenMesh::IO::Options ops(OpenMesh::IO::Options::FaceColor);
ops += OpenMesh::IO::Options::ColorFloat;
std::cout << ops.color_is_float() << std::endl; //returns true
std::cout << ops.face_has_color() << std::endl; //returns true
if (!OpenMesh::IO::read_mesh(mesh, argv[2], ops, true)) {
//when run, it does not enter this if statement
std::cerr << "Error: cannot read mesh from << argv[2] << std::endl;
}
//stuff done to mesh
std::streamsize str = 5;
if (!OpenMesh::IO::write_mesh(mesh, argv[3], ops, str) {
//again, it does not enter this if statement
std::cerr << "Error ..." << std::endl;
}
Я смог скомпилировать программу без каких-либо ошибок, и она работает. Однако функция read_mesh не завершает чтение файла .off должным образом.
Вот более простая версия моего файла .off:
OFF
30 40 0
0 0 0
0 1 0
0 2 0
... more vertices
Тогда у меня есть два способа написания треугольных граней:
Способ 1)
#_of_vertices v0 v1 v2 RGB[0] RGB[1] RGB[2]
3 0 1 6 1.0 0.0 0.0
... more faces
Способ 2)
#_of_vertices v0 v1 v2 #_of_color_components RGB[0] RGB[1] RGB[2]
3 0 1 6 3 1.0 0.0 0.0
.. more faces
Для метода 1 read_mesh читает только первую грань треугольника. Он попадает в значения с плавающей точкой для цвета треугольников, и я предполагаю, что не знает, что с ними делать, поэтому просто перестает читать значения. Потому что, когда он записывает сетку в отдельный файл, он перечисляет только одну грань и обновляет расположение трех вершин этого конкретного триггера.
Для метода 2 я получаю кучу ошибок «PolyMeshT :: add_face: complex vertex».
Я, конечно, не корректирую функцию read_mesh должным образом, и мне было интересно, есть ли у кого-нибудь руководство для меня.
Задача ещё не решена.
Других решений пока нет …