GPC Polygon Initialization

Я использую библиотеку GPC Polygon Clipping и хочу создать полигон программно. Я вижу только код для его создания из файла. Как я могу сделать инициализацию в моем коде?

2 ответа

gpc_polygon subject;
int w = 100, h = 100, verticesCnt = 30;

//setup a gpc_polygon container and fill it with random vertices ...
subject.num_contours = 1;
subject.hole = 0;
subject.contour = new gpc_vertex_list; //ie just a single polygon here
subject.contour->num_vertices = verticesCnt;
subject.contour->vertex = new gpc_vertex [verticesCnt];
for (i = 0; i < verticesCnt; i++){
    subject.contour[0].vertex[i].x = random(w);
    subject.contour[0].vertex[i].y = random(h);
}

//do stuff with it here, then ...

gpc_free_polygon(&subject);

Читайте лучше по вашей ссылке, найдите страницу документации и прочитайте; особенно gpc_add_contour Функция, скорее всего, то, что вам нужно. Структура gpc_vertex_list содержит указатель на gpc_vertex-s и номер вершины, и это то, что вы должны заполнить.


gpc_polygon p = {0, NULL, NULL}; // "void" polygon
gpc_vertex v[] = { {0.0, 0.0}, {10.0, 0.}, {10.0, 10.10}, {0.0, 10.0} };
gpc_vertex_list vl = {
  4, v
};
//...
gpc_add_contour(&p, &vl, 0);

Документ не слишком понятен, но вы можете вывести его из употребления, и тестирование (циклы try-error) - ваш друг (я все равно не буду устанавливать gpc, поэтому мой код может быть неправильным). Предлагаемый фрагмент кода должен создать квадрат. Несколько других gpc_add_countour с тем же &p, но другим списком вершин можно использовать для создания более сложного многоугольника, и, конечно же, можно изменить vl, чтобы вначале иметь более сложный многоугольник. Третий параметр должен быть равен 1, если вы хотите, чтобы определенный контур был "дырой" в текущем (p) многоугольнике.

Другие вопросы по тегам