Hello,
There is a simple way to do this using a DRC script:
Layer0 = input(1, 0)Layer1 = input(2, 0)(Layer0 - Layer1).output(10, 0)
the basic way using plain Python is via the pya.Region object. A Region object is basically a collection of polygo…
Hi Dave,
The solution should come with 0.24.7. This version shows a popup progress bar when you use a script with -z and perform some long running operation.
It should work, but to be frank, I am not happy with it. Now, progress bars pop up, even …
Hi,
Maybe that needs some explanation:
A view can show multiple layouts. Or more precisely: multiple specific cells (plus context) within multiple layouts. These parts are called "cellviews". The are referred to by "@1", "…
Hi,
a bit hard to read because of missing formatting, but it looks right.
(BTW: you can format code by using the Markdown formatting: just indent the code lines with four blanks).
One remark: you can use "RBA::CplxTrans" instead of &quo…
Hi Allon,
the RecusiveShapeIterator keeps the path internally, but right now it's not accessible through Ruby. Writing your own recursive search is a feasible solution for this problem.
To get the global transformation you just need to multiple al…
Well, maybe not blind ... but creative :-)
Thanks for sharing the sample. You can format it as code by prepending four blanks for every code line (that's Markdown markup). That is in particular important for Python.
Thanks,
Matthias
Hi Thomas,
I have not tried Ubuntu 16 myself. I assume that you can build it from source, but I have not tried myself.
I have only limited computing resources available and cannot support all distributions. I am focusing on Ubuntu 14 currently.
M…
Hi,
what do you mean by "pointers"? Rulers/arrows?
These are not part of GDS files but are pure annotations. You can save rulers as "sessions" (File/Save Session).
Matthias
Hello,
I cannot specify precisely how the rounding is performed. That depends on many factors and finally may be different on different CPU models.
What do you mean by "depend on angle"? The intersection between two lines can be computed…
Hi Thomas,
Maybe something is wrong with your %PATH%? I guess it locates some old klayout.dll or something like that.
You can use the dependency walker from http://www.dependencywalker.com/ to check where the system draws the DLL's from.
You are …
Hi Thomas,
if you are about to produce data, a flat engine is not the best choice. It will always produce a big amount of data.
If you combine all your steps into one DRC run and use tiling, the data is kept only for the tiles and this will reduce…
Hi
(1) I'd never use Java for applications where performance and memory footprint are critical. Switch to C++ and you will be able to use the zlib to do CBLOCK inflation.
(2) I'm sorry, but I don't understand that question. You mean how it's done?…
Hi Thomas,
A DRC script is basically Ruby, but it requires a special environment.
You can run a DRC script like this:
# "drc" is a string containing the DRC scriptdrc = <<DRC# A sample DRC scriptl10 = input(10)l1 = input(1)(l10 ^ …
Hi,
nice picture :-)
The sketched case is a very simple one. To compute points 4 and 9 from 1 compute the unit normal vector of the 1->2 vector, multiply with the half width and add/subtract to point 1 to get point 4 and 9.
The unit normal vec…
Hi Taha,
thanks for your feedback :-)
Building from source is not quite unusual on Linux. I am using Ubuntu myself, but I have not upgraded to 16 yet. I actively support 12 and 14. For other version and distributions there is the build script.
If…
Hi,
this is not a complete log, so I cannot help. Please include at least the gcc call.
I guess you are using a too old ruby version. You will need 1.8.7 at least. I'd recommend any 2.x version.
Matthias
Hi Thomas,
I see I forgot a small detail above: the class of the parameter value needs to be checked too.
If you have a layer and datatype you can simply create a RBA::LayerInfo object like this:
from_layer = RBA::LayerInfo(layer, datatype)
the …
Hi Thomas,
PCell updating is somewhat cumbersome. It would be easy if there was a method to translate a cell entirely, but there isn't. That is because although PCells are mapped to PCell variants, the PCell parameters are considered properties of …
Hi Thomas,
"called_cells" will only give you the cells which are called, not how they are called. There is a basic difference between "if" and "how": "if" just tells you whether there is at least one instance…
Hi,
Basically that error is not possible, since the method is defined also without using Python.
I guess you switched the options without cleaning the build area. Please remove "build.linux-64-gcc-release" and try again.
Matthias
Hi Chris,
Amazing test case, thanks a lot!
The test script can be written even shorter and well reproduces the problem:
['ABC', 'XYZ'].each {|txt| ly = RBA::Layout::new top = ly.create_cell("top#{txt}") layer = RBA::LayerInfo.new(2, …
Hi Lukas,
the discussion title says "How to changing the library name ..." :-)
But sorry, the "meta data" is rather hidden currently. So you cannot read it through script now. It's on my TODO list, but this will require some re…
Hi Vikas,
just replace
pts = [0, 0]
with
pts = [ RBA::Point::new(0, 0) ]
Doing so makes the pts array a pure RBA::Point array and only such arrays are accepted as valid arguments for the polygon constructor.
Matthias
Hi Vikas,
I wish people would stop comparing an open source tool with heavy commercial solutions.
There is one great advantage of open source and I wonder why only very few consider this: you can modify the tool! If you need a new feature, add it.…
Hi,
this is a trick question isn't it :-)
Basically I think, first reading and then manipulating is the only valid way. I mean, you don't first bake a cake and then add the ingredients, do you?
Honestly, I don't know what is happening when you fi…
Hi Lukas,
the library name is part of the layout's "metadata". Metadata are additional pieces of information that the reader delivers and is kept along with the geometrical data, but it cannot be changed currently.
If you want to give a …
Hi Dave,
yes, I'll add the popup solution.
Just for clarification: you run your script with "-z", do you? If not, the progress is still shown in the main window.
Matthias
Hi Dave,
I could basically open the internal API for receiving progress for Ruby too. The responsible C++ class is "tl::ProgressAdaptor". This is equivalent to what you call "progress_check". There is no elaborate receiver chain…