Hi,
You can achieve this by selecting the path and then: Edit > Selection > Round Corners > Outer Corner Radius = half of your path width, Inner Corner Radius = 0. It will indeed be automatically converted to a polygon.
Cheers,
Tomas
Hi Weiling,
You cannot mix Ruby and Python within a script, but it looks quite similar, just drop the ".new":
box = DBox.new(-0.5*(arm_length-taper_l), -0.5*(arm_length-taper_l), +0.5*(arm_length-taper_l),+0.5*(arm_length-taper_l))
Chec…
Hi Weiling,
Why don't you use only DPoint, DBox and DPath??? No need to convert taper_l and arm_length to number of DBU equivalents...
box = DBox.new(-0.5*(arm_length-taper_l), -0.5*(arm_length-taper_l), +0.5*(arm_length-taper_l),+0.5*(arm_length…
Hi,
You just have to make these instances refer to your "DummyDIE" cell...
if instance_distance > wafer_size/2.0 instance.cell=layout.cell("DummyDIE") end
Cheers,
Tomas
Hi Matthias,
I was trying the code at the top of the post above, and I noticed that, if the viewed cell:
1) contains instances and shapes > _duplicate cell is ok, contains both instances and shapes
2) contains only instances > _duplicate ce…
Hi Tristian,
layer3 = layer1.and(layer2)
layer3.area gives the total area
layer3.with_area(nil, value) selects all polygons with an area below "value"
Cheers,
Tomas
Hello,
You can do that easily in the DRC environment (Macro Development > DRC):
https://www.klayout.de/doc-qt5/manual/drc_basic.html
https://www.klayout.de/doc-qt5/about/drc_ref_layer.html#h2-1534
layer.merge([overlap_count])
Cheers,
Tomas
Hi Advait,
You can make the "wafer_size" variable slightly smaller than the exact wafer size to avoid bumps being placed on top of the physical wafer edge... Or add an additional variable "offset_from_wafer_edge" and then use &q…
Hello,
For a circular "wafer" region it is very easy: just check the distance of the "bump" cell instance origins.
The code below only works if the "bump" cell instances are on the top level (if not, you can add some c…
Hi Allon,
I tried some things: dd_45 and ee_45 don't work, but ff_45 seems to work. It looks like the length is rounded to the nearest DBU?
Cheers,
Tomas
active=input(9,0)aa_45= active.edges.with_angle(45.degree) + active.edges.with_angle(135.de…
Note that for any DBU, the intersection points of overlapping polygons/paths/boxes might not be on the DBU grid, especially for non-diagonal angles, hence some minor differences (< 1DBU) with the merged equivalent can be noticed...
Hello,
An intersection point of two overlapping polygons/paths might not be on the DBU grid. Once merged this (polygon) point will snap to the DBU grid by default.
Cheers,
Tomas
Hi Dan,
Looking at the documentation, I'm not sure this is implemented...
As a workaround, you can merge the two gds files into one file but first make sure the layer numbers are different in both gds files...
Cheers,
Tomas
Hello,
If you just want to "view" simple Boolean operations (OR and NOT) you can simulate it by duplicating your layer tab and play with the colors, stipple, layer order (and deleting some layer entries). see screenshots below for a simpl…
Hello,
I use this one for my wafer maps and chip floorplans:
module MyMacro app = RBA::Application.instance mw = app.main_window lv = mw.current_view cv = lv.active_cellview if lv == nil raise "No view selected" end # if if !cv…
Hi Matthias,
Wow, this will be cool!!! It will make it easy to flag overlapping polygons inside a (non-merged) layer itself... Is there an easy way to do the latter right now???
Cheers,
Tomas
Hi Matthias,
Thank you for the fast reply. I upgraded to version 26.10 and the code works indeed fine there :-)
Must have been a small issue in version 25.8 as I'm aware of text alignment preservation in GDS only and did not write and read back.
H…
Hello,
I tried to make one for rectilinear layers a while ago:
report("DRC RULE ENCLOSURE_L1_L2_FIXED")Layer01 = input(1,0)Layer02 = input(2,0)Enclosure_L1_L2_Fixed = 1.0.umLayer01A = Layer01.enclosing(Layer02, Enclosure_L1_L2_Fixed,proj…
Maybe you can assign the current time (Time.now) to a user property using the set_property method of the Shape class??? Never used properties but should be feasible...
Hi Dai,
It allows you to do "something" with each object (data structure) on that layer, for instance if you want to extract only the squares of a layer to a new layer:
Layer01 = input(1,0)
Layer02 = polygon_layer # new empty layer
La…