基于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流/下载文件,无需在Spring Boot中保留内存   kotlin/java是否有类似TryParse()的东西?   java Spring引导找不到用户类型的属性ID   java Spring 2到Spring 3的迁移:一个控制器用于多个视图   java包含多个程序包名为“安卓”的库。支持图样可提取'   java spring JPA是否支持自定义值框架?   java转义出基于文本字段的搜索栏   java AAPT:错误:未找到样式属性“安卓:attr/WindowsPlashCreenBackground”   java从文本文件中读取纬度和经度   java哪里可以找到如何使用排序的示例。顺序ignorecase(),其中nullhandling nulls last用于自定义Spring JPA如何提供查询   尝试使用Dialogflow上的Webhook动态给出响应时,java获取Webhook响应错误(206)   如何在java中替换匹配的字符串?   java模拟数学的最大价值。随机的   java Spring RestTemplate GET请求未给出正确响应   春爪哇。lang.IllegalArgumentException   java系统。load()永远不会发生   java剪辑循环不工作   java如何从maven构建中删除staxapi   java ThreadPoolExecutor的排队行为是否可以自定义,以更喜欢创建新线程而不是排队?