DRC ~ split rectilinear polygons in rectangles

Hello Matthias,

I'm trying to split rectilinear polygons in rectangles in the DRC environment. Not sure if the code below is the way to go: it produces some shifts for some of the structures and I can't figure out why... Any idea what the issue might be?

Very amazed by the power of KLayout!!!

Cheers,

Tomas

Layer01 = input(1,0)

Layer01A = Layer01.rectilinear

Layer01B = polygon_layer

Layer01A.each {|polygon|

trapezoids = polygon.to_itype.decompose_trapezoids

trapezoids.each{|trapezoid|

Layer01B.insert(trapezoid.to_dtype)

}

}

Layer01A.output(10,0)
Layer01B.output(11,0)

Comments

  • Hi Matthias,

    I managed to fix it, "to_itype(1.dbu)" instead of "to_itype", and "to_dtype(1.dbu)" instead of "to_dtype"...
    :-)

    Cheers,

    Tomas

  • Very good ...

    Well, once again I'm pleading for using code formatting ...

    As the DRC feature is based on the RBA::Region class and the latter offers a universal "decompose_trapezoids" method, it's possible to employ the latter.

    A DRC is based on a dynamic language you can extend the DRCLayer class at runtime to expose this feature. This code tricks DRC into having a new method called "decompose_trapezoids":

    # Monkey-patch the DRCLayer class to offer a new method
    # called "decompose_trapezoids"
    class DRC::DRCLayer
      def decompose_trapezoids
        DRCLayer::new(@engine, @data.decompose_trapezoids_to_region)
      end
    end
    
    l1 = input(1, 0)
    l1_decomposed = l1.decompose_trapezoids
    l1_decomposed.output(100, 0)
    

    Regards,

    Matthias

  • Hi Matthias,

    Thanks for the suggestion, it works like a charm!!! I still got a lot to learn... :-O

    I'm now looking into these mode parameters TD_htrapezoids, TD_simple, TD_vtrapezoids:

    1) decompose_trapezoids_to_region(TD_htrapezoids) -> Error: Uninitialized Constant
    2) decompose_trapezoids_to_region(0) -> Works fine

    Do these constants need to be initialized somehow?

    0 -> represents TD_htrapezoids
    1 -> represents TD_simple???
    2 -> represents TD_vtrapezoids???

    Cheers,

    Tomas

  • @Thomas The values are "RBA::Polygon::TD_htrapezoids" etc. Don't use the integer equivalents as they might change in future releases.

  • Great! Scripts updated. Thank you Matthias!

Sign In or Register to comment.