DRC: layer.interacting() doesn't appear to output the interacting layer

KLayout version: 0.26

I am trying to fix the rule set for FreePDK45. One problem I am encountering is rule METALINT.4: Minimum enclosure around via[2-3] on two opposite sides: 35 nm.

The rule deck uses option 2 described by Matthias in this post:

via1    = polygons(12, 0)
metal2  = polygons(13, 0)
# ...

via1_edges_with_less_enclosure = metal2.enclosing(via1, 35.nm, projection).second_edges
error_corners = via1_edges_with_less_enclosure.width(angle_limit(100.0), 1.dbu)
via1.interacting(error_corners.polygons(1.dbu)).output("METAL2.3", "METAL2.3 : Minimum enclosure around via1 on two opposite sides : 35nm")

However, the rule does not seem to be checked properly. I have a shape where the via and the metal are the same size, and no output is generated.

The problem appears to stem from via1.interacting(error_corners.polygons(1.dbu)) not generating any output. If I run error_corners.output("test"), I see the following shape:

The polygons command also looks correct if I run error_corners.polygons(1.dbu).output("test")

But then via1.interacting(error_corners.polygons(1.dbu)) creates no output. Any tips for what's going on?


  • Hi

    I'm a bit confused: I tried with a testcase I prepared myself. But the error_corners.polygons(1.dbu) look a bit different for me (note the offset).

    The offset is implied by the "1.dbu" argument of "polygons". So I wonder why it is missing in your case.

    And I see the desired effect. My simple testcase is two identical squares with 45x45nm. DBU is 1nm in my case. Is there anything substantially different in your case?

    I'm using version 0.26.3 on Linux.


  • Hi Matthias,

    Thanks for the response. The reason for the difference in the second image is because I had a typo in the code that generated it (omitted (1.dbu) ). However, that was not the issue as I got the same result of no output.

    I tried a different machine that had KLayout version 0.26.1 installed and I ran into the same problem. However, upgrading to KLayout version 0.26.3 solved the issue and via1.interacting(error_corners.polygons(1.dbu)) creates the correct output now. There must have been some incidental bug fix between 0.26.1 and 0.26.3 that solved this issue (I looked over the change log and did not see anything related to this issue).

    Thanks for all the hard work you put into on KLayout. It is really a fantastic tool for the open source community.


  • Very good. Thanks for letting me know.

    I'm also not aware of fixing this bug specifically. But as 0.26 got a major update in the area of DRC because of deep mode I can't rule out any side effects. Typically major releases stabilize around minor version 5 :)

    KInd regards,


Sign In or Register to comment.