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.
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))
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…
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…
You can do that easily in the DRC environment (Macro Development > DRC):
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…
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…
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?
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...
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...
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…
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…
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.
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…
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