基于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 OpenShift的齿轮特性   java如何在Liferay站点的每个页面上放置公司地址和电话?   java确定整数数组中是否存在一个子集,在两个条件下求和到给定的目标值   序列化为什么java中的serialVersionUID必须是静态的、最终的、长类型的?   java响应返回null   java注入接口实现Quarkus   java我不明白为什么第二次排序的运行时间比第一次慢?   (Java)显示图像的最佳方式?   java Android应用程序因添加布局而崩溃   java如何在运行时获取泛型变量的类   java Selenium web驱动程序:无效的选择器:*:WebKitFullScreenSentor   Spring中的java注入值始终为空   Eclipse中带有TestNG插件的@BeforeSuite和@AfterSuite的java问题   使用trycatch块、filewriter和printwriter在java中创建自定义类   如何在Java 安卓上绘制相交的两条线