OpenMe sh: Расширить меня sh, используя ранее удаленные элементы - PullRequest
0 голосов
/ 10 июля 2020

Пожалуйста, рассмотрите данный мне sh в OpenMe sh, который ранее был уничтожен, но сборщик мусора до сих пор не вызван. Результатом упрощения является то, что ряд вершин помечены как удалено .

Теперь я хочу расширить me sh, добавив новые элементы. Идея состоит не в том, чтобы просто добавлять новые элементы, а в том, чтобы сначала повторно использовать старые, поскольку их память по-прежнему выделяется, хотя они больше не нужны. Поэтому вместо:

VertexHandle vh1 = mesh.add_vertex(Point(1, 0, 0));
VertexHandle vh2 = mesh.add_vertex(Point(0, 1, 0));
VertexHandle vh3 = mesh.add_vertex(Point(0, 0, 1));
FaceHandle   fh  = mesh.add_face(vh1, vh2, vh3);

я бы предпочел что-то вроде:

assert(mesh.status(vh1).deleted() && mesh.status(vh2).deleted() && mesh.status(vh3).deleted());

mesh.status(vh1).set_deleted(false);  // reuse old vertices by 'undeleting' them and ...
mesh.status(vh2).set_deleted(false);
mesh.status(vh3).set_deleted(false);

mesh.set_point(vh1, Point(1, 0, 0));  // ... moving them to their new positions
mesh.set_point(vh2, Point(0, 1, 0));
mesh.set_point(vh3, Point(0, 0, 1));

FaceHandle fh = mesh.add_face(vh1, vh2, vh3);  // TODO needs improvement

Таким образом я могу «переработать» вершины, но, очевидно, создается новое лицо. Кто-нибудь знает способ избежать этого?

Любые подсказки приветствуются. Спасибо!

...