使用GPC分解多边形样例(Generic Polygon Clipper)

使用GPC分解多边形

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)

 

GPC: Generic Polygon Clipper

GPC支持分解多边形、多边形求差集、交集,异或、并集
  GPC_DIFF,                         /* Difference                        */
  GPC_INT,                          /* Intersection                      */
  GPC_XOR,                          /* Exclusive or                      */
  GPC_UNION                         /* Union                             */

使用起来是比较高效的,但因为使用c写的,语法结构和我们通常C++的略有不同,直接看接口实现的话会不适应。
因为其并未提供使用样例,所以在此写了一个简单分解多边形样例,有兴趣的可以参考一下

inline gpc_vertex BuildVertex(double x, double y)
{
 gpc_vertex vertex; 
 vertex.x = x; 
 vertex.y = y; 
 return vertex;
}
void TestGPC()
{
 // 设定一个形状,使用GPC拆分成三角形
 gpc_vertex_list vertextList;
 vertextList.num_vertices = 5;
 std::vector<gpc_vertex> vecVertex;
 vecVertex.push_back(BuildVertex(10.0, 10.0));
 vecVertex.push_back(BuildVertex(-10.0, 10.0));
 vecVertex.push_back(BuildVertex(-10.0, -10.0));
 vecVertex.push_back(BuildVertex(10.0, -10.0));
 vecVertex.push_back(BuildVertex(20, 0));
 vertextList.vertex = &(vecVertex[0]);
 gpc_polygon myPolygon;
 myPolygon.num_contours= 1;
 myPolygon.hole= NULL;
 myPolygon.contour= &vertextList;
 // 获取分解后的三角形或四边形
 gpc_tristrip tristrip;
 tristrip.num_strips = 0;
 tristrip.strip = NULL;
 gpc_polygon_to_tristrip(&myPolygon, &tristrip);
 // 存储分解后的三角形或四边形: 分解后的三角形是连续接壤的 <0,1,2><1,2,3><3,4,5>...
 std::vector< std::vector<gpc_vertex> > vecTrisArray;
 std::vector<gpc_vertex> vecTris;
 for (int i=0; i<tristrip.num_strips; i++)
 {
  for (int j=0; j<tristrip.strip[i].num_vertices; j++)
  {
   vecTris.push_back(tristrip.strip[i].vertex[j]);
  }
  vecTrisArray.push_back(vecTris);
 }
 // 释放内存
 gpc_free_tristrip(&tristrip);
}

 

gpc下载地址:http://www.cs.man.ac.uk/~toby/alan/software/

 

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)

 


 

你可能感兴趣的:(generic,clip,polygon,分解多边形)