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

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

from si_fab import all as pdk
import ipkiss3.all as i3
from ipkiss.geometry.shape_modifier import __ShapeModifierAutoOpenClosed__
from numpy import sqrtclass 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_shapes.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] - ptif abs(input_vector.x) < 1e-10:input_vector.x = 0if abs(input_vector.y) < 1e-10:input_vector.y = 0if abs(outut_vector.x) < 1e-10:outut_vector.x = 0if abs(outut_vector.y) < 1e-10:outut_vector.y = 0if ((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.pointsclass 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"] = routepcell = 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.mzph.cn/diannao/9043.shtml

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

相关文章

《ESP8266通信指南》11-Lua开发环境配置

往期 《ESP8266通信指南》10-MQTT通信&#xff08;Arduino开发&#xff09;-CSDN博客 《ESP8266通信指南》9-TCP通信&#xff08;Arudino开发&#xff09;-CSDN博客 《ESP8266通信指南》8-连接WIFI&#xff08;Arduino开发&#xff09;&#xff08;非常简单&#xff09;-CSD…

短信公司_供应群发短信公司

短信公司——供应群发短信公司 短信公司作为一种为企业提供群发短信服务的服务商&#xff0c;正逐渐受到市场的青睐。供应群发短信公司作为其中的一种类型&#xff0c;为各行各业的企业提供高效、便捷的短信推广渠道。本文将介绍短信公司的作用以及供应群发短信公司的特点和优势…

Spring Data JPA的作用和用法

Spring Data JPA 是 Spring 框架的一个模块&#xff0c;它提供了一种数据访问抽象&#xff0c;允许以一种声明式和简洁的方式来处理数据库操作。它基于 Java Persistence API (JPA)&#xff0c;是一个行业标准的 ORM&#xff08;对象关系映射&#xff09;规范&#xff0c;用于将…

Django之创建Model以及后台管理

一&#xff0c;创建项目App python manage.py startapp App 二&#xff0c;在App.models.py中创建类&#xff0c;以下是示例 class UserModel(models.Model):uid models.AutoField(primary_keyTrue, auto_createdTrue)name models.CharField(max_length10, uniqueTrue, db…

redis之集群

一.redis主从模式和redis集群模式的区别 redis主从模式:所有节点上的数据一致&#xff0c;但是key过多会影响性能 redis集群模式:将数据分散到多个redis节点&#xff0c;数据分片存储&#xff0c;提高了redis的吞吐量 二.redis cluster集群的特点 数据分片 多个存储入…

ICode国际青少年编程竞赛- Python-2级训练场-坐标与列表练习

ICode国际青少年编程竞赛- Python-2级训练场-坐标与列表练习 1、 for i in range(6):Spaceship.step(Item[i].x - Spaceship.x)Dev.step(Item[i].y - Dev.y)Dev.step(Spaceship.y - Dev.y)2、 for i in range(5):Spaceship.step(Item[i].x - Spaceship.x)Flyer[i].step(Item[…

大数据SQL面试题每日一题系列:现有用户登录记录表,请查询出用户连续三天登录所有的数据记录

之后会不定期更新每日一题sql系列。 SQL面试题每日一题系列内容均来自于网络以及实际使用情况收集&#xff0c;如与各大厂面试题有雷同&#xff0c;纯属巧合。 1.题目 问题&#xff1a;以下为多个用户每日登录记录数据&#xff0c;已经按照用户登录日期进行了去重处理&#…

Shader 纹理动画和顶点动画

一、内置变量--时间 要实现动画&#xff0c;我们需要把时间添加到计算当中&#xff0c;让画面可以随着时间变化而变化。在Unity Shader提供了如下关于时间的内置变量以便于在shader中访问时间实现各种动态效果。 名称类型描述_Timefloat4t是自该场景加载开始所经过的时间&…

车载测试___面试题和答案归纳

车载面试题 一、实车还在设计开发阶段&#xff0c;大部分测试通过什么测试&#xff1f; 答案&#xff1a;通过台架和仿真来完成的 二、测试部分划分&#xff1f; 测试部门是分为自研&#xff0c;系统&#xff0c;验收&#xff0c;自研部门是开发阶段测试&#xff0c;系统部门…

重发被恶意举报的主食冻干测评,速看可能再被删!PR、希喂和SC真实对比PK!

要给猫咪提供高品质主食&#xff0c;主食冻干是不二之选。主食冻干不仅含肉量高、吸收消化率高&#xff0c;还有着丰富的、普通猫粮无法提供的各类营养素&#xff0c;满足猫咪微量元素的需求。可以说是营养与生骨肉喂养媲美&#xff0c;又能完美避开生骨肉细菌超标带来的一系列…

如何优雅的实现接口限流?

首先限流&#xff0c;其实解决方案有很多&#xff0c;比如通过nginx配置&#xff0c;通过gateway网关进行限流&#xff0c;比如Spring Cloud GateWay整合熔断器实现限流 但是以上都是全局的&#xff0c;如何灵活的针对某些接口进行不同级别的限流呢&#xff1f; 方案一&#…

超标量处理器设计:重排序缓存(ROB)

★超标量处理器的很多地方用到了重排序缓存&#xff0c;但是我对它不是很了解&#xff0c;所以我整理一下重排序缓存的知识点。 重排序缓存(ROB)在确保乱序执行的指令能够正确地完成和提交(Commit)&#xff0c;也可以用来寄存器重命名。 ROB是一个先进先出的表&#xff0c;每个…

Re_Lasso

from sklearn.linear_model import LassoCV, Lasso import pandas as pd from sklearn.model_selection import train_test_split from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score from sklearn.model_selection import GridSearchCV# 读取数据…

【备战软考(嵌入式系统设计师)】10 - 软件工程基础

这一部分的内容是概念比较多&#xff0c;不要理解&#xff0c;去感受。 涉及的知识点是嵌入式系统开发和维护的部分&#xff0c;也就是和管理相关的&#xff0c;而不是具体如何进行嵌入式系统开发的细节。 系统开发生命周期 按照顺序有下面几个阶段&#xff0c;我们主要要记…

12 华三的二层链路聚合

12 华三的二层链路聚合 配置思路 1. 配置二层静态聚合组 (1) 进入系统视图。 system-view (2) 创建二层聚合接口&#xff0c;并进入二层聚合接口视图。 interface bridge-aggregation interface-number [ lite ] 创建二层聚合接口后&#xff0c;系统将自动生成…

前端代码优化

嗯&#xff0c;最近pc更新了一版&#xff0c;目前没有什么活&#xff0c;就检查自己写的代码&#xff0c;去优化&#xff0c;发现有一个函数if嵌套了很多层&#xff0c;重复的代码也有很多&#xff0c;所以我就把重复的进行来了提取&#xff0c;以及一些其他优化 原代码 可以…

代码随想录算法训练营DAY46|C++动态规划Part8|139.单词拆分、多重背包理论基础、背包问题总结篇

文章目录 139.单词拆分思路CPP代码 多重背包理论基础处理输入把所有个数大于1的物品展开成1个开始迭代&#xff0c;计算dp数组代码优化 背包问题总结篇 139.单词拆分 力扣题目链接 文章讲解&#xff1a;139.单词拆分 视频讲解&#xff1a;你的背包如何装满&#xff1f;| LeetCo…

计算方法实验9:Romberg积分求解速度、位移

任务 输出质点的轨迹 ( x ( t ) , y ( t ) ) , t ∈ { 0.1 , 0.2 , 0.3 , . . . , 10 } (x(t), y(t)), t\in \{0.1, 0.2, 0.3, ..., 10\} (x(t),y(t)),t∈{0.1,0.2,0.3,...,10}&#xff0c;并在二维平面中画出该轨迹.请比较M分别取4, 8, 12, 16, 20 时&#xff0c;Romberg积分达…

go将时间对象切换到不同时区

编程的时候我们可能会遇到一些时区问题。在Go语言中&#xff0c;处理时区通常涉及到time包和time/tzdata包&#xff08;如果需要更新时区数据&#xff09;。这篇文章就写一下如何切换时区 一&#xff1a;直接上代码 package main import ( "fmt" "time&qu…

k8s持久化存储之OpenEBS

一、介绍 OpenEBS 是 CNCF 项目的一部分&#xff0c;采用 Apache v2 许可证。是 Kubernetes 部署使用最广泛且易用的开源存储解决方案。 目的&#xff1a; 让持久化工作负载的存储和存储服务完全集成到环境中&#xff0c;这样每个团队和工作负载都可以从控制的粒度和 Kubern…