【发布时间】:2010-06-05 16:40:13
【问题描述】:
我正在使用 GPC Polygon Clipping lib 并希望以编程方式创建多边形。我只看到如何从文件创建一个的代码。如何在我的代码中进行初始化?
【问题讨论】:
我正在使用 GPC Polygon Clipping lib 并希望以编程方式创建多边形。我只看到如何从文件创建一个的代码。如何在我的代码中进行初始化?
【问题讨论】:
从您的链接中更好地阅读,找到doc 页面并阅读;特别是 gpc_add_contour 函数可能是您需要的。 struct gpc_vertex_list 包含一个指向 gpc_vertex-s 的指针和顶点数,是必须填写的。like
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 loops)是你的朋友(反正我不会安装gpc来做,所以我的代码可以 em>错了)。建议的代码 sn-p 应该创建一个正方形。其他几个具有相同 &p 但不同顶点列表的gpc_add_countour 可用于创建更复杂的多边形,当然可以将 vl 更改为在开始时具有更复杂的多边形。如果您希望定义的轮廓成为当前 (p) 多边形中的“洞”,则第三个参数应为 1。
【讨论】:
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);
【讨论】: