跳转到主要内容

Cython封装了Angus Johnson的Clipper库的C++翻译版本(版本6.4.2)

项目描述

关于

https://badge.fury.io/py/pyclipper.svg https://github.com/fonttools/pyclipper/workflows/Build%20+%20Deploy/badge.svg

Pyclipper 是一个 Cython 封装,它公开了 Angus Johnson 的 Clipper 库(版本 6.4.2)的 C++ 转换版本的公共函数和类。

Pyclipper 版本在 Linux(Ubuntu 14.04,x64)和 Windows(8.1,x64)上使用 Python 2.7 和 3.4 进行了测试。

源代码可在 GitHub 上找到。该软件包已发布在 PyPI 上。

关于 Clipper

Clipper - 一个开源免费库,用于裁剪和偏移线条和多边形。

Clipper 库执行线条和多边形的裁剪 - 交集、并集、差集和异或,以及线条和多边形的偏移。该库基于 Vatti 的裁剪算法。

Angus Johnson 的 Clipper 库

安装

依赖项

Cython 依赖项是可选的。使用 Cython 生成的 Cpp 源代码包含在版本中。

关于 setup.py 的说明

setup.py 在两种模式下运行,这些模式基于项目根目录中是否存在 dev 文件。

  • dev 存在时,Cython 将用于编译 .pyx 源文件。这是 开发模式(您在 git 仓库中获得的方式)。

  • dev 不存在时,将使用 C/C++ 编译器编译 .cpp 源文件(在开发模式中准备)。这是分发模式(您在 PyPI 上获得的方式)。

这样,该软件包可以在没有或与 Cython 不兼容的版本的情况下使用。

这个想法来自 Matt Shannon 的 bandmat 库

从 PyPI

不需要 Cython。

pip install pyclipper

从源代码

需要 Cython。

克隆存储库

git clone git@github.com:fonttools/pyclipper.git

安装

python setup.py install

在修改 .pyx 文件后,使用 Cython 编译

python setup.py build_ext --inplace

Clipper 预处理器指令

Clipper 可以使用以下预处理器指令编译:use_int32use_xyzuse_linesuse_deprecated。在这些指令中,use_int32use_lines 可以与 Pyclipper 一起使用。

  • use_int32 - 当启用时,使用 32 位整数而不是 64 位整数。这可以提高性能,但坐标值限制在 +/- 46340 范围内。在 Pyclipper 中,此指令默认为 禁用

  • use_lines - 启用线条裁剪。对性能略有影响。在 Pyclipper 中,此指令默认为 启用(自版本 0.9.2b0 以来)。

如果您想更改这些设置,请克隆此存储库并更改 define_macros 集合(setup.py,pyclipper 扩展定义)。添加类似 ('use_int32', 1) 的设置以启用指令,或删除该设置以禁用它。之后,您需要重新构建软件包。

如何使用

此封装库试图遵循原始库的命名约定。

  • ClipperLib 命名空间由 pyclipper 模块表示,

  • ClipperClipperOffset -> PyclipperPyclipperOffset

  • 当 Clipper 重载具有不同参数数量或不同类型的函数时(例如,Clipper.Execute,一个函数填充路径列表,另一个 PolyTree),则成为 Pyclipper.ExecutePyclipper.Execute2

