sketchucation logo sketchucation
    • Login
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    🫛 Lightbeans Update | Metallic and Roughness auto-applied in SketchUp 2025+ Download

    How to pause a ruby script for 1 second

    Scheduled Pinned Locked Moved Developers' Forum
    25 Posts 5 Posters 5.2k 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.
    • N Offline
      N Lindenthal
      last edited by

      select_comp_by_name("Fahrstuhl")
      Morisdov.transf_get("transf2")
      Sketchup.active_model.selection.clear
      

      3rd line comes too quick. Please help me wait for end of line 2 or to pause for 0.4 seconds.

      1 Reply Last reply Reply Quote 0
      • tbdT Offline
        tbd
        last edited by

        UI.start_timer(1, false) { Sketchup.active_model.selection.clear}
        

        SketchUp Ruby Consultant | Podium 1.x developer
        http://plugins.ro

        1 Reply Last reply Reply Quote 0
        • N Offline
          N Lindenthal
          last edited by

          @TBD

          Thank you very much. Your delay goes.

          …
          only with 1 second, but not with 0.9 seconds. Why not?

          1 Reply Last reply Reply Quote 0
          • tbdT Offline
            tbd
            last edited by

            Mac issue ? on PC works even with 0.1

            SketchUp Ruby Consultant | Podium 1.x developer
            http://plugins.ro

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

              @unknownuser said:

              Mac issue ? on PC works even with 0.1

              Are you sure? (Windows XP Pro SP2)

              
              t1=Time.now; UI.start_timer(0.1) {p Time.now-t1} ==> 0.01
              t1=Time.now; UI.start_timer(0.999) {p Time.now-t1} ==> 0.01
              t1=Time.now; UI.start_timer(1) {p Time.now-t1} ==> 1.001
              t1=Time.now; UI.start_timer(5) {p Time.now-t1} ==> 5.007
              
              

              Hi

              1 Reply Last reply Reply Quote 0
              • N Offline
                N Lindenthal
                last edited by

                @TDB

                Yes, Mac

                select_comp_by_name("Fahrstuhl");Morisdov.transf_get("transf1");UI.start_timer( 0.99999, false) { Sketchup.active_model.selection.clear}
                
                

                does not clear.
                Perhaps »Morisdov.trasf_get("transf1")« needs exact 1 second, so it goes with 1 and with 1.01 seconds, but not with littlebit less (0.999).

                On Mac on ruby console does not go:

                t1=Time.now; UI.start_timer(0.1) {p Time.now-t1} ==> 0.01
                

                Error is:

                @unknownuser said:

                t1=Time.now; UI.start_timer(5) {p Time.now-t1} ==> 0.01
                t1=Time.now; UI.start_timer(0.1) {p Time.now-t1} ==> 0.01

                Error: #<SyntaxError: (eval):202: compile error
                (eval):201: parse error
                t1=Time.now; UI.start_timer(5) {p Time.now-t1} ==> 0.01
                ^
                (eval):202: parse error
                t1=Time.now; UI.start_timer(0.1) {p Time.now-t1} ==> 0.01
                ^>
                (eval):202

                1 Reply Last reply Reply Quote 0
                • tbdT Offline
                  tbd
                  last edited by

                  of course, ==> means what it should return and you must not type that

                  SketchUp Ruby Consultant | Podium 1.x developer
                  http://plugins.ro

                  1 Reply Last reply Reply Quote 0
                  • N Offline
                    N Lindenthal
                    last edited by

                    Yes, TDB, that I could know myself. Excuse me, please.

                    @Jim
                    Your times are the same with me.
                    How can I get ==> 0.5 or ==> 0.99?

                    Mac OS X 10.4.11

                    1 Reply Last reply Reply Quote 0
                    • tbdT Offline
                      tbd
                      last edited by

                      yup. my bad. I checked only visual and didnt do any time checks.

                      seems that it ignores decimals (0.1...0.9 = 0, 1.1 ... 1.9 = 1) - so we need to use that. for interface like clear selection doesnt matter that much anyway

                      SketchUp Ruby Consultant | Podium 1.x developer
                      http://plugins.ro

                      1 Reply Last reply Reply Quote 0
                      • N Offline
                        N Lindenthal
                        last edited by

                        To pause is a workaround. Would be better to ask how long

                        Morisdov.transf_get("transf2")
                        
                        

                        works and then clear without pause/delay.

                        Can ruby know how long the earlier line works?

                        1 Reply Last reply Reply Quote 0
                        • A Offline
                          AlexMozg
                          last edited by

                          Here such variant:

                          
                          time_limit = 0.2
                          @val_time = Time.now
                          @timer = UI.start_timer(0, true) do
                          	if Time.now - @val_time >= time_limit
                          		UI.stop_timer @timer
                          		Sketchup.active_model.selection.clear
                          		@val_time = @timer = nil
                          	end
                          end
                          
                          
                          

                          It works 😄

                          1 Reply Last reply Reply Quote 0
                          • N Offline
                            N Lindenthal
                            last edited by

                            @AlexMozg

                            Unfortunately it does not work, if this line is before

                            Morisdov.transf_get("transf2")
                            
                            

                            Please try with proper_animation.rb and one selected component with Position 2

                            Morisdov.transf_get("transf2")
                            time_limit = 0.2
                            @val_time = Time.now
                            @timer = UI.start_timer(0, true) do
                               if Time.now - @val_time >= time_limit
                                  UI.stop_timer @timer
                                  Sketchup.active_model.selection.clear
                                  @val_time = @timer = nil
                               end
                            end
                            

                            The selected component will stay selected.

                            1 Reply Last reply Reply Quote 0
                            • tbdT Offline
                              tbd
                              last edited by

                              welcome to thread synchronization fun - as you can see Morisdov.transf_get uses start_timer
                              so you need to sync with that (e.g. add global variable in transf_get end for example)

                              SketchUp Ruby Consultant | Podium 1.x developer
                              http://plugins.ro

                              1 Reply Last reply Reply Quote 0
                              • N Offline
                                N Lindenthal
                                last edited by

                                How?

                                1 Reply Last reply Reply Quote 0
                                • tbdT Offline
                                  tbd
                                  last edited by

                                  btw, did you increased time_limit from AlexMozg example first ? to like 5 ?

                                  SketchUp Ruby Consultant | Podium 1.x developer
                                  http://plugins.ro

                                  1 Reply Last reply Reply Quote 0
                                  • A Offline
                                    AlexMozg
                                    last edited by

                                    And it is possible and so:

                                    
                                    ...
                                    ...
                                    def self.timer(proc, time_limit=0.5)
                                    $val_time = Time.now
                                    $timer = UI.start_timer(0, true) do
                                       if Time.now - $val_time >= time_limit
                                          UI.stop_timer $timer
                                          proc.call
                                          $val_time = $timer = nil
                                       end
                                    end
                                    end
                                    ...
                                    select_comp_by_name("Fahrstuhl")
                                    Morisdov.transf_get("transf2")
                                    self.timer(proc{Sketchup.active_model.selection.clear})
                                    ...
                                    
                                    
                                    

                                    Though it is possible to do without global variables.
                                    But, I do not know that Morisdov.transf_get does.
                                    ;

                                    1 Reply Last reply Reply Quote 0
                                    • N Offline
                                      N Lindenthal
                                      last edited by

                                      def self.timer(proc, time_limit=0.9)
                                      $val_time = Time.now
                                      $timer = UI.start_timer(0, true) do
                                         if Time.now - $val_time >= time_limit
                                            UI.stop_timer $timer
                                            proc.call
                                            $val_time = $timer = nil
                                         end
                                      end
                                      end
                                      select_comp_by_name("Fahrstuhl")
                                      Morisdov.transf_get("transf2")
                                      self.timer(proc{Sketchup.active_model.selection.clear})
                                      

                                      With 0.9 it works for exactly one time, each next start lets Sketchup crash down.
                                      With 0.2 SketchUp crashes immediately.

                                      I think I have to ask Morisdov by PM.

                                      1 Reply Last reply Reply Quote 0
                                      • A Offline
                                        AlexMozg
                                        last edited by

                                        @n lindenthal said:

                                        ...
                                        I think I have to ask Morisdov by PM.

                                        Ask me, and I shall try to answer.

                                        1 Reply Last reply Reply Quote 0
                                        • N Offline
                                          N Lindenthal
                                          last edited by

                                          @alexmozg said:

                                          … Ask me, and I shall try to answer.

                                          Here is my »Fahrstuhl«, english elevator.

                                          My script selects the "Fahrstuhl“, puts it to another position (here position 1 and 2), and then clears the selection:

                                          select_comp_by_name("Fahrstuhl")
                                          Morisdov.transf_get("transf1")
                                          UI.start_timer(1, false) {Sketchup.active_model.selection.clear}
                                          

                                          Position 1

                                          select_comp_by_name("Fahrstuhl")
                                          Morisdov.transf_get("transf2")
                                          UI.start_timer(1, false) {Sketchup.active_model.selection.clear}
                                          

                                          Position 2

                                          To get the script work, the following .rbs must be installed:

                                          1. select_com_by_name.rb
                                          def select_comp_by_name(comp_name)
                                          	model = Sketchup.active_model
                                          	sel = model.selection
                                          	sel.clear
                                          	if compdef = Sketchup.active_model.definitions[comp_name]
                                          		sel.add(compdef.instances)
                                          	else
                                          		Sketchup.active_model.active_entities.each do |d|
                                          			if d.typename == "ComponentInstance"
                                          			sel.add d if d.name==comp_name
                                          		end
                                          	end
                                          		if sel.count == 0
                                          			UI.beep
                                          		else
                                          			UI.messagebox(sel.count.to_s + " gesuchte Dinger gefunden.")
                                          		end
                                          	end
                                          end
                                          
                                          1. proper_animation.rb

                                          My question is, how to select the "Fahrstuhl/elevator" without selection marks.

                                          So I tried to use the following script:

                                          def self.timer(proc, time_limit=1)
                                          $val_time = Time.now
                                          $timer = UI.start_timer(0, true) do
                                             if Time.now - $val_time >= time_limit
                                                UI.stop_timer $timer
                                                proc.call
                                                $val_time = $timer = nil
                                             end
                                          end
                                          end
                                          select_comp_by_name("Fahrstuhl")
                                          Morisdov.transf_get("transf2")
                                          self.timer(proc{Sketchup.active_model.selection.clear})
                                          

                                          Would be a wonder to get the arrows in model be buttons, which start the elevator scripts.


                                          Fahrstuhl = Elevator

                                          1 Reply Last reply Reply Quote 0
                                          • A Offline
                                            AlexMozg
                                            last edited by

                                            @unknownuser said:

                                            My question is, how to select the "Fahrstuhl/elevator" without selection marks.

                                            The simplest - to make changes to a script "Morisdov".
                                            Somehow here so:

                                            
                                            def Morisdov.transf_get(dict_key, ss=nil)
                                              model=Sketchup.active_model					
                                              ents=model.active_entities
                                               if ss
                                                 @ents = ss
                                               else
                                                 @ents=[]
                                                 model.selection.each {|e| @ents.push(e)}
                                               end											
                                              @ents.freeze
                                              model.selection.clear
                                            ....
                                            ....
                                            end
                                            
                                            

                                            And completely to get rid from selection.

                                            Where I can find "following.rbs"?
                                            I shall think...

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

                                            Advertisement