Я строю программу, которая выводит сложную сетку объекта. Чтобы уменьшить количество смежных многоугольников, обращенных в одном направлении, я решил использовать Boost :: Polygon. Теперь у меня проблема — во-первых, программа не хочет выводить правильные данные трапеций, что было обещано в документации (или, возможно, я делаю это неправильно). Во-вторых, библиотека Boost также затрудняет представление polygon_set_data (набор полигонов с отверстиями) в виде набора простых полигонов. Я хотел бы получить рабочее решение — сначала я добавляю простые полигоны (без дырок) вместе в тип boost :: polygon_set, после этого (при условии, что Boost вычислил все операции и у меня есть несколько больших полигонов), я хочу получить простой boost :: данные многоугольника.
#include "SomeLibrary.h"#include <boost/polygon/polygon.hpp>
#include <cassert>
using namespace boost::polygon::operators;
using namespace boost::polygon;
using namespace std;typedef point_data<float> point;
typedef polygon_set_data<float> polygon_set;
typedef polygon_with_holes_data<float> polygon;
typedef pair<point, point> edge;void FracturePolygon::Dissolve() {
polygon_set BPolygon;
for (auto p : OutMesh.Faces()) { //p is simple polygon data, list of vertices
vector<point> pts;
for (int i = 0; i < p.NumVertices(); i++) {
auto v = InPolygon.MapTo2D(p.Vertex(i)); //i get 2d point data
pts.push_back(point(v.x, v.y)); //now i have boost::point data
}
polygon poly;
set_points(poly, pts.begin(), pts.end()); //i get boost::polygon type
BPolygon += poly; //i add this simple polygon to polygon_set container
}
//now i expect some magic which will give me list of polygons from polygon_set type.
...
}
Задача ещё не решена.
Других решений пока нет …