sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    What? No Menu?

    Scheduled Pinned Locked Moved Developers' Forum
    15 Posts 5 Posters 485 Views 5 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J Offline
      Jim
      last edited by

      That has always worked for me and still does. I typically use it to quickly reload a file:

      UI.menu('Plugins').add_item("Reload and Run") { load "my_file.rb"; do_method }

      Hi

      1 Reply Last reply Reply Quote 0
      • thomthomT Offline
        thomthom
        last edited by

        Yes, UI.menu('Plugins').add_item('Hello') { puts "World" } works.

        But does
        x = UI.menu('Plugins') x.add_item('Hello') { puts "World" }
        work for you?

        Thomas Thomassen β€” SketchUp Monkey & Coding addict
        List of my plugins and link to the CookieWare fund

        1 Reply Last reply Reply Quote 0
        • J Offline
          Jim
          last edited by

          No, but this does:

          x=UI.menu('Plugins');x.add_item("hi") { puts "hi" }

          (single line.)

          Hi

          1 Reply Last reply Reply Quote 0
          • thomthomT Offline
            thomthom
            last edited by

            ...

            This makes no sense...

            πŸ˜• ❓

            Thomas Thomassen β€” SketchUp Monkey & Coding addict
            List of my plugins and link to the CookieWare fund

            1 Reply Last reply Reply Quote 0
            • C Offline
              cjthompson
              last edited by

              I think it has something to do with the fact that UI.menu() returns a new object each time:

              UI.menu("Plugins")
              #<Sketchup;;Menu;0x5dbf1c0>
              UI.menu("Plugins")
              #<Sketchup;;Menu;0x5dbeff8>
              UI.menu("Plugins")
              #<Sketchup;;Menu;0x5dbee30>
              UI.menu("Plugins")
              #<Sketchup;;Menu;0x5dbec68>
              UI.menu("Plugins")
              #<Sketchup;;Menu;0x5dbeaa0>
              
              1 Reply Last reply Reply Quote 0
              • thomthomT Offline
                thomthom
                last edited by

                But still.... the exact same code saved as a .rb works.

                Thomas Thomassen β€” SketchUp Monkey & Coding addict
                List of my plugins and link to the CookieWare fund

                1 Reply Last reply Reply Quote 0
                • C Offline
                  cjthompson
                  last edited by

                  That's because the code is executed all during one frame, which also explains why the one-liner works.

                  My guess is that Sketchup creates a new menu , adds the items, and does the validation each frame, instead of just using one menu.

                  1 Reply Last reply Reply Quote 0
                  • J Offline
                    Jim
                    last edited by

                    frame?

                    Hi

                    1 Reply Last reply Reply Quote 0
                    • C Offline
                      cjthompson
                      last edited by

                      I suppose refresh is a better term. I was referring to a frame in animation.

                      1 Reply Last reply Reply Quote 0
                      • Dan RathbunD Offline
                        Dan Rathbun
                        last edited by

                        Thread may be a better word.

                        Examine the eval.c file in the Ruby source and you'll see that files are treated a bit differently.

                        I'm not here much anymore.

                        1 Reply Last reply Reply Quote 0
                        • snicoloS Offline
                          snicolo
                          last edited by

                          @cjthompson said:

                          That's because the code is executed all during one frame, which also explains why the one-liner works.

                          My guess is that Sketchup creates a new menu , adds the items, and does the validation each frame, instead of just using one menu.

                          This is exactly right. It depends on the context available when commands are executed.

                          Another way to specify multi-line commands in Ruby is to use ''
                          You could do:

                          x = UI.menu('Plugins') \
                          x.add_item('Hello') { puts "World" } \
                          x.add_item('Hello2') { puts "World2" } 
                          

                          and it would work and be all executed as a single command.

                          Simone Nicolo
                          QA Manager
                          http://www.sketchup.com

                          1 Reply Last reply Reply Quote 0
                          • 1 / 1
                          • First post
                            Last post
                          Buy SketchPlus
                          Buy SUbD
                          Buy WrapR
                          Buy eBook
                          Buy Modelur
                          Buy Vertex Tools
                          Buy SketchCuisine
                          Buy FormFonts

                          Advertisement