使用 Clipper 库的一些问题记录

前言:
最近一直在使用Clipper库做一些图形裁剪相关的工作,发现这个库比较好用,使用过程中遇到了一些问题,现在记录一下,方便自己和他人。

首先感谢以下博文的帮助:
http://blog.csdn.net/ryfdizuo/article/details/40682639
https://fhln.blog.ustc.edu.cn/?p=302

还有官方的文档:
http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/_Body.htm
http://www.angusj.com/delphi/clipper.php


使用过程中主要遇到以下两个问题:
一、裁剪的必要条件
二、存储裁剪后数据的solution类型—-PolyTree的弯路

在说正事之前还是要说明一点,本人不是编程科班出身,基础知识非常薄弱,可能看到和遇到的问题都很浅显,欢迎大佬批评指正,欢迎小白交流,我也只是记录一下心得,毕竟过几个月再看自己当时写的代码,谁也不知道是什么天书。配置使用就不谈了,官网都有,如果看不懂说明这篇心得对你没什么用哦。


正文:
一、裁剪的必要条件
利用clipper对象的Execute方法进行图形交互操作,我主要用了ctIntersection,也就是求交。
这里主要想说AddPaths过程中的两个对象的性质,要做相交(裁剪),需要两个图形,姑且把用来裁剪的叫剪刀,被裁剪的叫白纸。剪刀和白纸都有bClosed属性,也就是说明该图形是封闭图形还是开放图形,Clipper库的规定是只能用封闭的剪刀,对白纸不做要求,但如果是裁剪开放的白纸,需要PolyTree来做solution的容器。这也就引出了下一个问题,在用PolyTree时遇到的一些弯路。

//Clipper类中的AddPaths方法
bool AddPaths(const Paths &ppg, PolyType polyType, bool closed);

在向Clipper对象加入剪刀或白纸时需要指定bool closed参数,即上文提到的问题。这个问题有什么影响呢,简单来说,用封闭剪刀去裁剪封闭白纸得到的是一个封闭的图形块,用封闭剪刀去裁剪开放白纸得到的是一些线段。明白这个就可以根据自己的需求解决一些问题啦。

二、PolyTree的弯路
说是弯路,也只是自己没看清路。其实这些问题如果你有时间把Clipper的文档仔细读一遍,就迎刃而解了,关键是大部分同志只是想利用其中很少的功能迅速的解决问题,比如我。这就免不了遇到一些问题,走弯路。
上文说了裁剪的条件,那么我是需要得到折线段的那一类,也就是封闭剪刀(当然是必须封闭)去裁剪开放的白纸(也就是折线段的集合)。在这里不想说那些孔洞啊,回绕方式什么的,只是想提醒,PolyTree这个类型就是用来接受我这种开放裁剪需求的,但是!!你需要看一下他的结构,因为他里面的点不是按顺序存储的,其实是父子关系,遍历的时候要注意,我就在这里犯了错。还有一点,PolyTree的Clear方法你也要看一下,这个方法在Cipper调用Execute方法之前会自动执行,有时候会报错。

主要内容就是这些了,欢迎大家有更多关于Clipper的问题来讨论,共同进步。

### 回答1: clipper是一个开源的轻量级几何运算,用于处理多边形和多边形集合的计算和操作。它是用C++编写的,提供了一系列的功能函数,可以进行多边形的剪裁、合并、点位置判断等操作。 clipper的中文帮助文档是对该使用方法和函数说明的中文文档。它包含了中各个功能函数的详细说明,以及示例代码和使用注意事项。通过这个文档,我们可以了解到clipper的基本用法和常用函数,从而能够更好地利用该进行多边形操作的开发工作。 这个文档通常包括以下内容: 1. 的安装和引用:介绍如何下载和安装clipper,并在项目中引用该。 2. 基本概念和对象:介绍clipper中的基本概念和对象,如多边形、点、路径等。 3. 函数说明:详细介绍每个功能函数的参数和返回值,以及函数的作用和使用方法。 4. 示例代码:提供一些示例代码,展示如何使用clipper进行多边形操作,如两个多边形的剪裁、多边形的合并等。 5. 常见问题解答:列出一些常见问题和解答,帮助用户理解和解决使用clipper时可能遇到的问题。 通过阅读clipper的中文帮助文档,我们可以更好地了解和使用clipper,从而节省开发时间和提高开发效率。它是我们学习和使用clipper的重要参考资料。 ### 回答2: Clipper是一个用于进行多边形剪裁的计算机视觉。它提供了一系列功能来处理多边形的交并运算,广泛应用于计算机图形学、计算机辅助设计等领域。 Clipper的中文帮助文档主要包括以下内容: 1. 的安装和使用:文档提供了关于如何安装Clipper以及引入文件的详细说明。同时,它还介绍了常用的函数和类,以及它们的使用方法。 2. 多边形定义和操作:文档详细解释了如何定义和操作多边形对象。它包括了创建多边形对象的方法,如何添加和删除多边形边界点,以及如何修改多边形边界点的位置。 3. 多边形剪裁算法:文档详细介绍了Clipper使用的多边形剪裁算法。它解释了剪裁的基本原理,例如如何通过计算多边形的交集和并集来实现剪裁效果。 4. 剪裁结果的可视化:文档介绍了如何将剪裁结果可视化显示。它提供了使用Clipper提供的函数来绘制剪裁后的多边形,并提供了一些实例代码和示意图来帮助理解。 总的来说,Clipper中文帮助文档详细介绍了Clipper的安装和使用方法,包括多边形定义和操作、多边形剪裁算法以及剪裁结果的可视化。这些帮助文档对于使用Clipper进行多边形剪裁的开发者和研究者都是非常有用的参考资料。 ### 回答3: Clipper是一个为Python编程语言提供的工具,用于进行多边形裁剪操作。它提供了一组函数和方法,可以对传入的多边形进行裁剪、交叉、合并等操作,非常方便。 Clipper的中文帮助文档提供了详细的说明和示例,帮助使用者快速了解和使用。文档以简洁明了的方式介绍了Clipper的基本概念、安装方法和使用方法。 在中文帮助文档中,首先介绍了Clipper的基本概念,包括介绍了多边形、路径和裁剪操作的定义和特点。然后,详细介绍了Clipper的安装方法,包括使用pip安装和手动安装两种方式,并提供了相关的示例代码。 接下来,中文帮助文档详细介绍了Clipper中的每个函数和方法的使用方法和参数说明,并提供了相关的示例代码进行说明。文档使用清晰的语言和图示,帮助使用者理解和掌握各个函数和方法的功能和用法。 最后,中文帮助文档提供了一些常见问题和解决方法的介绍,以及一些示例和案例的使用说明,帮助使用者更好地应用Clipper解决实际问题。 通过阅读Clipper的中文帮助文档,使用者可以全面了解和学习Clipper使用方法,并能够灵活地应用它进行多边形裁剪等操作。文档内容详实、易懂,为使用者提供了便捷的学习和参考资料。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值