Hi Waqar,
The script of cross section is highly depents on the layout and the process you are using, blow is a example of forming a passivated T shaped object using two layer of PR, liftoff, and applying a comformed layer.
(Image)
depth(0)height…
HI Faisal
begin_shapes_rec returns all the shapes under cell, which requires a layer index as a parameter
this layer index can be aquired by iterate through layer_infos.
the begin_shapes_rec returns a recursive shape iter that holds shape, trans …
Hi Matthias
Thanks for the suggestion,
Indeed having code running through eval directy could cause bad things, i've tried Expression and generic builtoin function AST but alot of functions and syntactic syrup that we love becoms not avaliable.
To…
The array is actually not drawn individually, instead is done by placing PlaceHolder cells accroading to the scripted location.
This approach allows you to do a cell replace of the PlaceHolder cell with something useful and then don't forgot to use…
For some special use cases and examples:
Dounat pattern filling
Width 10
Height 10
Row counts 50
Col counts 50
X position function COL * 20 - (COLS/2) * 20 + 10
Y position function ROW * 20 - (ROWS/2) * 20 + 10
Visibility function 200 < (Xpo…
Hi @Krishp
Try this out, it's a PCell that provides a variable that allows you to define custom spaced/rotated/mirrored/visibility for array elements, if such thing is still qualified as a array.
Usecase
(Image)
Parameters
This provides a inte…
Hi Tomas,
I've tested on 0.28.17, indeed the code on line 238 will trigger this error, I believe is changed on version > 0.29.0
An change log from V0.29.0:
Synonyms: connect/disconnect for events for better compatibility with PyQt5
The line of…
Hi Ege_Bey,
That seems to be generated by klayout xsection, which can be installed from klayout package control [Tool] --> [Package control]
https://klayoutmatthias.github.io/xsection/DocIntro
(Image)
Another crosssection view I also recomm…
Hi there,
(Image)
Old version was a prove of concept, so I didn't dive too deep for making it actually usable.
this version can choose what type of layer info you would like to show.
Cases such as complex layer grouping or ignoring empty layers…
And for optimizing the route, implementing an A* or other type of path finding algorithms will be neccessary if the layout becomes complicated, without this type of optimization, the path might no always get all the way through to another side.
Due…
Hi jiunnweiyeh,
Here's a revised version, the major differences are:
1) Can route multiple path in predefined regions, the script will perform auto route if routing is not successful
2) Now it can route mostly at 45 deg
3) Reduces huge swing during…
(1) genNodes simplify the patterns into orange boxes, later use layer space to extract spaced region.
(Image)
(2) genNodes space extracted by layer.space, however if the pads are not exactly aligned othogonally, or the pitch change between section…
Hi jiunnweiyeh
Here's a example that sometimes works under certain senerio.
Because this scrip is not clever enough to optimize to the pattern and path, you might need to fiddle around those magic numbers that hard coded in the script in order to…
Hi Jesucu,
The removal of lines is done by converting the gds shape to a Klayout database object. During file saving, the object will be once again being convert back to gds format hence the line appears.
All gds shapes needs to be able to be defi…
Hi BillG,
The plugin in attach provides a edge length info when edge is being hovered.
To drop an actual ruler, a left click is still required, otherwise the screen will be soon populated by all these annotations.
It basically works like the buil…
Hi jiunnweiyeh,
This should be related to edge lengh check part, of measureGroup
p.each_edge{|e| ((e.length < dbu * 2) ? sides : edges) << e }
which did not get sufficient amount of edges, results in input value e1 in pick3Points becomse …
Hi jiunnweiyeh,
few update about the code, I see you use autoMeasure/autoMeasure2 to process shapes and analyze results separately.
So i've revised this part so it retuens a list of dictionary which contains radius info and collection of points fo…
Hi BillG
The ruler requires left click to assign measurement location.
The Ruler type measurement requires 2 input points from the user, see example below:
(Image)
Different type of measure might requires different input counts
Ruler type - Rule…
Hi jiunnweiyeh,
Thanks for the test case, and regarding to the error of undefined method 'x'
this is due to I for got to access the edge with p1 attribute, the intention here is to return a point from edge instead of returning an edge.
the code ab…
Hi jiunnweiyeh,
The error message :
undefined method of 'distance' for nil:NilClass
Means you are trying to access the distance attribute of a empty object.
This error is caused by function def pick3Points(sides, edges)
the code that causes this …
HI Nacer,
Not quite sure about the request, my best guess is you are looking for a method to generate this type of result:
(Image)
Which is essentially adding a DOUNT shape to desired layer, using boolean function to substrace the DOUNT
To achie…
Hi jiunnweiyeh,
The round data are stored in outerRoundGroup and innerRoundGroup respectively, because my previous example group then into a list, so the output results will be mixed together.
Extract this part into a separate function measureGrou…
Hi BillG,
I assume that you've switched to auto measure mode, this will automaticallt drops a ruler for you if you are making a line/space type measurement.
if edge is the targett for measurement, this mode might not be suitable,
you can clicke t…
Hi jiunnweiyeh,
To minimize the error mensioned above, which was caused by measurement point not exactly on the edge,
I've implement a pick3Points function, which first uses the cut_point of the two side to determine the curved side.
Due to the n…
Hi jiunnweiyeh,
Glad this works, unfortunatelly the annotation (Ruler) cannot provid radius data, so we'll need to implement a fit function.
example as below, this was modified from this source
I can't read math, but the code seems works fine.
d…
The arc finding part is like this, first get edges, use extend in/out to form a polygon and merge it
check small length edges, which should be the target end piece pushed out by extended_in
it should have two of them, e1 and e2, finallyget any giv…
Hi jiunnweiyeh,
The process can be split into four steps.
(1) Pre-Process oroginal laye to remove chamfers
(2) Feed processed layers to check max inner/outer radius
(3) Apply rounding to layer
(4) compare pre-processed layer to rounded layer and …
HI jiunnweiyeh,
Basically what following code does is to loop through all shapes and edges to check their angle/length relation
the length / angle relation check basically does what my previous post shows.
layer = input(86,0)def maxRoundR (layer…
HI Newbeer,
The Instance icon will bring up an side panel which allows you to choose the
cell that you previously placed in lib folder
the bottom half of the same panel provides a array property adjustment window
this allows you to place aa arra…
Hi jiunnweiyeh,
An additional opt.deselect_all_layers line before you loop through layers should solved the issue.
By default all layers are being selected during saving, you'll need to deselect them and add layers back like your example.