• Login
sketchucation logo sketchucation
  • Login
⚠️ Libfredo 15.4b | Minor release with bugfixes and improvements Update

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 18 Aug 2008, 05:31

    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
    • T Offline
      tbd
      last edited by 18 Aug 2008, 07:27

      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 18 Aug 2008, 09:14

        @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
        • T Offline
          tbd
          last edited by 18 Aug 2008, 09:28

          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 18 Aug 2008, 10:16

            @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 18 Aug 2008, 10:39

              @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
              • T Offline
                tbd
                last edited by 18 Aug 2008, 12:01

                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 18 Aug 2008, 12:52

                  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
                  • T Offline
                    tbd
                    last edited by 18 Aug 2008, 13:24

                    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 18 Aug 2008, 17:43

                      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 18 Aug 2008, 19:46

                        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 18 Aug 2008, 20:33

                          @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
                          • T Offline
                            tbd
                            last edited by 18 Aug 2008, 20:40

                            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 18 Aug 2008, 20:49

                              How?

                              1 Reply Last reply Reply Quote 0
                              • T Offline
                                tbd
                                last edited by 18 Aug 2008, 21:00

                                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 18 Aug 2008, 22:17

                                  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 19 Aug 2008, 06:58

                                    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 20 Aug 2008, 06:32

                                      @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 22 Aug 2008, 07:12

                                        @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 23 Aug 2008, 05:30

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

                                          Advertisement