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.
    • 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
                                            • 1 / 2
                                            • First post
                                              Last post
                                            Buy SketchPlus
                                            Buy SUbD
                                            Buy WrapR
                                            Buy eBook
                                            Buy Modelur
                                            Buy Vertex Tools
                                            Buy SketchCuisine
                                            Buy FormFonts

                                            Advertisement