luceda ipkiss教程 66:金属线的钝角转弯

news2024/12/23 6:41:47

案例分享:金属线的135度转弯:
在这里插入图片描述
所有代码如下:

from si_fab import all as pdk
import ipkiss3.all as i3
from ipkiss.geometry.shape_modifier import __ShapeModifierAutoOpenClosed__
from numpy import sqrt


class ShapeManhattanStub(__ShapeModifierAutoOpenClosed__):
    """
    Will create a 135 degree from a Manhattan shape
    """

    bend_radius = i3.PositiveNumberProperty(default=5.0, doc="bend radius of the routing")

    def define_points(self, pts):
        s = self.original_shape
        s.remove_straight_angles()
        manh90_points = [i3.Coord2(pt) for pt in s.points]

        for idx, pt in enumerate(manh90_points[1:-1]):
            input_vector = pt - manh90_points[idx]
            outut_vector = manh90_points[idx + 2] - pt

            if abs(input_vector.x) < 1e-10:
                input_vector.x = 0
            if abs(input_vector.y) < 1e-10:
                input_vector.y = 0
            if abs(outut_vector.x) < 1e-10:
                outut_vector.x = 0
            if abs(outut_vector.y) < 1e-10:
                outut_vector.y = 0

            if ((input_vector.x * input_vector.y) + (outut_vector.x * outut_vector.y)) != 0:
                raise Exception(
                    "Non manhattan routing given (between input_vector {}, pt {} and outut_vector {})".format(
                        (input_vector.x, input_vector.y),
                        (pt.x, pt.y),
                        (outut_vector.x, outut_vector.y),
                    )
                )

        new_shape = i3.ShapeStub(original_shape=s, stub_width=sqrt(2) * self.bend_radius)
        return new_shape.points


class ConnectElectrical135DegreeCorners(i3.ConnectManhattan):
    stub_side = i3.PositiveNumberProperty(default=25)

    def _connect(self, start_port, end_port, name=None):
        """Connect start_port to end_port using RouteManhattan"""

        if None in (start_port.angle, end_port.angle):
            raise ValueError(
                "The start and/or end port has no angle defined." "Please specify an angle for both ports."
            )

        pcell_props = self._get_pcell_properties(name)
        layout_props = self._get_layout_properties(i3.ElectricalDomain)
        manhattan_props = self._get_manhattan_properties()

        route = ShapeManhattanStub(
            i3.RouteManhattan(
                input_port=start_port,
                output_port=end_port,
                **manhattan_props
            ),
            bend_radius=self.stub_side
        )

        layout_props["shape"] = route

        pcell = i3.ElectricalWire(**pcell_props)
        pcell.Layout(**layout_props)

        return pcell


# Trace templates for the Electrical wires
tt = pdk.M1WireTemplate()
tt.Layout(width=5)

# Define Electrical ports
port1 = i3.ElectricalPort(name="elec1", position=(0.0, 0.0), angle=90.0, trace_template=tt)
port2 = i3.ElectricalPort(name="elec2", position=(100.0, 100.0), angle=-90.0, trace_template=tt)
port3 = i3.ElectricalPort(name="elec3", position=(150.0, 0.0), angle=90.0, trace_template=tt)
port4 = i3.ElectricalPort(name="elec4", position=(250.0, 100.0), angle=-90.0, trace_template=tt)

connectors = i3.Circuit(
    insts={},
    specs=[
        i3.ConnectElectrical(
            port1,
            port2,
            control_points=[i3.H(40)],
            trace_template=tt,
        ),
        ConnectElectrical135DegreeCorners(
            port3,
            port4,
            "manhattan_bend_pt",
            control_points=[i3.H(40)],
            stub_side=20.0,
            trace_template=tt,
        ),
    ],
)
connectors_lo = connectors.Layout()
connectors_lo.visualize()

通过ConnectElectrical135DegreeCorners这个金属布线函数,原来90度转弯的地方都变成了135度转弯!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1680546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Rufus制作Ubuntu启动盘(windows同理)

