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

      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
                  • A Offline
                    AlexMozg
                    last edited by

                    @unknownuser said:

                    Yes, rid from selection …

                    … but how? This way?

                    
                    def select_comp_by_name(comp_name)
                       model = Sketchup.active_model
                       if compdef = Sketchup.active_model.definitions[comp_name]
                          sel = compdef.instances
                       else
                          sel=[]
                          Sketchup.active_model.active_entities.each do |d|
                             if d.typename == "ComponentInstance"
                             sel << 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
                    sel
                    end
                    
                    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
                      ...
                      ...<<original code>>...
                      ...
                    end
                    
                    
                    
                    
                    

                    Use:

                    1. ss = select_comp_by_name("Fahrstuhl")
                    2. Morisdov.transf_get(dict_key, ss)

                    @unknownuser said:

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

                    Here this:

                    @unknownuser said:

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

                    ????

                    1 Reply Last reply Reply Quote 0
                    • Chris FullmerC Offline
                      Chris Fullmer
                      last edited by

                      I know this is old, but I was needing an answer to something similar today, and this thread over-complexificated the issue for me. I just wanted to add a short .2 second delay before carrying on with my script. This is what I've come up with and it worked for me. No need to invoke the UI.timer

                      time_mark = ( Time.now + 0.2 )
                      while time_mark > Time.now
                      end
                      

                      Hopefully thats helpful if anyone stumbles on this thread,

                      Chris

                      Lately you've been tan, suspicious for the winter.
                      All my Plugins I've written

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

                        Chris: i hope your code is called only by the user and not in an Observer or right click menus, because it will stop Ruby thread and if you call this several times it will block a lot of things.

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

                        1 Reply Last reply Reply Quote 0
                        • Chris FullmerC Offline
                          Chris Fullmer
                          last edited by

                          Ahh, I see. I think its ok in this instance to stop up ruby entirely. I was having very little luck getting it to work any other way. I just kept sending SU into a deeep coma.

                          Maybe I'll try to post my broken code using the timer and try to get that working instead then. Thanks Tavi,

                          Chris

                          Lately you've been tan, suspicious for the winter.
                          All my Plugins I've written

                          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