LUCEDA IPKISS Tutorial 74:布尔运算去掉部分图层

news2024/11/20 14:50:29

案例分享:通过布尔运算,将版图部分图层挖空
在这里插入图片描述

所有代码如下:

from si_fab import all as pdk
from ipkiss3 import all as i3
import numpy as np


class grating_coupler(i3.PCell):
    _name_prefix = "grating_coupler"
    r = i3.PositiveNumberProperty(doc="the radius of the first grating tooth")
    sector_angle = i3.AngleProperty(doc="the sector angle")
    grating_period = i3.PositiveNumberProperty(doc="the period of grating")
    duty_cycle = i3.PositiveNumberProperty(doc="the duty cycle of grating")
    period_number = i3.IntProperty(doc="number of grating periods")

    def _default_r(self):
        return 50.0

    def _default_sector_angle(self):
        return 20.0

    def _default_grating_period(self):
        return 4.0

    def _default_duty_cycle(self):
        return 0.5

    def _default_period_number(self):
        return 15

    class Layout(i3.LayoutView):

        def _generate_elements(self, elems):
            elem2 = []
            length_triangle = self.r + self.grating_period * self.period_number + 10
            elem2 += i3.Wedge(
                layer=i3.TECH.PPLAYER.SI,
                begin_coord=(0.0, 0.0),
                end_coord=(length_triangle, 0.0),
                begin_width=0.0,
                end_width=length_triangle * np.tan(np.radians(self.sector_angle / 2)) * 2,
            )

            for period in range(self.period_number):
                elem2 += i3.ArcPath(
                    layer=i3.TECH.PPLAYER.SI_TRENCH,
                    center=(0.0, 0.0),
                    radius=self.r + period * self.grating_period,
                    start_angle=-self.sector_angle / 2 - 0.001,
                    end_angle=self.sector_angle / 2 + 0.001,
                    line_width=self.grating_period * self.duty_cycle,
                )
            layer1 = i3.TECH.PPLAYER.SI
            layer2 = i3.TECH.PPLAYER.SI_TRENCH
            generated1 = layer1 - layer2
            mapping = {generated1: layer1}
            elems +=elem2
            # elems += i3.get_elements_for_generated_layers(elem2, mapping)
            return elems


if __name__ == '__main__':
    grating_coupler().Layout().visualize()

运行结果:
在这里插入图片描述
将代码55和56行改为:

  # elems +=elem2
 elems += i3.get_elements_for_generated_layers(elem2, mapping)

运行结果如下:

在这里插入图片描述

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

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

相关文章

Spring Task 2024/9/30

Spring Task是Spring框架提供的任务调度工具,可以按照约定时间自动执行某个代码逻辑。 作用:定时自动执行某段java代码。 cron表达式 在线Cron表达式生成器 (qqe2.com)👈在线生成网站 入门案例 SkyApplication 启动类 package com.sky;im…

对于 Vue CLI 项目如何引入Echarts以及动态获取数据

🚀个人主页:一颗小谷粒 🚀所属专栏:Web前端开发 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 1、数据画卷—Echarts介绍 1.1 什么是Echarts? 1.2 Echarts官网地址 2、Vue CLI 项目…

【LeetCode】每日一题 2024_10_1 最低票价(记忆化搜索/DP)

前言 每天和你一起刷 LeetCode 每日一题~ 大家国庆节快乐呀~ LeetCode 启动! 题目:最低票价 代码与解题思路 今天这道题是经典动态规划,我们定义 dfs(i) 表示从第 1 天到 第 i 天的最小花费,然后使用祖传的:从记忆…

ArduSub程序学习(11)--EKF实现逻辑⑤

状态更新和卡尔曼增益的计算我选择一个进行举例 1.SelectMagFusion SelectMagFusion 函数主要负责选择和处理磁力计(磁传感器)数据的融合过程。这在导航系统中尤为重要,因为磁力计用于提供航向(偏航角)的信息&#xf…

Hopcroft算法划分解释

//基于等价类的思想 split(S){foreach(character c)if(c can split s)split s into T1, ..., Tk }hopcroft()split all nodes into N, Awhile(set is still changes)split(s) 根据状态是否为终结状态划分为终结状态A,和非终结状态N 对这两个大集合,分别…

Acwing 组合计数

