-
Notifications
You must be signed in to change notification settings - Fork 1
/
Manipulate pcell.lym
64 lines (52 loc) · 1.44 KB
/
Manipulate pcell.lym
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?xml version="1.0" encoding="utf-8"?>
<klayout-macro>
<description/>
<version/>
<category>pymacros</category>
<prolog/>
<epilog/>
<doc/>
<autorun>false</autorun>
<autorun-early>false</autorun-early>
<shortcut/>
<show-in-menu>false</show-in-menu>
<group-name/>
<menu-path/>
<interpreter>python</interpreter>
<dsl-interpreter-name/>
<text>import pya
layout = pya.Layout()
top = layout.create_cell("TOP")
l1 = layout.layer(1, 0)
def pellipse(x,y,a,b,npoints,layer_index):
# locate the Basic library
lib = pya.Library.library_by_name("Basic")
if lib == None:
raise Exception("Unknown lib 'Basic'")
# locate the declaration
pcell_decl = lib.layout().pcell_declaration("ELLIPSE");
if pcell_decl == None:
raise Exception("Unknown PCell 'ELLIPSE'")
# create the PCell variant
param = {
"radius_x": a/1000,
"radius_y": b/1000,
"actual_radius_x": a/1000,
"actual_radius_y": b/1000,
"npoints": npoints,
"layer": pya.LayerInfo(layer_index, 0)
}
pv = []
for p in pcell_decl.get_parameters():
if p.name in param:
pv.append(param[p.name])
else:
pv.append(p.default)
cell_index = layout.add_pcell_variant(lib, pcell_decl.id(), pv)
# place the PCell
t = pya.Trans(pya.Trans.R0, x, y)
top.insert(pya.CellInstArray(cell_index, t))
for i in range(10):
pellipse(i*20e3,0,1000,650,100,1)
layout.write("E:\\Research\\Nanofab\\Pattern\\test.GDS")</text>
</klayout-macro>