利用ipkiss中的i3.get_stub_elements函数来识别和修复版图中的锐角
全部代码如下,大家可以先尝试运行,接下来一一讲解:
import ipkiss3.all as i3
rectangle = i3.RoundedRectangle(layer=i3.Layer(0), center=(0, 0), box_size=(10.0, 10.0), radius=0)
wedge = i3.Wedge(layer=i3.Layer(0), begin_coord=(-10.0, 0.0), end_coord=(10.0, 0.0), begin_width=5.0, end_width=1.0)
i3.LayoutCell().Layout(elements=rectangle).visualize()
i3.LayoutCell().Layout(elements=wedge).visualize()
elems_or = rectangle | wedge
cell_lay = i3.LayoutCell(name="OR").Layout(elements=elems_or)
cell_lay.visualize()
elems_add, elems_subt = i3.get_stub_elements(cell_lay, stub_width=1, angle_threshold=0.01, grow_amount=0.02)
i3.LayoutCell().Layout(elements=elems_add).visualize()
elems2 = elems_add[0] | cell_lay.layout[0]
elems = elems2[0] | elems_add[1]
i3.LayoutCell().Layout(elements=elems).visualize()
代码首先是来生成一个矩形rectangle和一个楔型wedge
rectangle = i3.RoundedRectangle(layer=i3.Layer(0), center=(0, 0), box_size=(10.0, 10.0), radius=0)
wedge = i3.Wedge(layer=i3.Layer(0), begin_coord=(-10.0, 0.0), end_coord=(10.0, 0.0), begin_width=5.0, end_width=1.0)
之后就是对这两个elements可视化:
i3.LayoutCell().Layout(elements=rectangle).visualize()
i3.LayoutCell().Layout(elements=wedge).visualize()
运行到这一步就可以画出两个elements
之后将两个elements进行布尔运算中的或(|)操作,可以得到:
elems_or = rectangle | wedge
cell_lay = i3.LayoutCell(name="OR").Layout(elements=elems_or)
cell_lay.visualize()
可以看到版图中有两个地方存在锐角,利用i3.get_stub_elements可以自动识别版图中的锐角,并得到修补的elements:elems_add
elems_add, elems_subt = i3.get_stub_elements(cell_lay, stub_width=1, angle_threshold=0.01, grow_amount=0.02)
i3.LayoutCell().Layout(elements=elems_add + cell_lay.layout).visualize()
运行完上面的代码就可以得到修补后的版图
还可以将原版图与修补的elements做或(|)操作得到:
elems2 = elems_add[0] | cell_lay.layout[0]
elems = elems2[0] | elems_add[1]
i3.LayoutCell().Layout(elements=elems).visualize()