自学内容网 自学内容网

luceda ipkiss教程 74:布尔运算去掉部分图层

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

所有代码如下:

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)

运行结果如下:

在这里插入图片描述


原文地址:https://blog.csdn.net/qq_34316088/article/details/142516452

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!