Is there a way to measure angles on geometry?

edited December 2014 in General
Hello!

I would like to be able to measure angles from geometry. I have some all angle polygons in the artwork.

Thanks for a great tool overall. Excited to see the progress on the Python interface.

Regards,
Hutch'

Comments

  • edited November -1

    Hi Hutch,

    thanks :-)

    But good point: I did not have angles in mind yet.

    Here is a script that measures the angle between two rulers:

    mw = RBA::Application::instance.main_window
    lv = mw.current_view 
    lv || raise("No layout loaded")
    
    rulers = []
    lv.each_annotation { |a| rulers << a }
    
    rulers.size == 2 || raise("There must be two rulers exactly")
    
    v1 = rulers[0].p2 - rulers[0].p1
    v2 = rulers[1].p2 - rulers[1].p1
    
    v1 = v1 * (1.0 / v1.abs)
    v2 = v2 * (1.0 / v2.abs)
    
    cos = v1.x * v2.x + v1.y * v2.y
    sin = v1.x * v2.y - v1.y * v2.x
    
    angle = Math.atan2(sin, cos) * 180 / Math::PI
    
    v = RBA::MessageBox::warning("Angle", "Angle between rulers is %.2f degree" % angle, RBA::MessageBox::Ok)
    

    Regarding Python: there is a test version already (see http://klayout.de/python_preview.html) in case you like to try it.

    Regards,

    Matthias

  • It seems that this script is not working anymore ... lv.each_annotation { |a| rulers << a }

  • I think about Partial-Select and that selecting a single vertex
    might be able to deliver the nearest-neighbor coords somehow,
    to figure the angle of it?

  • edited January 4

    Hello @laurent_c

    It's workable for my 0.28 earlier version, and it's also a funny start if change annotation to vector or each_edge type. :)

  • edited January 7

    Hmm ... the script still works for me :(

    But anyway, there is the Angle ruler now (finally in 2023):

    It needs three clicks: first point, common point (of both arms) and second point.

    Matthias

Sign In or Register to comment.