问题 想要做系统&#xff0c;首先需要做启动盘&#xff0c;使用Rufus做启动盘操作简单。 解决 1.下载Rufus 这个软件免费的一搜便是&#xff0c;这里下载&#xff1a;Rufus - 轻松创建 USB 启动盘。下载完成后即点即用1无需安装。 打开 2.下载Ubuntu镜像 下载地址&#xff…

Flowable配置多数据源以及指定schema

异常反馈 如有问题可通过微信公众号“假装正经的程序员”反馈 为什么要多源 在项目的实际开发过程中通常会有两种常见的使用Flowable的方式&#xff0c;一种是以独立的服务提供工作流的能力&#xff0c;另一种是以Jar包的形式进行内部集成。 这两种方式各有利弊&#xff0c;…

暴力数据结构之二叉树(堆的相关知识)

1. 堆的基本了解 堆&#xff08;heap&#xff09;是计算机科学中一种特殊的数据结构&#xff0c;通常被视为一个完全二叉树&#xff0c;并且可以用数组来存储。堆的主要应用是在一组变化频繁&#xff08;增删查改的频率较高&#xff09;的数据集中查找最值。堆分为大根堆和小根…

购买商用ssl证书并在windows服务器IIS上配置https域名(案例为阿里云)

阿里云、华为云等各路云都有ssl证书购买&#xff0c;价格相差不大&#xff0c;操作也都差不多&#xff0c;请自行选择。 本文以阿里云操作为案例。 购买SSL证书 点击购买 付款买入 注意&#xff0c;如果自己搞起来有问题&#xff0c;阿里购买的时候建议选择申请协助服务。购买…

抖店商品详情API接口(店铺|标题|主图|价格|SKU属性等)

抖店商品详情API接口(店铺|标题|主图|价格|SKU属性等) 抖店商品详情API接口是指通过调用抖音开放平台提供的接口&#xff0c;获取抖店上商品的详细信息的方法。 抖店开放平台提供了一系列的接口&#xff0c;可以用于获取商品的基本信息、价格、库存、销量、评价等各种信息。以…

Python 全栈体系【四阶】(四十四)

第五章 深度学习 九、图像分割 3. 常用模型 3.4 DeepLab 系列 3.4.3 DeepLab v3&#xff08;2017&#xff09; 在DeepLab v3中&#xff0c;主要进行了以下改进&#xff1a; 使用更深的网络结构&#xff0c;以及串联不同膨胀率的空洞卷积&#xff0c;来获取更多的上下文信…

利用管道通信(pipe)测量进程间的上下文切换(context switch)开销

利用管道通信(pipe)测量进程间的上下文切换(context switch)开销 《https://pages.cs.wisc.edu/~remzi/OSTEP/cpu-mechanisms.pdf》 Measuring the cost of a context switch is a little trickier. The lmbench benchmark does so by running two processes on a single CPU…

【LabVIEW FPGA入门】NI 环境安装教程

注意&#xff1a;安装软件之前关闭杀毒软件&#xff0c;避免安装时损坏&#xff0c;安装完成在使用杀毒软件。 步骤1&#xff1a;判断自己是否需要LabVIEW 编程。 下面这几种情况可以调过安装LabVIEW&#xff1a; 不需要LabVIEW或其他语言编程&#xff0c;直接在MAX或仪器软面板…

短视频素材该去哪里找?分享8个短视频剪辑必备的素材大全

在短视频创作与运营中&#xff0c;素材的找寻常常成为创作者的最头疼的事&#xff0c;因为它既要求不侵犯版权&#xff0c;又追求内容的优质性。然而&#xff0c;今天我要为大家揭晓一些剪辑短视频素材库的宝藏网站&#xff0c;它们将成为你创作旅程中的得力帮手&#xff0c;让…

动态手势识别(VGG11)

学校的大作业要做一个视频图像处理相关的&#xff0c;就做了动态手势识别 VGG代码 import torch import torch.nn as nnclass VGG_11_3D(nn.Module):def __init__(self, num_classes, pretrainedFalse):super(VGG_11_3D, self).__init__()self.conv1 nn.Conv3d(3, 64, kernel…

