首页 > 其他 > 详细

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

时间:2015-04-23 23:34:46      阅读:1524      评论:0      收藏:0      [点我收藏+]

使用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 转载请标明来源)

 


 

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

原文:http://blog.csdn.net/chunyexiyu/article/details/45227595

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!