Пожалуйста, рассмотрите данный мне 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
Таким образом я могу «переработать» вершины, но, очевидно, создается новое лицо. Кто-нибудь знает способ избежать этого?
Любые подсказки приветствуются. Спасибо!