猫狗分类识别①将文件夹中图像统一转化为某一固定格式

一、 导入库 pip install Image 二、确保库中存在Image库&#xff0c;可以在Terminal或控制台中查看 pip list 三、图像后缀处理 import os from PIL import Image def convert_to_png(input_folder, output_folder):if not os.path.exists(output_folder):os.makedirs(outp…

虚拟机安装麒麟系统

官网&#xff1a;https://www.kylinos.cn/ 系统&#xff1a;银河麒麟高级服务器操作系统V10&#xff08;Kylin-Server-10-8.2&#xff09; 安装介质&#xff1a;虚拟机 兼容版下载地址&#xff1a; https://distro-images.kylinos.cn:8802/web_pungi/download/share/phHF6x7rta…

一物一码数字化营销进军调味品行业,五丰黎红“星厨俱乐部”火啦!

近日&#xff0c;由五丰黎红联合纳宝科技精心打造的小程序“星厨俱乐部”火啦&#xff01;一经上线就吸引了大量用户注册和参与&#xff0c;可以说取得了非常成功的市场反馈&#xff0c;那究竟是一个什么样的小程序&#xff0c;竟然有这么大的吸引力呢&#xff1f; 介绍小程序之…

【Mysql数据库进阶02】第一范式~第四范式 Normal Form

第一范式~第四范式Normal Form 0 引言1 第一范式2 第二范式3 第三范式4 BC范式5 第四范式总结 0 引言 因为软考&#xff0c;我又重新拾起了数据库&#xff0c;那么到底如何去判断它属于第几范式呢 1 第一范式 设R是一个关系模式&#xff0c;R属于第一范式当且仅当R中每一个…

P8805 [蓝桥杯 2022 国 B] 机房

P8805 [蓝桥杯 2022 国 B] 机房 分析 是一道lca题目&#xff0c;可以直接套模板 前缀和处理点权 具体思路&#xff1a; 1.n台电脑用n-1条网线相连&#xff0c;任意两个节点之间有且仅有一条路径&#xff08;拆分成各自到公共祖先节点的路径——lca&#xff09;&#xff1b;…

MLP的代替:KAN

受柯尔莫哥洛夫-阿诺德表示定理的启发&#xff0c;作者提出柯尔莫哥洛夫-阿诺德网络&#xff08;KAN&#xff09;作为多层感知器&#xff08;MLP&#xff09;有前途的替代品。MLP 在节点&#xff08;“神经元”&#xff09;上具有固定的激活函数&#xff0c;而 KAN 在边&#x…

SAP CS07复制BOM简介

在比较大型的集团公司中会应用到这样一个场景,所有的BOM都是由总部研发统一管控,然后在下发到下属的工厂进行生产,当发生变更的时候BOM也是会随之进行变更。 同样的在相同的两家工厂中,使用的是一套的设计方案,并且当物料发起变更的时候BOM也要随之进行变更处理。 在对BO…

Linux程序开发(一):Linux基础入门安装和实操手册

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

C语言之旅:自定义类型(联合和枚举)

目录 一.联合体 1.1 联合体的声明 1.2 联合体的使用 1.3 为什么输出 4呢&#xff1f; 1.4 相同成员的结构体和联合体对比 1.5 联合体大小对比 1.6使用联合体判断大小端 二.枚举类型 2.1枚举类型的例举&#xff1a; 2.2枚举类型的优点 2.3 枚举类型的使用 在上篇文章中…

如何利用命令提示符列出文件?这里提供了几个实例供你参考

序言 什么命令可以用来列出目录中的文件&#xff1f;如何在命令提示符Windows 10/11中列出文件&#xff1f;很多人对这些问题感到困惑。在这篇文章中&#xff0c;我们详细解释了命令提示符列出文件的主题。 CMD&#xff08;命令提示符&#xff09;是一个功能强大的Windows内置…