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
This is actually what I meant :)
One hint: you should not hardcode the "0" for the cell index as the numbering of cells is an implementation detail which might change. If you create a cell, you can get the cell index from the cell object …
You mean "tried", not "tired"? Those mean quite different things :)
"produce_impl" is not a regular function that is not called when you expect it. It runs in a kind of sandbox in an entirely different context. If you …
Hi,
So why not just creating three boxes like
a = RBA::Box::new(0, 0, 10, 2)b = RBA::Box::new(8, 2, 10, 3)c = RBA::Box::new(0, 3, 10, 5)
?
This should combine the the "U" shape you've shown.
Matthias
Basically that's a common thing with standard floating-point arithmetics.
Read this first: https://floating-point-gui.de/
For avoiding this, use sprintf-like formatting of numbers before printing them, e.g. s = "%.12g" % n.
Matthias
Hi all,
thanks for these inputs. I have actually not thought too deeply about these problems.
I guess constraining the partial select is possible. "Fixed instances" would be the equivalence of "invalid layers". I have not idea …
HI Mikhail,
the code to send warnings to stdout is in tlLog.cc, line 334++ (WarningChannel uses stdout).
Without recompiling you can't change this behaviour.
But beware: even if you manage to change this, Qt might still spit out warnings itself. …
Hi,
I wonder why you need this - because the idea of a cell is to be able to place it different ways. So instead of creating two copies, you could place the cell once without rotation and once with.
Is this what you're looking for?
Matthias
Hi kmho,
the method you're looking for is "Polygon#decompose_trapezoids". It will give you a set of smaller (4 corners max) polygons from a bigger one.
Regards,
Matthias
"It's funny how many ways you can slice a simple task." ... lovely :)
Intersecting rulers should produce a single rectangular clip cell each. If they overlay - well, then the clip cells overlap. That's not wrong per se, but ugly. I think …
Hi Jin,
the class you're looking for is "TextGenerator". It provides a method "glyph" which gives you a "Region" object with the text you specify. You can insert such a Region into a cell like a polygon.
Matthias
Hi Jin,
You need to create two cells: one main cell and a child cell. In the child cell you place a single rectangle. Then you create a CellInstArray instance with the child's cell cell_index and the vectors and dimensions of the array and insert t…
Hi Jim,
you mean some "blank-out" operation?
I like the clip tool (Edit/Utilities) in "ruler-driven" mode for this purpose.
Here is my layout and the rulers ("box" type so they are easier to place):
(Image)
This i…
Hi dosika,
the sample looks quite similar to a usual three-terminal MOS device.
So 3/0 is the "diffusion area" and 7, 11 or 9 is the "poly" area. I'd start with this analogy.
I understand the true device recognition is somewha…
I'm sorry, but I don't see your code neither do I see the code line where your breakpoint is set.
I can't confirm the problem with my own sample:
(Image)
There are some known bugs and stability issues so I discourage use of KLayout on MacOS.
Ma…
Hi Thomas,
sorry for this long delay - I was entirely absorbed by this nasty MacOS issue: https://github.com/KLayout/klayout/issues/589 ...
Regarding your question: adding a foreign Circuit into a new Netlist is not supported I'm afraid. A circuit…
So you want the cells which call the cells you found in the loop above?
That concept is called the "parents" of a cell.
To get the parents for one contact cell ("c" as in the sample code above), this loop will get you the paren…
AND doesn't look inside the extents of the smaller layer. As I said, the ShapeProcessor is the basic algorithm. No optimization.
Maybe for the things you seem to be doing you should consider the DRC feature. DRC works on a much higher level and eve…
Hi,
As you just provide snippets and let me guess the rest of your code, here is a working example that demonstrates the solution based on the second attempt (the first one isn't working because of reasons you can look up in this forum in other pla…
Hi,
the documentation also says:
(Quote)
So 0 = 0°, 1 = 90°, 2 = 180°, 3 = 270°. Beside "Trans" there is also "CplxTrans" (more specifically "ICplxTrans") which supports any-angle rotations. But those are discouraged …
Sure ... DRC is exactly meant for deriving design rule violations. That's why it's called "design rule check" :-)
See more here: https://www.klayout.de/doc-qt5/manual/drc.html
Matthias
Hi Thomas,
Hmm ... I don't see an obvious reason it shouldn't work ...
To start with debugging, I can give a positive example. I do the following using your Spice reader delegate class and the function:
nl = read_netlist_mos4_to_mos3("test.c…
Hi KM,
it's easier for me if you tell me from the beginning that you look for a Python solution.
The Python way is:
import pyaly = pya.CellView.active().layout()search_for_layer = ly.layer(4, 0)for c in ly.each_cell(): if c.shapes(search_for_lay…
Hi Jim,
Discrepancies can arise from cell names depending on the "Context" mode in "configuration" - some modes like "Marker database top cell" require cell names to match. In this case, the complaint is shown this way…
I think the solution is to join the two materials into one afterwards:
oxidize = oxidize1.or(oxidize2)
In general, XSection topics don't belong here as this is a separate project (https://github.com/klayoutmatthias/xsection).
But as you see there…
Hi Adam,
I can't tell why it's so slow if you don't give me more details. And I don't know what you mean by "bias". "size" after merging? That should not be faster than AND.
In general, AND is the worst choice for your applicat…
Hi Rambir,
the .lyp file does not show up properly - you should use mark down code formatting when pasting such code (use a line with triple backticks before and after the code).
There is a secret feature which allows embedding dynamic information…