基本裁剪示例(基于Angus Johnson的Clipper库

import pyclipper

subj = (
    ((180, 200), (260, 200), (260, 150), (180, 150)),
    ((215, 160), (230, 190), (200, 190))
)
clip = ((190, 210), (240, 210), (240, 130), (190, 130))

pc = pyclipper.Pyclipper()
pc.AddPath(clip, pyclipper.PT_CLIP, True)
pc.AddPaths(subj, pyclipper.PT_SUBJECT, True)

solution = pc.Execute(pyclipper.CT_INTERSECTION, pyclipper.PFT_EVENODD, pyclipper.PFT_EVENODD)

# solution (a list of paths): [[[240, 200], [190, 200], [190, 150], [240, 150]], [[200, 190], [230, 190], [215, 160]]]

基本偏移示例

import pyclipper

subj = ((180, 200), (260, 200), (260, 150), (180, 150))

pco = pyclipper.PyclipperOffset()
pco.AddPath(subj, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)

solution = pco.Execute(-7.0)

# solution (a list of paths): [[[253, 193], [187, 193], [187, 157], [253, 157]]]

Clipper库使用整数而不是浮点值来保持数值稳健性。如果您需要缩放多边形的坐标,该库提供了辅助函数scale_to_clipper()scale_from_clipper()以实现这一点。

从Pyclipper 0.9.3b0 迁移

在Pyclipper的先前版本(0.9.3b0)中,可以使用SCALING_FACTOR变量自动缩放多边形。由于与浮点运算相关的转换不精确,这一功能在版本1.0.0中被移除。这样,现在该库提供了基础库的原始数值稳健性。

SCALING_FACTOR的移除会破坏向下兼容性。有关解释和迁移帮助,请参阅https://github.com/fonttools/pyclipper/wiki/Deprecating-SCALING_FACTOR

作者

  • Clipper库由Angus Johnson编写,

  • 此包装器最初由Maxime Chalton编写,

  • 为了使其与版本5兼容而进行的修改由Lukas Treyer编写,

  • 为了使其与版本6.2.1和PyPI软件包兼容而进行的修改由Gregor Ratajc编写,

  • SCALING_FACTOR的移除和文档的增加由Michael Schwarz (@Feuermurmel)完成,

  • 错误修复:sympy.Zero不是集合,由Jamie Bull (@jamiebull1)完成,

  • 为轮包的持续构建集成了Travis CI和Appveyor CI,由Cosimo Lupo (@anthrotype)完成。

该软件包由Cosimo Lupo (@anthrotype)维护。

许可证

  • Pyclipper可在MIT许可下使用。

  • 核心Clipper库可在Boost软件许可下使用。免费软件,适用于开源和商业应用程序。

变更日志

1.1.0

  • 更新了内嵌的Clipper库到版本6.4.2。

1.0.6

  • 添加了对Python 3.6的支持。

1.0.3

  • 添加了Travis CI和Appveyor CI以构建轮包(感谢@anthrotype)

1.0.2

  • 错误修复:sympy.Zero被识别为集合(感谢@jamiebull1)

1.0.0

  • (破坏向下兼容性)移除SCALING_FACTOR(感谢@Feuermurmel)

0.9.3b0

  • 将SCALING_FACTOR应用于相关函数参数和类属性

  • 重构测试

0.9.2b1

  • 错误修复:修复了PyPolyNode.IsHole属性的设置

0.9.2b0

  • 默认启用预处理器指令use_lines

  • 错误修复:PyPolyNode.Contour现在是一个路径,而不是之前的多路径列表。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解更多关于 安装软件包 的信息。

源分布

pyclipper-1.3.0.post5.tar.gz (164.7 kB 查看哈希值)

上传时间

构建分布

pyclipper-1.3.0.post5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (135.2 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ x86-64

pyclipper-1.3.0.post5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (138.0 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.12+ x86-64

pyclipper-1.3.0.post5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (138.0 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.12+ x86-64

pyclipper-1.3.0.post5-cp312-cp312-win_amd64.whl (108.2 kB 查看哈希值)

上传时间 CPython 3.12 Windows x86-64

pyclipper-1.3.0.post5-cp312-cp312-win32.whl (98.8 kB 查看哈希值)

上传时间 CPython 3.12 Windows x86

pyclipper-1.3.0.post5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (966.6 kB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ x86-64

pyclipper-1.3.0.post5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (947.2 kB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ ARM64

pyclipper-1.3.0.post5-cp312-cp312-macosx_10_9_x86_64.whl (145.9 kB 查看哈希值)

上传时间 CPython 3.12 macOS 10.9+ x86-64

pyclipper-1.3.0.post5-cp312-cp312-macosx_10_9_universal2.whl (278.1 kB 查看哈希值)

上传时间 CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

pyclipper-1.3.0.post5-cp311-cp311-win_amd64.whl (108.3 kB 查看哈希值)

上传时间 CPython 3.11 Windows x86-64

pyclipper-1.3.0.post5-cp311-cp311-win32.whl (99.4 kB 查看哈希值)

上传时间 CPython 3.11 Windows x86

pyclipper-1.3.0.post5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (971.5 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ x86-64

pyclipper-1.3.0.post5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (952.6 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ ARM64

pyclipper-1.3.0.post5-cp311-cp311-macosx_10_9_x86_64.whl (146.9 kB 查看哈希值)

上传时间 CPython 3.11 macOS 10.9+ x86-64

pyclipper-1.3.0.post5-cp311-cp311-macosx_10_9_universal2.whl (279.2 kB 查看哈希值)

上传时间 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

pyclipper-1.3.0.post5-cp310-cp310-win_amd64.whl (108.2 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86-64

pyclipper-1.3.0.post5-cp310-cp310-win32.whl (99.2 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86

pyclipper-1.3.0.post5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (926.7 kB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ ARM64

pyclipper-1.3.0.post5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (908.3 kB 查看哈希值)

上传时间: CPython 3.10 manylinux: glibc 2.12+ x86-64

pyclipper-1.3.0.post5-cp310-cp310-macosx_10_9_x86_64.whl (145.7 kB 查看哈希值)

上传时间: CPython 3.10 macOS 10.9+ x86-64

pyclipper-1.3.0.post5-cp310-cp310-macosx_10_9_universal2.whl (277.4 kB 查看哈希值)

上传时间: CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

pyclipper-1.3.0.post5-cp39-cp39-win_amd64.whl (108.6 kB 查看哈希值)

上传时间: CPython 3.9 Windows x86-64

pyclipper-1.3.0.post5-cp39-cp39-win32.whl (99.4 kB 查看哈希值)

上传时间: CPython 3.9 Windows x86

pyclipper-1.3.0.post5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (925.3 kB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ ARM64

pyclipper-1.3.0.post5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl (674.2 kB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.5+ x86-64

pyclipper-1.3.0.post5-cp39-cp39-macosx_10_9_x86_64.whl (146.3 kB 查看哈希值)

上传时间: CPython 3.9 macOS 10.9+ x86-64

pyclipper-1.3.0.post5-cp39-cp39-macosx_10_9_universal2.whl (278.3 kB 查看哈希值)

上传时间: CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

pyclipper-1.3.0.post5-cp38-cp38-win_amd64.whl (108.7 kB 查看哈希值)

上传时间: CPython 3.8 Windows x86-64

pyclipper-1.3.0.post5-cp38-cp38-win32.whl (99.5 kB 查看哈希值)

上传时间: CPython 3.8 Windows x86

pyclipper-1.3.0.post5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (932.3 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARM64

pyclipper-1.3.0.post5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (682.3 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.5+ x86-64

pyclipper-1.3.0.post5-cp38-cp38-macosx_10_9_x86_64.whl (146.9 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.9+ x86-64

pyclipper-1.3.0.post5-cp38-cp38-macosx_10_9_universal2.whl (279.5 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

pyclipper-1.3.0.post5-cp37-cp37m-win_amd64.whl (108.7 kB 查看哈希值)

上传于 CPython 3.7m Windows x86-64

pyclipper-1.3.0.post5-cp37-cp37m-win32.whl (99.0 kB 查看哈希值)

上传于 CPython 3.7m Windows x86

pyclipper-1.3.0.post5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (912.2 kB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ ARM64

pyclipper-1.3.0.post5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (680.9 kB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.5+ x86-64

pyclipper-1.3.0.post5-cp37-cp37m-macosx_10_9_x86_64.whl (146.8 kB 查看哈希值)

上传于 CPython 3.7m macOS 10.9+ x86-64

pyclipper-1.3.0.post5-cp36-cp36m-win_amd64.whl (120.1 kB 查看哈希值)

上传于 CPython 3.6m Windows x86-64

pyclipper-1.3.0.post5-cp36-cp36m-win32.whl (105.6 kB 查看哈希值)

上传于 CPython 3.6m Windows x86

pyclipper-1.3.0.post5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (898.8 kB 查看哈希值)

上传于 CPython 3.6m manylinux: glibc 2.17+ ARM64

pyclipper-1.3.0.post5-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (663.4 kB 查看哈希值)

上传于 CPython 3.6m manylinux: glibc 2.5+ x86-64

pyclipper-1.3.0.post5-cp36-cp36m-macosx_10_9_x86_64.whl (142.5 kB 查看哈希值)

上传于 CPython 3.6m macOS 10.9+ x86-64

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面