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

    How to pause a ruby script for 1 second

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

                                            @alexmozg said:

                                            @unknownuser said:

                                            …And completely to get rid from selection.

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

                                            Yes, rid from selection …

                                            … but how? This way?

                                            select_comp_by_name("Fahrstuhl")
                                            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
                                            

                                            (my poor english) Which "following.rbs" you need?

                                            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