How to pause a ruby script for 1 second
-
UI.start_timer(1, false) { Sketchup.active_model.selection.clear} -
-
Mac issue ? on PC works even with 0.1
-
@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 -
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.01Error 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.01Error: #<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 -
of course, ==> means what it should return and you must not type that
-
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
-
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
-
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?
-
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 endIt works

-
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 endThe selected component will stay selected.
-
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) -
How?
-
btw, did you increased time_limit from AlexMozg example first ? to like 5 ?
-
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.
; -
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.
-
@n lindenthal said:
...
I think I have to ask Morisdov by PM.Ask me, and I shall try to answer.
-
@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:
- 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- 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.
-
@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 .... .... endAnd completely to get rid from selection.
Where I can find "following.rbs"?
I shall think... -
@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?
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register LoginAdvertisement