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

78 篇文章 4 订阅

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

 


 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春夜喜雨

稀罕你的喜欢!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值