用于创建/导入/合并 GDSII 文件的 Python 模块。
项目描述
# GDSPY 自述文件
[](http://www.boost.org/LICENSE_1_0.txt ) [](https://gdspy.readthedocs.io/en/stable/ ?badge=stable) [](https://github.com/heitzmann/gdspy/actions/workflows/testing.yml ) []( https://ci.appveyor.com/project/heitzmann/gdspy )[](https://github.com/heitzmann/gdspy/releases )
Gdspy 是一个 Python 模块,用于创建和操作 GDSII 流文件。包括用于创建复杂 CAD 布局的主要功能:
基于裁剪算法的多边形布尔运算(AND、OR、NOT、XOR)
多边形偏移(多边形的向内和向外重新缩放)
大型阵列集的高效多边形内点解决方案
Gdspy 还包括一个简单的布局查看器。
Gdspy的典型应用在电子芯片设计、平面光波电路设计和机械工程领域。
## Gdspy 的未来
在尝试提高 Gdspy 对大型布局的性能时,我们最终得出结论,实现目标的最佳方法是将库的关键部分重写为 C 扩展。事实证明,除了明显的函数之外,方法调用由于它引入的开销而对性能有很大影响。最好的解决方案是将整个项目重新设计为一个带有薄 Python 包装器的 C++ 库:因此诞生了 [Gdstk,GDSII 工具包]( https://github.com/heitzmann/gdstk )。
因此,1.6 版将是 Gdspy 的最后一个主要版本,开发只专注于错误修复。鼓励用户从 Gdspy 迁移到 Gdstk:虽然他们的 API 不是 100% 兼容,但新模块应该足够熟悉以允许快速转换。
## 安装
### 依赖:
[Python]( https://www.python.org/ )(测试版本为 2.7、3.6、3.7 和 3.8)
[Numpy]( http://numpy.scipy.org/ )
C 编译器(仅在从源代码构建时才需要)
Tkinter(可选:LayoutViewer GUI 需要)
[Sphinx]( https://www.sphinx-doc.org/ )(可选:构建文档)
### Linux / OS X
选项 1:使用 [pip]( https://docs.python.org/3/installing/ ):
`sh python -m pip install --user gdspy`
选项 2:从 [github]( https://github.com/heitzmann/gdspy ) 下载源代码并使用以下命令构建/安装:
`sh python setup.py install`
### 窗户
首选选项是从 [此处]( https://github.com/heitzmann/gdspy/releases )安装预编译的二进制文件。
也可以通过pip安装和从源代码构建,但编译 C 扩展模块需要适当的 [构建环境]( https://wiki.python.org/moin/WindowsCompilers )。
## 文档
完整的文档可在 [此处]( http://gdspy.readthedocs.io/ ) 获得。
源文件可以在docs目录中找到。
## 支持
通过 [通过 PayPal 捐赠]( https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=JD2EUE2WPPBQQ )帮助支持 Gdspy 开发
## 变更历史
### 版本 1.6.12(2022 年 6 月 2 日) * 在Cell.get_texttypes中修复。* 允许标签通过get_labels继承转换。
### 版本 1.6.11(2022 年 1 月 14 日) * 修复Cell.write_svg中缺少引用时的问题。* Cell.remove_polygons的速度改进(感谢 Troy 的贡献)。
### 版本 1.6.10(2021 年 11 月 14 日)* 在Cell.get_polygons中修复
### 版本 1.6.9(2021 年 9 月 23 日) * 修复了具有指定图层和数据类型的Cell.get_polygons 。* 读取 GDSII 文件时出现重复单元格的错误。
### 版本 1.6.8(2021 年 8 月 2 日) * 修复了冻结操作的复杂几何图形的布尔值。
### 版本 1.6.7(2021 年 7 月 14 日) * 修复了具有自相交孔和孔水平边缘的错误的布尔值。* 修复警告信息中的错误。
### 版本 1.6.6(2021 年 6 月 9 日) * 修复 Path.smooth 中的错误,找不到_hobby函数。* 允许在 SVG 输出中指定精度。
### 版本 1.6.5(2021 年 6 月 8 日) * 支持 GDSII 文件,末尾有 0 填充。* 允许修复和修改 GDSII 文件时间戳。*感谢 Troy Tamas 和 Joaquin Matres 的修复
### 版本 1.6.4(2021 年 4 月 23 日)* 修复缺少的模块导入(感谢 Troy Tamas 的修复)。
### 版本 1.6.3(2020 年 12 月 28 日)* 修复边界框边缘情况(感谢 Troy Tamas 的修复)。
### 1.6.2 版(2020 年 12 月 18 日)* 更高效的边界框计算(感谢 Troy Tamas 的贡献)。* 修复标签创建错误。
### 版本 1.6.1(2020 年 10 月 22 日)* 当标签包含特殊字符时修复 SVG 输出。
### 1.6 版(2020 年 8 月 12 日) * 添加了对元素属性的支持。* 添加了对Cell.copy的转换支持。* 在get_polygons中对Cell、CellReference和CellArray进行层/数据类型过滤。* LayoutViewer中的图层/数据类型过滤。* 删除了全局缓存_bounding_boxes。只有单元格缓存它们的边界框。* 错误修复(感谢 Daniel Hwang 的贡献)。* Cell.copy中的错误修复,其中整个依赖树将在创建深层副本时被复制。
### 版本 1.5.2(2020 年 2 月 1 日) * 添加了对导入包含 BOX 元素的 GDSII 文件的支持。* GdsLibrary.extract 中的错误修复(感谢 collineps 发现问题)。
### 1.5 版(2019 年 12 月 20 日)* 新的Cell.write_svg函数用于导出单元格的 SVG 图像。* 新的GdsLibrary.new_cell函数可以快速创建单元格并将其添加到库中。* GdsLibrary.add可以在单元格被覆盖时更新引用。* 添加了 GdsLibrary.remove以允许从库中正确删除单元格。* 添加GdsLibrary.rename_cell以重命名库中的单元格。* 添加GdsLibrary.replace_references以轻松替换库中引用的单元格。* GdsLibrary.add可以递归添加依赖。* 遍历GdsLibrary对象会产生它的所有单元格。* 遍历单元格对象产生它的所有多边形、路径、标签和参考。* 对*.to_gds函数进行重大更改以提高写入效率(这对大多数用户来说应该不是问题,因为gdspy.write_gds和Cell.write_gds保持不变)。* 重大更改:将GdsLibrary.cell_dict重命名为GdsLibrary.cells。* 已弃用:gdspy.current_library、gdspy.write_gds、gdspy.fast_boolen、GdsLibrary.extract。* 针对FlexPath和RobustPath的错误修复和更好的测试。
### 版本 1.4.3(2019 年 11 月 11 日)* FlexPath和RobustPath引用的错误修复。
### 版本 1.4.2(2019 年 10 月 1 日) * FlexPath中的错误修复。
### 版本 1.4.1(2019 年 9 月 20 日) * 错误修复(感谢 DerekK88 和 Sequencer 提供的补丁)。
### 1.4 版(2019 年 5 月 18 日)* 修订 [文档]( http://gdspy.readthedocs.io/ )。* 新的FlexPath和RobustPath类:使用原始 GDSII 路径规范时更有效的路径生成。* 新曲线类:类似 SVG 的多边形创建。* 添加了 PolygonSet.mirror(感谢 Daan Waardenburg 的贡献)。* 添加Path.bezier以创建基于贝塞尔曲线的路径。* 添加Path.smooth以创建基于平滑插值曲线的路径。* 添加get_gds_units以获取 GDSII 文件中使用的单位而不加载。* 添加了 get_binary_cells从文件中仅加载单元格的二进制 GDSII 表示。*为Round、Path.arc、Path.turn和Path.parametric添加了参数容差,以自动控制最终多边形中的点数。* 添加参数binary_cells到 GDSII 写入函数以支持get_binary_cells。* 添加参数rename_template到GdsLibrary.read_gds以实现灵活的单元格重命名(感谢 @yoshi74ls181 的贡献)。* 更改切片的返回值以避免创建空的PolygonSet。* 添加参数时间戳到 GDSII 编写函数。* 改进圆形以支持创建椭圆。* 添加了对每个多边形无限数量点的支持。* 在读取 GDSII 文件时添加了对 BGNEXTN 和 ENDEXTN 的支持。* 多边形创建警告现在由poly_warnings控制。*标签中不正确的锚点现在会引发错误,而不是发出警告。*在每个顶点的基础上,在PolygonSet.fillet中添加了对半径的正确支持。* GDSII 文件生成(感谢@fbeutel 的贡献)和几何创建的速度改进。* 使用 [matplotlib]( https://matplotlib.org/ ) 的字体渲染示例(感谢 Hernan Pastoriza 的贡献)。*扩展的测试套件。
### 版本 1.3.2(2019 年 3 月 14 日)* 用于在 Mac OS X Mojave 上构建的小修复。
### 版本 1.3.1(2018 年 6 月 29 日) * PolygonSet成为所有多边形的基类,特别是Polygon和Rectangle。* 添加了 Cell.remove_polygons和Cell.remove_labels函数以允许过滤单元格内容,例如,基于每个元素的图层。* 添加了 PolygonSet.scale实用方法。* 添加了 PolygonSet.get_bounding_box实用方法。*为Cell.to_gds、GdsLibrary.write_gds和GdsWriter添加参数时间戳。*为GdsLibrary添加了单位和精度参数初始化并从其write_gds方法中删除。* 更改了GdsLibrary.read_gds中参数单位的含义。* 改进切片以避免一次在多个位置切片时出现错误。* 改进PolygonSet.fracture以减少函数调用次数。* 删除了CellReference和CellArray中用于放大和旋转的不正确的绝对标志。* 修正了一些小错误。* 文档修复。* 删除了不推荐使用的类和函数。
### 版本 1.2.1(2017 年 12 月 5 日) * GdsLibrary可以直接从 GDSII 文件创建 * 将返回值添加到GdsLibrary.read_gds * 修复了GdsLibrary.add的返回值
### 1.2 版(2017 年 10 月 21 日) * 添加了新的gdsii_hash函数。*为_chop、Polygon.fracture、Polygon.fillet、PolygonSet.fracture、PolygonSet.fillet和slice添加了精度参数。* 在展平操作中包含标签(将get_labels添加到Cell、CellReference和CellArray)。* 修复了参考副本的边界框缓存中的错误。* 修复了_chop中影响Polygon.fracture、PolygonSet.fracture和slice的错误. * 其他小错误修复。
### 版本 1.1.2(2017 年 3 月 19 日) * 将 Clipper 库更新到 6.4.2 以修复上次更新中引入的错误。* 许可证更改为 Boost 软件许可证 v1.0。
### 版本 1.1.1(2017 年 1 月 27 日)* 修复安装问题的补丁(zip 中缺少 README 文件)。
### 1.1 版(2017 年 1 月 20 日) * 引入GdsLibrary以允许用户同时使用多个库。* 弃用GdsImport以支持GdsLibrary。*将gds_print重命名为write_gds,将GdsPrint重命名为GdsWriter。* 开发更改为 Python 3(通过 [python-future]( http://python-future.org/ ) 支持 Python 2)。* 添加光子学示例。* 添加了测试套件。* Clipper 库更新到最新版本。* 修复了内部函数有时会颠倒输出的顺序。* 修复了fast_boolean中的舍入错误。* 修正参数deep_copy在Cell.copy中被倒置。* numpy 引入的错误修复(感谢 Adam McCaughan 的贡献)。
### 1.0 版(2016 年 9 月 11 日) * 更改为“新风格”课程(感谢 Adam McCaughan 的贡献)。* 添加了Polygon.fillet的每点半径规范(感谢 Adam McCaughan 的贡献)。* 添加内部函数以执行多边形点测试(感谢@okianus 的贡献)。* 从 distutils 移动到 setuptools 以获得更好的 Windows 支持。
### 0.9 版(2016 年 7 月 17 日) * 添加了在应用偏移之前加入多边形的选项。* 为几何实体添加了翻译方法(感谢 John Bell 的提交)。* Bug修复。
### 0.8.1 版(2016 年 5 月 6 日) *基于 [Clipper]( http://www.angusj.com/delphi/clipper.php ) 库的新fast_boolean函数比旧的 bo olean性能好得多。* 更改了偏移签名以也使用 [Clipper]( http://www.angusj.com/delphi/clipper.php ) 库(此更改破坏了与以前版本的兼容性)。* 修复从 GDSII 文件导入某些标签时出错的错误。
### 0.7.1 版(2015 年 6 月 26 日)* 重新定位到 GitHub。* 更改了源结构和文档。
### 0.7 版(2015 年 6 月 12 日) * 新功能:偏移功能。* 用于增量 GDSII 创建的新GdsPrint类(感谢 Jack Sankey 的贡献)。
### 0.6 版(2014 年 3 月 31 日) * Round、Path.arc和Path.turn的默认点数更改为 0.01 绘图单位的分辨率。* Path.parametric接受可调用的final_distance和final_width用于非线性锥形。* 添加参数以PolyPath结尾。* 在 GdsImport 中添加(有限)对 PATHTYPE 的支持。* 当路径曲线的宽度大于其半径的两倍时会发出警告(自相交多边形)。* 为LayoutViewer中的图案添加了随机偏移量。*布局查看器显示引用单元格的单元格标签。*如果depth < 1 且by_spec为 True ,则get_polygons返回(引用的)单元格名称。* 修复了引用空单元格时get_bounding_box中的错误。* GdsImport中的错误修复和边界框计算的许多速度改进(感谢 Gene Hilton 的补丁)。
### 0.5 版(2013 年 10 月 30 日)- 与以前的版本不兼容 * 主要的 LayoutViewer改进(不向后兼容)。* layer 参数已在所有函数的参数列表中重新定位(不向后兼容)。* 将参数by_layer重命名为by_spec(不向后兼容)。* 顶点数多于 GDSII 格式的多边形会引发错误。* 删除了默认数据类型的全局状态变量。*将get_datatypes添加到Cell。* 添加参数single_datatype到Cell.flatten。* 删除gds_image并删除可选的 PIL 依赖项。
### 版本 0.4.1(2013 年 6 月 5 日) * 将参数axis_offset添加到Path.segment允许创建不对称锥形。* 添加了缺少的参数 x_reflection到Label。* 创建一个全局状态变量来覆盖默认数据类型。* CellArray.get_bounding_box中的错误修复(感谢 George McLean 的修复)
### 0.4 版(2012 年 10 月 25 日) * Cell.get_bounding_box为空单元格返回None。* 为边界框添加缓存以加快计算速度,尤其是参考。* 添加了对带有标签类的文本元素的支持。* 改进了警告的发出。* 为boolean添加了一个公差参数。* 为类添加了更好的打印描述。* 修复了布尔值中涉及多个孔的结果的错误。
### 版本 0.3.1(2012 年 5 月 24 日) * 修复了PolygonSet的断裂方法中的错误。
### 0.3a 版(2012 年 5 月 3 日) * 修复了Polygon和PolygonSet的断裂方法中的错误。
### 0.3 版(2012 年 4 月 25 日) * 支持 Python 3.2 和 2.7 *通过缓存进一步改进布尔函数。* 添加方法get_bounding_box和get_layers到Cell。* 添加方法top_level到GdsImport。* 添加了对导入 GDSII 路径元素的支持。* 添加了一个参数来控制导入函数的详细程度。* 层 -1(引用的单元格)在LayoutViewer中默认发送到层列表的底部* LayoutViewer中层列表 的文本和背景现在反映了轮廓和画布背景的颜色。* 更改了LayoutViewer中的默认背景颜色 * 感谢 Gene Hilton 的贡献!
### 版本 0.2.9(2011 年 12 月 14 日) * 属性Cell.cell_list更改为Cell.cell_dict。* 更改了boolean中操作的签名。* 传递给LayoutViewer的单元格的顺序现在在 GUI 中得到尊重。* 完全重新实现布尔函数作为 C 扩展以提高性能。* 删除了boolean中的精度参数。固定在 1e-13 用于合并闭合点,否则使用机器精度。* gds_image现在接受单元名称作为输入。*为get_polygons添加了可选参数深度 * 添加了在导入的 GDSII 单元格中转换图层和数据类型的选项。* 参数exclude_layers从LayoutViewer更改为hidden_layers并且行为也相应更改。* Shift + 右键单击图层,LayoutVIewer的图层列表隐藏/取消隐藏所有其他图层。* 在LayoutViewer中放大和缩小的新按钮。* 低于可配置深度的引用单元现在由LayoutViewer中的边界框表示。
### 版本 0.2.8(2011 年 6 月 21 日) * GDSII 文件导入 * GDSII 输出自动包含所需的引用单元格。* gds_print也接受文件名作为输入。* 大纲在LayoutViewer中默认可见。* 在LayoutViewer中添加背景颜色选项。* 右键单击图层列表隐藏/取消隐藏 LayoutViewer 中的目标图层。* Cell.cell_list现在是按名称索引的字典,而不是列表。* 添加了从保存在Cell.cell_list中的全局单元格列表中排除创建的单元格的选项。* CellReference和CellArray接受单元格的名称作为输入。* 子模块丢失了自己的__version__.
### 版本 0.2.7(2011 年 4 月 2 日) * 修复了boolean中的错误,该错误影响了顶点数大于最大值的多边形的断裂方式。* gds_image接受图像背景的额外颜色参数。* 来自LayoutViewer的屏幕截图与查看器具有相同的背景颜色。* 函数boolean和slice现在也接受CellReference和CellArray作为输入。*为Polygon和PolygonSet添加了方法fracture ,以自动将多边形分割成具有预定义最大顶点数的部分。* 添加方法圆角到多边形和多边形设置为多边形的圆角。
### 版本 0.2.6(2011 年 2 月 28 日) * 保存 GDSII 文件时,如果单元格名称重复,则会引发ValueError 。* 从LayoutViewer保存屏幕截图。* gds_image接受单元格,而不是列表。* gds_image支持的轮廓。* LayoutViewer存储所有访问层的边界框信息以节省渲染时间。
### 版本 0.2.5(2010 年 12 月 10 日) * 空单元格不再破坏 LayoutViewer。* 删除了gds_view函数,由 LayoutViewer 取代,以及对 matplotlib 的所有依赖项。* 修复了布尔值中的一个错误,该错误会影响具有一系列共线顶点的多边形。* 添加了沿平行于轴的直线对多边形进行切片的功能。
### 版本 0.2.4(2010 年 9 月 4 日) * 在 LayoutViewer 中添加了范围的快捷方式:主页或按键。* PolygonSet是Round的新基类,它可能会带来一些与旧脚本不兼容的问题。*圆形元素、PolyPath、L1Path和Path arc、转弯和参数部分现在会自动分割成由最大点数定义的片段。* 布尔值中max_points的默认值更改为 199。 * 删除标志以禁用有关超过 199 个顶点的多边形的警告。该警告仅针对多边形和多边形集。* 修复了阻碍平行参数路径改变彼此距离的错误。
### 版本 0.2.3(2010 年 8 月 9 日) * 添加了PolyPath类以轻松创建带有尖角的路径。* 允许无作为LayoutViewer的颜色参数中的项目,使图层不可见。* 为LayoutViewer添加了颜色轮廓模式(按下 shift 键更改轮廓颜色) * 增加了LayoutViewer画布的滚动区域 * 添加了快速滚动模式:控制 + 拖动第二个鼠标按钮 * 创建了一个新的示例脚本
### 版本 0.2.2(2010 年 7 月 29 日) * 将LayoutViewer内的光标更改为标准箭头。* 修复了LayoutViewer(鼠标滚轮和标尺工具)的 windows 版本的错误。
### 版本 0.2.1(2010 年 7 月 29 日) * 错误修复:gds_image显示错误消息,而不是在未找到PIL时崩溃。* 添加了类LayoutViewer,它使用 Tkinter(包含在所有 Python 发行版中)来显示 GDSII 布局,其控件比gds_view函数更好。这消除了查看器功能的matplotlib要求。* 新的图层颜色将图层 0 扩展到 63。
### 0.2.0 版(2010 年 7 月 19 日) * 修复了Path的turn方法的错误。* 修复了在不使用Polygon或PolygonSet作为输入对象时会出错的布尔函数错误。* 将方法get_polygons添加到Cell、CellReference和CellArray。* 为Cell添加了复制方法。*向Cell添加了flatten方法以删除对其他单元格的引用(或数组引用)。*根据顶点数打破布尔输出多边形以遵守 199 GDSII 限制。
### 版本 0.1.9(2010 年 6 月 4 日) *为曼哈顿几何(L1 范数)路径添加了 L1Path类。
### 0.1.8 版(2010 年 5 月 10 日) *从gds_view中删除了参数fill并添加了一个更灵活的参数:style。* 修复了影响带孔多边形的布尔运算符的舍入错误。* 为PolygonSet添加了旋转方法。* 添加了PolygonSet超过 199 点时的警告 * 添加了一个标志以禁用有关超过 199 点的多边形的警告。* Path增加了turn方法,比arc更容易使用。* 为Path添加了一个方向属性,以保留分段和转弯方法使用的信息。
### 版本 0.1.7(2010 年 4 月 12 日) * 新的可视化选项:将几何图形直接保存到图像文件中(内存使用量较低)。* 添加了新功能:多边形的布尔运算(多边形裁剪)。* 所有类都适用于布尔运算。* Text类的初始化器中的属性 size不再有默认值。*函数gds_view中的参数格式的名称被更改为填充(以避免与内置函数格式混淆)。
### 版本 0.1.6(2009 年 12 月 15 日) * 示例脚本现在包含注释并创建了一个更易于理解的 GDSII 示例。* 改进浮点到整数舍入,它修复了 GDSII 文件中精度的最后一位的单位错误。* 修正了字符 5 的字体。 * 为gds_view添加了一个标志以避免自动调用matplotlib.pyplot.show()。* 在gds_view中,如果层数大于定义的格式数,则循环格式。
### 版本 0.1.5a(2009 年 11 月 15 日) * 类文本正确解释n和t字符。* 更好的文档格式,使用 Sphinx 引擎和 numpy 格式。
### 版本 0.1.4(2009 年 10 月 5 日) * 类文本用不同的字体重写,没有重叠和正确的大小。
### 版本 0.1.3a(2009 年 7 月 29 日) * 修复了Rectangle类的to_gds函数。
### 0.1.3 版(2009 年 7 月 27 日) * 为 GDSII 结构的所有元素添加了数据类型字段。
### 0.1.2 版(2009 年 7 月 11 日) * 添加了gds_view函数以使用 matplotlib 模块显示 GDSII 结构。* 修复了 CellArray 类中的旋转错误。* 根据 GNU 通用公共许可证 (GPL) 发布的模块
### 版本 0.1.1(2009 年 5 月 12 日) * 将属性cell_list添加到类 Cell 以保存所有创建的 Cell 的列表。*在函数gds_print中设置默认参数cells= Cell.cell_list 。* 添加成员来计算每种元素类型的面积。* 添加成员来计算单元格的总面积或逐层面积。* 包括以用户定义的单位创建对象的可能性,而不仅仅是纳米。
### 0.1.0 版(2009 年 5 月 1 日)* 初始版本。