luceda ipkiss教程 10:修补版图中的锐角

利用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()

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值