一个递推式: 从 a 个元素中选择 b 个,有多少种取法 C a b a ( a − 1 ) ⋯ ( a − b 1 ) 1 2 3 ⋯ b a ! b ! ( a − b ) ! C a − 1 b C a − 1 b − 1 从a个元素中选择b个,有多少种取法C_{a}^{b} \frac{a\times(a-1)\times\…

基础算法之双指针--Java实现(上)--LeetCode题解:移动零-复写零-快乐数-盛最多的水

这里是Thembefue 今天讲解算法中较为经典的一个算法 本讲解主要通过题目来讲解以理解算法 讲解分为三部分:题目解析 > 算法讲解 > 编写代码 移动零 题目链接: 移动零 题目解析 这题的题目意思还是比较好读懂的 就是将数组出现零的地方移到数组最后…

【SpringCloud】 统⼀服务⼊⼝-Gateway

统⼀服务⼊⼝-Gateway 1. ⽹关介绍1.1 问题1.2 什么是API⽹关1.3 常⻅⽹关实现ZuulSpring Cloud Gateway 2. 上手 1. ⽹关介绍 1.1 问题 前⾯的课程中, 我们通过Eureka, Nacos解决了服务注册, 服务发现的问题, 使⽤Spring Cloud LoadBalance解决了负载均衡的问题, 使⽤OpenFe…

使用 Seaborn 热图的 5 种方法(Python 教程)

如何计算 SHAP 特征贡献的概述 原文地址: https://mp.weixin.qq.com/s/nBb9oKlSzRW8w7widHJr6w 热图可以让你的数据变得生动。用途广泛且引人注目。在很多情况下,它们可以突出显示数据中的重要关系。具体来说,我们将讨论如何使用它们来可视化: 模型准确度的混淆矩阵时间序列…

如何从硬盘恢复丢失/删除的视频

您是否想知道是否可以恢复已删除的视频? 幸运的是,您可以使用奇客数据恢复从硬盘驱动器、SD 卡和 USB 闪存驱动器恢复已删除的视频文件。 你有没有遇到过这样的情况:当你随机删除文件以释放空间时,你不小心按下了一些重要视频的…

SysML案例-停车场

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>>

求职Leetcode题目(12)

1.只出现一次的数字 异或运算满足交换律 a⊕bb⊕a ,即以上运算结果与 nums 的元素顺序无关。代码如下: class Solution {public int singleNumber(int[] nums) {int ans 0;for(int num:nums){ans^num;}return ans;} } 2.只出现一次的数字II 这是今天滴…

跳跃列表(Skip List)详解

什么是跳跃列表? 跳跃列表是一种概率性的数据结构,旨在提高链表的搜索、插入和删除效率。它通过在普通链表的基础上增加多个层次,以实现更快的访问速度。跳跃列表的设计灵感来源于跳跃图(Skip Graph)和多层索引的概念…

使用Materialize制作unity的贴图,Materialize的简单教程,Materialize学习日志

Materialize 官网下载地址:http://boundingboxsoftware.com/materialize/ github源码地址:https://github.com/BoundingBoxSoftware/Materialize 下载地址:http://boundingboxsoftware.com/materialize/getkey.php 下载后解压运行exe即可 …

带徒实训项目实战讲义分享:ApiFirst文档对比功能页面开发

亲爱的学员朋友,前面咱一起实现了入参列表对比的部分功能,本节在此基础上继续开发和重构代码,go! 文章目录 已实现的功能实现API入参列表的增删对比合并参数列表杜绝内部变量暴露提取modifiedType枚举 已实现的功能 基于0.0.6和…

算术操作符/和*、while、for循环

上一次我们讲到float等浮点型的数据范围和数据类型长度&#xff0c;以及sizeof可以查看变量、表达式、数据类型的字节数即所占内存。 除法/和乘法* 我们继续用计算器这个例子来学习其他语法。先来看最初我们写成的代码&#xff1a; #include<stdio.h> int Add(int a, …

基于YOLOv4和DeepSORT的车牌识别与跟踪系统

1. 项目简介 本项目旨在开发一个基于深度学习的自动车牌识别&#xff08;Automatic License Plate Recognition, ALPR&#xff09;系统&#xff0c;以实现对车辆牌照的实时检测、识别和追踪。自动车牌识别技术广泛应用于智慧交通、停车管理、电子收费和执法监控等领域&#xf…

Golang | Leetcode Golang题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; func getSteps(cur, n int) (steps int) {first, last : cur, curfor first < n {steps min(last, n) - first 1first * 10last last*10 9}return }func findKthNumber(n, k int) int {cur : 1k--for k > 0 {steps : getSteps(cu…

c++11新特性-下

c11的线程库可以跨平台使用。 原子性操作库(atomic) 不需要对原子类型变量进行加锁解锁操作&#xff0c;线程能够对原子类型变量互斥的访问。 atmoic<T> t; // 声明一个类型为T的原子类型变量t 在C11中&#xff0c;原子类 型只能从其模板参数中进行构造&#xff0c;不…

【规控+slam】探索建图方案及代码分享

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言背景建图描述SLAM定位+感知数据标记构建地图自动探索建图规划方法一:手动遥控探索建图算法步骤方法二:手动给定目标点探索建图算法原理方法三:f…