• 登入
sketchucation logo sketchucation
  • 登入
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

已排程 已置頂 已鎖定 已移動 Developers' Forum
25 貼文 5 Posters 5.2k 瀏覽 5 Watching
正在載入更多貼文
  • 從舊到新
  • 從新到舊
  • 最多點贊
回覆
  • 在新貼文中回覆
登入後回覆
此主題已被刪除。只有擁有主題管理權限的使用者可以查看。
  • N 離線
    N Lindenthal
    最後由 編輯 2008年8月18日 上午5: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 條回覆 最後回覆 回覆 引用 0
    • T 離線
      tbd
      最後由 編輯 2008年8月18日 上午7:27

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

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

      1 條回覆 最後回覆 回覆 引用 0
      • N 離線
        N Lindenthal
        最後由 編輯 2008年8月18日 上午9:14

        @TBD

        Thank you very much. Your delay goes.

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

        1 條回覆 最後回覆 回覆 引用 0
        • T 離線
          tbd
          最後由 編輯 2008年8月18日 上午9:28

          Mac issue ? on PC works even with 0.1

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

          1 條回覆 最後回覆 回覆 引用 0
          • J 離線
            Jim
            最後由 編輯 2008年8月18日 上午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 條回覆 最後回覆 回覆 引用 0
            • N 離線
              N Lindenthal
              最後由 編輯 2008年8月18日 上午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 條回覆 最後回覆 回覆 引用 0
              • T 離線
                tbd
                最後由 編輯 2008年8月18日 下午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 條回覆 最後回覆 回覆 引用 0
                • N 離線
                  N Lindenthal
                  最後由 編輯 2008年8月18日 下午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 條回覆 最後回覆 回覆 引用 0
                  • T 離線
                    tbd
                    最後由 編輯 2008年8月18日 下午1: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 條回覆 最後回覆 回覆 引用 0
                    • N 離線
                      N Lindenthal
                      最後由 編輯 2008年8月18日 下午5: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 條回覆 最後回覆 回覆 引用 0
                      • A 離線
                        AlexMozg
                        最後由 編輯 2008年8月18日 下午7: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 條回覆 最後回覆 回覆 引用 0
                        • N 離線
                          N Lindenthal
                          最後由 編輯 2008年8月18日 下午8: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 條回覆 最後回覆 回覆 引用 0
                          • T 離線
                            tbd
                            最後由 編輯 2008年8月18日 下午8: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 條回覆 最後回覆 回覆 引用 0
                            • N 離線
                              N Lindenthal
                              最後由 編輯 2008年8月18日 下午8:49

                              How?

                              1 條回覆 最後回覆 回覆 引用 0
                              • T 離線
                                tbd
                                最後由 編輯 2008年8月18日 下午9: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 條回覆 最後回覆 回覆 引用 0
                                • A 離線
                                  AlexMozg
                                  最後由 編輯 2008年8月18日 下午10: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 條回覆 最後回覆 回覆 引用 0
                                  • N 離線
                                    N Lindenthal
                                    最後由 編輯 2008年8月19日 上午6: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 條回覆 最後回覆 回覆 引用 0
                                    • A 離線
                                      AlexMozg
                                      最後由 編輯 2008年8月20日 上午6:32

                                      @n lindenthal said:

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

                                      Ask me, and I shall try to answer.

                                      1 條回覆 最後回覆 回覆 引用 0
                                      • N 離線
                                        N Lindenthal
                                        最後由 編輯 2008年8月22日 上午7: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 條回覆 最後回覆 回覆 引用 0
                                        • A 離線
                                          AlexMozg
                                          最後由 編輯 2008年8月23日 上午5: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 條回覆 最後回覆 回覆 引用 0
                                          • 1
                                          • 2
                                          • 1 / 2
                                          1 / 2
                                          • 第一個貼文
                                            11/25
                                            最後的貼文
                                          Buy SketchPlus
                                          Buy SUbD
                                          Buy WrapR
                                          Buy eBook
                                          Buy Modelur
                                          Buy Vertex Tools
                                          Buy SketchCuisine
                                          Buy FormFonts

                                          Advertisement