#include <iostream>
#include <boost/polygon/polygon.hpp>
#include <cassert>
namespace gtl = boost::polygon;
using namespace boost::polygon::operators; //lets construct a 10x10 rectangle shaped polygon
typedef gtl::polygon_data<int> Polygon;
typedef gtl::polygon_traits<Polygon>::point_type Point;
typedef gtl::polygon_set_data<int> PolygonSet;
typedef std::vector<Polygon> PolyDataSet; void getOBS(Polygon &oPrboundary, PolyDataSet &pinGroup)
{
PolygonSet o_full_set;
o_full_set.insert(oPrboundary, false); foreach (Polygon o_item, pinGroup)
{
//o_full_set.insert(o_item, true); // Insert As Hole, which works in 1_53 but not in 1_56
o_full_set -= o_item; // works in 1_53 and 1_56
} PolyDataSet o_OBS_set;
o_full_set.get(o_OBS_set); for (int i = ; i < o_OBS_set.size(); ++i)
{
Polygon o_poly = o_OBS_set.at(i);
std::vector<Point> poly_points;
poly_points.insert(poly_points.end(), o_poly.begin(), o_poly.end());
foreach(Point o_pos, poly_points)
{
std::cout << "(" << o_pos.x() << ", " << ") ";
}
std::cout << std::endl;
}
}

如上面代码所示,Boost::polygon库是十分强大的,通过输入一个多边形序列到polygon_set_data,

再调用get成员函数就可以获得这一系列多边形进行合并消除覆盖面积的新多边形序列。

如果是polygon_90_set_data还有get_rectangles函数,可以实现获得合并后的矩形划分,在芯片设计

中可以用来求取矩形的OBS区域。

但是在使用boost::polygon库的过程中发现,如果使用1_53版本,使用insert的方法是可以获得带孔的OBS图形的。

而在1_56版本中却发现,使用insert的效果是“OR”而不是期待的"SUBTRACT",于是如果传入一个大的矩形作为prboundary,

再传入一个在该prboundary中的一个小矩形为PIN,得到的并不是期待的一个带孔的多边形,而是直接得到了prboundary!

o_full_set.insert(o_item, true);

如上图,假设绿色是一个PIN,黑色边框围着的正方形是prboundary区域,那么OBS就是除去PIN的一个环形(带孔)的多边形。

但是使用insert(o_item, true)却并没有得到想要的效果,虽然从介绍上来说:

insert(o_item, true)和“-=”应该具有一样的效果。

在boost社区提交了一个bug:)

https://svn.boost.org/trac/boost/ticket/11575

												

[Boost::Polygon]多边形相减得到新的多边形序列的更多相关文章

  1. [Boost]图形处理库Boost::Polygon

    Background 工作中经师傅指导学习应用到了Boost::Polygon这个库,相对于Boost::Geometry,Polygon出自Intel.抽象于芯片流程,于是更贴近于芯片设计流程应用. ...

  2. Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence

    Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence 使用oracle11g插入数据时遇到这样一个问题: 1 --创建测试表-- 2 CREATE T ...

  3. 谈谈Boost网络编程(2)—— 新系统的设计

    写文章之前.我们一般会想要採用何种方式,是"开门见山",还是"疑问式开头".写代码也有些类似.在编码之前我们须要考虑系统总体方案,这也就是各种设计文档的作用.在 ...

  4. [CareerCup] 7.2 Ants on Polygon 多边形上的蚂蚁

    7.2 There are three ants on different vertices of a triangle. What is the probability of collision ( ...

  5. 【boost】使用lambda表达式和generate_n生成顺序序列

    程序中经常用到顺序序列(0,1,2,3,4,5,6.....),一直羡慕python有range这样的函数,而C++中通常只有用循环来处理这种初始化. 现在,结合boost库lambda(虽然差C++ ...

  6. Java8的新特性,二进制序列转十进制数字

    package kata_007_二进制序列转十进制int; /** * java8 Lambda表达式转换binary序列->十进制数 */ import java.util.ArrayLis ...

  7. C++11 新特性之 序列for循环

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/lr982330245/article/details/30971195 在C++中在C++中for循 ...

  8. C++ GDI图形设备接口

    一.概念 1. GDI:(Graphics Device Interfase)图形设备接口,是一个应用程序与输出设备之间的中介. 一方面,GDI向应用程序提供一个与设备无关的编程环境,另一方面,它又以 ...

  9. Boost程序库完全开发指南——深入C++“准”标准库(第3版)

    内容简介  · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...

随机推荐

  1. 怎么安装MySQL,安装MySQL遇到的一些问题!!!!!!

    简介: 对于初学,我们在安装MySQL时,会出现各种各样的报错,这让我们非常的头痛.那么我来分享一下我在安装的过程中遇到的一些问题吧! 我们在安装MySQL之前,先安装好dotNetFx40_Clie ...

  2. 在Windows下用gSoap实现简单加法实例

    实现一个简单的a+b程序,在服务器端写一个程序,里面包含了a+b的函数,然后通过客户端代码向其发送两个数字,在服务器运算得到结果返回给客户端显示出来. 1.在gSoap的官网上下载文件夹,本人的版本是 ...

  3. CSS 响应式设计

    响应式设计是指在不同分辨率的设备中,网页布局可以自适应的调整.这种弹性化的布局使网站在不同设备中的布局都比较合理,可以为不同终端的用户提供更加舒适的界面和更好的用户体验,其根本理念是使原本 PC 上的 ...

  4. [转]CentOS Yum 命令详解

    总所周知,Redhat和Fedora的软件安装命令是rpm,但是用rpm安 装软件最大的麻烦就是需要手动寻找安装该软件所需要的一系列依赖关系,超级麻烦不说,要是软件不用了需要卸载的话由于卸载掉了某个依 ...

  5. yii2 安装

    php版本必须是php5.4以上.记得配置php环境变量 1.下载https://github.com/yiisoft/yii2-app-advanced 2.php -r "readfil ...

  6. Makefile与shell脚本的区别

    引用博客:Makefile与shell脚本区别 在Makefile可以调用shell脚本,但是Makefile和shell脚本是不同的.本文试着归纳一下Makefile和shell脚本的不同. 1.s ...

  7. iOS 推荐博客

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Franz Fang链接:http://www.zhihu.com/question/20264108/answer/3026 ...

  8. 转:Redis Geo: Redis新增位置查询功能

    原文来自于:http://www.infoq.com/cn/news/2015/07/redis-geo 移动互联网增进了人与人之间的联系,其中基于位置信息的服务(Location Based Ser ...

  9. asp.net viewstate的模拟登陆

    其实 VIEWSTATE 不用太在意,倒是 JTCookieID 需要注意,这个才应该是服务器上用来维护 Session 的那个 Cookie.所以,你用 httpclient 的时候,不能上来就直接 ...

  10. bootstrap兼容IE8 解决办法

    bootstrap有使用CSS3,所以ie9以下浏览器不会很顺畅.IE9以下的兼容性不是很好.IE本身就是怪胎,就搞一些和外界标准不一致.搞得web开发考虑这考虑那的兼容性,蛋疼! 基本上css3的没 ...