基于openscad的三维gds浏览器

gds3xtrude的Python项目详细描述


gds3xtrude

一个简单的三维布局转换器。

gds3xtrude获取布局的图层,并通过挤压将其转换为三维体积。

gds3xtrude打算以两种不同的方式使用:

  • 作为Klayout扩展:显示活动视图的三维模型。
  • 作为独立工具:从命令行将gds转换为openscad/blender。

Screenshot

依赖关系

  • openscad:三维建模工具。可以使用大多数Linux发行版的包管理器安装。
  • solidpython:用于创建openscad模型的python库。
  • klayout:klayout的python模块,用于gds输入/输出和多边形操作。

安装(Linux)

作为Klayout包

使用klayout包管理器安装gds3xtrude。 依赖项(gds3xtrude python包,openscad)必须手动安装:

apt install openscad
pip3 install --user gds3xtrude

作为独立工具

当作为独立工具使用时gds3xtrude还依赖于klayout python包。

pip3 install --user gds3xtrude
pip3 install --user klayout

从git安装(而不是使用pip安装)

git clone [this repo]cd gds3xtrude
python3 setup.py install --user

安装(Windows)

Windows目前不受支持,但很有可能通过一些调整让gds3xtrude在那里运行。 以下是一些安装方法:

用法

作为Klayout模块

  • 打开布局。
  • 放大到要传递给gds3xtrude的区域。
  • 选择Tools -> gds3xtrude -> run script
  • 为您的技术选择layerstack文件。(freepdk45的示例可以在examples/freepdk45.layerstack中找到)

作为独立工具

示例用法:

# Get layerstack file for FreePDK45.
wget https://codeberg.org/tok/gds3xtrude/raw/branch/master/examples/freepdk45.layerstack

# Get a GDS file.
wget https://codeberg.org/tok/gds3xtrude/raw/branch/master/examples/NAND2X1.gds

# Run gds3xtrude
gds3xtrude --tech freepdk45.layerstack --input NAND2X1.gds --view

如果遇到类似gds3xtrude: command not found的错误,则程序可能不在PATH环境变量中。 尝试先将pip二进制目录添加到path变量:

PATH=$PATH:$HOME/.local/bin
# And now again: gds3xtrude ...

层堆栈定义

要将二维布局转换为三维模型,需要有关物理层堆栈的一些信息。 此信息必须作为文件传递给gds3xtrude。一个简单的层堆栈描述示例 对于freepdk45,可以在examples/freepdk45.layerstack中找到。使用此文件作为起点,并根据您的需要进行调整。

基本上layerstack文件只是定义一些数据结构的python脚本。

示例:

fromgds3xtrude.includeimportlayer,Material# Define layerspoly=layer(15)contact=layer(16)metal1=layer(21)# Define materials and colorsm_poly=Material('poly',color=(0.8,0.2,0.2))m_metal1=Material('metal1',color=(0.8,0.2,0.2))# Assign materialspoly.material=m_polymetal1.material=m_metal1# Define additional layers from boolean operationcontact_to_silicon=contact-poly# Define layer stack structure as a list of (layer thickness, [masks, ...]).# The 3D model is created layer by layer from bottom to top.layerstack=[(10,contact_to_silicon),(20,[contact,poly]),(50,contact),(50,metal1),]

上面例子中描述的层堆栈的横截面在这里显示。请注意,从metal1到silicon(示例中未显示也未包含)的接触由三部分组成。这仅仅是由于三维模型的逐层创建,但是对于编写layerstack定义来说,理解这一点很重要。例如,在最底层,只有一块接触到硅。下面有多晶硅的触点不能到达这个最低层。这被建模为布尔差分contact_to_silicon = contact - poly。 可以通过将掩码放入用于第二层的列表([contact, poly])来合并它们。

layer stack illustration

搅拌机

三维模型也可以在搅拌机中生成。使用命令行工具进行此操作:

gds3xtrude --tech freepdk45.layerstack --input NAND2X1.gds --cad blender

注意,blender脚本api上的当前实现速度非常慢,因此只能看到标准单元格等小东西。

FreeCAD

生成的openscad模型(.scad)可以导入到freecad中。

颜色问题

应用布尔并集时,freecad会去掉颜色。因此,导出的.obj模型将完全为灰色。有一个解决方法:

  • 在FreeCAD中打开OpenSCAD模型
  • 打开Combo View中的Model选项卡
  • 展开可能命名为Unnamed
  • 的导入模型的列表
  • 找到标记为union的子节点,选择并删除它
  • 选择要导出的完整模型(ctrl-a)
  • 现在可以导出到.obj不丢失颜色信息

除了.obj文件之外,freecad还将创建一个包含材料/颜色信息的.mtl文件。Blender将在导入.obj文件时自动读取它。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在Java中以反射方式使用泛型参数调用方法?   java分配给另一个变量的变量是否更改(原始变量更改)第二个变量是否更改?   java没有此类元素异常(警告:服务器未提供任何stacktrace信息)   java检查用户是否经过密码验证或与某个提供者进行了验证   java在向“价格”和“数量”列单元格添加数据时更新JTable中的“金额”列单元格   Android Studio找不到java编译器   java“在foo类的公共方法中,哪个变量(实例或本地)起作用?”   java动态Log4j2 LogfilePath   java使用OO编程避免多个嵌套if   java有没有办法在IntelliJ更改跟踪中突出显示未保存或更改的行   Java中两个矩阵相乘的数组   java打印包含阿拉伯字符的字符串会导致问号。如何修复?   java为什么声明整型静态会导致代码中出现错误?   java在使用@Bean Spring注释创建Bean时遇到异常   java是否将JavaCV添加为依赖项,以便在Raspberry PI上运行?   java如何使用trycatch测试注入的mock   java如何在不同的环境(开发、测试、生产)中维护相同的数据表?   java将Char转换为KeyEvent