Hi Jim,
you can use master or any other branch, but without warranty.
The usual approach (and the one favoured by GitHub) is: features are developed in branches. When they are considered stable enough they are integrated into the master (pull request). Hence the master is kind of "latest greatest", but with a certain risk of being spoiled. There are also forks from other user with their own masters and branches. Don't confuse them with the ones from the KLayout project.
But eventually, when the master is considered to have a sufficient quality, a release is made by creating a release tag (https://github.com/KLayout/klayout/releases). A release is a snapshot which is then turned into Windows binaries, Linux packages, PyPI wheels etc. This this is a lengthy process and I don't want to do this too often.
Matthias
Hi Andreas,
sorry for the late reply.
I can reproduce the issue on the attached layout.
Interestingly, if I write the "join" output to a layer, everything is fine:
deepActiv = source.polygons("1/0")Cont = source.polygons(&quo…
Thanks @blueman_44, that is smart :)
@kareemfarid - I think we are talking net classification here. Apparently the goal of the rule is to identify high voltage nets and demand a bigger spacing for those.
I don't have a good solution for this yet. …
First of all, 17.5nm / 4 is 4.375. I doubt this can be represented precisely in multiples of database units, except if your DBU is 0.125. Is it?
If not, "pixel_size_dbu" will not reflect your desired pixel dimension as this value is in in…
Here is a recipe for version 0.29.11:
* Select "Edit/Search and replace"
* Assuming your current cell is called "TOP", enter the following custom query:
instances of cell TOP.* where inst.trans.rot == 2
* Push the Execute butt…
The code above is Python. You said nothing about where you want that code to run.
The corresponding Ruby version is this:
# for example at 4.5, 7.2:a = RBA::Annotation::newa.p1 = RBA::DPoint::new(4.5, 7.2)a.p2 = a.p1a.fmt = "$U,$V"a.fmt_…
A just took a look at these images, but they look fine to me.
Also the code seems reasonable. But the edges of the polygon are on a 1µm grid, not on a 17.5nm raster. Hence there will always be pixels where the polygon half overlaps, hence rendering…
Hi @kareemfarid,
maybe some example is helpful to demonstrate what you intend to do. The initial post was going in a different direction.
For same/different net separation, you need "connect" as only that enabled net annotation.
The usu…
Hi @14darcia,
I guess I get your point. I hope the solution is helpful for you.
I know such problems as "bridging errors", but mostly they are caused when design rules are not good enough to guarantee design integrity during post process…
The number of interacting statements should the same than the "connect" statements. Why do you think you need a larger number?
Doing a separation with a large value isn't a good idea. That will definitely be very slow.
But I understood y…
You can place a cross-mark "ruler" at the desired location:
# for example at 4.5, 7.2:a = pya.Annotation()a.p1 = pya.DPoint(4.5, 7.2)a.p2 = a.p1a.fmt = "$U,$V"a.fmt_x = ""a.fmt_y = ""a.style = pya.Annotation.…
Hi @connan,
for formatting code, please use a triple backtick line before and after the code. I fixed your previous comment.
Regarding the code: I don't see the "cell_conflict_resolution" solution in your code. This loop has the cell con…
Hi @14darcia,
The documentation example targets something else. It targets gap detection, not overlap detection.
You're basically acting against a very basic principle of GDS: polygons that touch are considered to form a larger area. This is calle…
Hi @kareemfarid,
If you are only interested in m1 shapes being somehow connected to m5, the easiest way is not to use "connect", but to traverse interactions downwards from m5:
via4_connected_to_m5 = via4.interacting(m5)m4_connected_to_m…
Or maybe no one used it :)
But thanks for reporting the issue. I don't know why my phone wasn't able to read it in the first place. But finally that problem was gone.
Kind regards,
Matthias
Hi @icplau,
A small DRC script that snaps the layer to a given grid is this:
# Example: snap layer 100/0 to 0.01.uml = input(100, 0)l = l.raw.snap(0.01.um)l.output(100, 0)
The "raw" option will preserve the cutline, so the cut point is …
Hi @connan,
How exactly do you do the merge? When you say, you are adding them to a library, do you mean you are doing that in KLayout or is that some other tool?
When you merge with KLayout, there are ways to avoid the name clash. Renaming like s…
Hi @kareemfarid,
First I should correct the above (second) solution. It has this be this:
# select l2 shapes where exactly two l1 edges are touching# (NOTE: the boolean AND between L1 and L2 edges selects# only L1 edges that are parallel to L2 edg…
Hi @Johan_vdW,
I guess this is the first bug reported for the QRCode PCell :)
BTW: the code is here: https://github.com/klayoutmatthias/qrcode_pcell
But it has been a while (8 years in fact) since I created it. I need to dig into the code and spe…
No, text string and cell name are entirely disconnected. The TEXT cell is a PCell which can be anything from a inductor coil to a memory block. Being a label does not qualify a PCell to decide about it's own name.
Plus:
* Text strings don't follow…
Hi @kareemfarid,
Here is one solution that is based on the separation of edges into horizontal and vertical ones:
report("discussion 2669")l1 = input(1, 0) # reddishl2 = input(2, 0) # blueishl1e = l1.edgesl2e = l2.edges# split l2e into…
Very good :)
The fill feature will generate new cells when you feed it with "fill_pattern" things. Technically, the "fill_pattern" is just a collection of shapes, but as the fill feature internally needs a cell, it will make a c…
Hi @Emrecan,
In GDS, the general interpretation of overlapping shapes is to "combine" into a single shape. This is called "merged semantics" in KLayout and is the default assumption in general. So the islands you highlight are b…
Hi @tomas2004,
That's not a bug. "origin" for the fill pattern does something else than what you expected.
First of all, this is my version:
# 1st iteration (T1 @ 0,0)layer_to_fill.fill(tile_T1, hstep(3.0*tile_pitch_X), vstep(3.0*tile_p…
Hi @mole99,
The open Sky130A PDK I have installed using volare, does not have these two kinds. Are you sure the special variant isn't intended for SRAM for example? In that case, maybe there is a marker layer you could use for detecting the differe…
Hi @gyger,
thanks for these pointers. I will take a look.
I basically feel that A* search can be tailored to my needs, but I need to investigate that. Anyway, thanks a lot.
Matthias
Hi @IanD,
you can iterate over the polygons of a layer using "each". This will give you a DPolygon object (see https://www.klayout.de/doc-qt5/code/class_DPolygon.html#k_1) which you can analyze using the provided methods.
Here is an exam…
I tried the min_coherence = true approach. It works, but it is slightly inconvenient.
First, it's not a DRC feature, but available as a somewhat cryptic option inside the Region class. The latter object can be accessed as the "data" membe…
Problem is that the time is wasted in C++, which Ruby can't control.
There is no way to avoid that except delegating the operation to a subprocess - i.e. writing the edges to a file, running KLayout as a subprocess in batch mode and collecting the …