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
Thanks for the images.
This is weird. The cell must be there still, but I don't know why it is not displayed. I have not seen an effect like this before.
What Windows version are you using?
Matthias
I think the problem is related to the way, polygons are formed.
DXF only knows lines, but GDS has polygons. So KLayout needs to stitch together polygons from lines. This is basically very tricky - specifically if the connections are manifold like i…
There is a common misunderstanding: KLayout is not a Python IDE.
KLayout comes with it's own brand of Python and does not share modules with other installations such as Anaconda. Basically this is not possible as binary compatibility is not given -…
Hi @dviole,
Thank you for providing the test data.
I was able to read this file with these settings:
(Image)
You see I have used a DXF unit 1µm - so a DXF dimension of "1" corresponds to 1µm.
You are using a DXF unit of 1000µm which …
Very good - but actually all layers are loaded initially. This step is finished once the progress bar disappears and the canvas shows. After that the layers are drawn one by one (or in parallel with multiple threads) - but you do not need to wait. W…
Could you explain what you mean by "lost my top cell"? It's still there - the code does not change that. And when I tried the code I still see the top cell and it's still active.
Matthias
Hi Robert,
GDS in general lacks a standardized way to store attributes in a generic way.
But you can use "user properties", which are essentially key/values pairs. GDS supports numeric keys and string values.
User properties need to be …
First, "layout" is a variable which is not assigned anything. I think you want to say
cellview = pya.CellView.active()layout = cellview.layout()top = cellview.cell
Second, the first loop just iterates over the pins and labels in the same…
@ravn Very good :)
BTW: Are you planning to make the library available to others as open source? In that case you may want to put it on a public repository and let others have a look at it.
Regarding the __del__ I could not readily reproduce it. I…
Hello,
I tried to reproduce, but with little success. I changed the code of one PCell of mine to use a member variable for the item list instead of the item list directly. Still, the parameters are there and also the choices.
Basically, it should …
@JamesH46 From the log I don't see much about the drawing times.
So you're saying that you wait until the full picture is built? Drawing happens in a background thread, so usually one does not need to wait. A full layout image of all layers does no…
Hi Andy,
I don't get the details, but there are a few things to say:
* You should not confuse DRC with scripting. DRC works with layers, script work with objects.
* "Region" is a script object and can only hold integer-unit polygons. Whe…
You can take the code from July 2021 and modify the filter criterion. You can check a instance bounding box vs. a filter polygon for example using Polygon#touches(box).
Matthias
@JamesH46 >100 layers is nothing unusual. You can experience some drawing performance degradation with a huge (>1000) number of layers, but not for loading. Also 3.5G is a fairly small GDS file. Specifically given you have 48G memory at your p…
I think there is a match here:
https://www.klayout.de/forum/discussion/2054/resizing-a-curved-polygon-causes-small-jogs-in-the-resized-polygon#latest
Matthias
Hi Lukas,
I did not consider need for cleanup after re-evaluation (specifically after reading), but in your scenario this makes sense.
I created a ticket: https://github.com/KLayout/klayout/issues/1059.
Matthias
Sorry, I cannot help with such little information. Please share the build log and system details (compiler, Qt version, etc.). You'll need a few support packages like Ruby and Python development headers. KLayout is not very picky and does not have m…
No, there is no "backspace" yet, but that is a nice suggestion. That should be pretty intuitive.
I created a ticket: https://github.com/KLayout/klayout/issues/1058
Hi Robert,
Thanks a lot. Such code is very helpful indeed.
So I see. You want to force a "re-computation". Sorry for the nit-picking, but that is something slightly different. Well, I admit it's also a bit confusing.
So refresh just res…
I have issue a PR which should enable enum-to-int conversion in both directions (https://github.com/KLayout/klayout/pull/1055). This should remove the need for adding to_i. It's a too deep change to go into a minor release, but I'll include it in th…
@wimbur the angle_limit(181) does not do what you intend. The problem is that with the tip edge facing away from the vertical edge, the relationship is no longer "separation". It is "enclosure" then.
Hence you can detect forward…
The smooth function actually reduces the density. The definition of this function is to delete points if the resulting modified curve stays close to the original curve within a certain limit. I think you should try this.
I also conducted some exper…
Thanks, a lot for that nice test case.
I could debug the problem and fix it by using
elif role == Qt.CheckStateRole.to_i() and index.column() == 0: return Qt.Checked.to_i() if self.items[index.row()].is_checked else Qt.Unchecked…
You need to call "refresh" on the Library. As explained above, you cannot call it on the layout inside the library, because that is not the client layout which uses the PCell.
Please paste some code - I don't want to guess what you're act…
Very good! Thanks for your comments! :)
I'm going to give it some polishing - BTW, I just added a TOC at the beginning. The classes should look a bit better now - the description column was missing. Maybe you can check again.
Best regards,
Matthi…
Hi Brian,
could you provide an example for such a polygon? You can .zip a GDS file and attach it here. Code without sample data is not pretty useful.
Basically 3.5µm is a pretty large sizing. The sizing feature works edge based by shifting edges a…
Here is another workaround and it's even kind of cleaner:
class MainWindow(pya.QMainWindow): def __init__(self, parent=None): w = pya.QWidget(self) layout = pya.QVBoxLayout(w) self._cellview = pya.CellView.active() bu…
It seems to be a reference counting issue.
I found a quick workaround: if you keep a reference to the Signal object, the event is triggered:
# connect to signal from CellView self._event = pya.CellView.active().on_technology_changed…