That is most likely because the script runs on the main thread.
âŚI wish I understood what that meant and that I had the knowledge to use that infoâŚ
Anyway, it is only a step on the way to make a slider. I have the slider hooked up, but I have no idea on how to make it interactive.
Also I get the slider to return whole number (intâs) it seems.
(As a workaround Iâll rewrite it to use degrees instead of radians for now)
ETO slider - rotate environment.py (3.6 KB)
Edit: Here is the degree version:
ETO slider - rotate environment - degrees.py (4.0 KB)
EDIT 2: I just updated the script so it gives an error message if no environment is sat for reflection.
(I have no idea how to find the GLOBAL environment value, only the custom ones)
If you want to see changes while dragging the slider youâll have to create a modeless dialog. Here some sample to get started:
Shoot⌠this is getting more and more complex.
I wish it was as easy as making scripts in Unity.
There the UI is added automatically as the scripts are tied to the project.
Maybe something for Rhino V8?
I have to put this project on hold for a few days, but thanks a lot for the help so far! I have gotten some progress and learned a few things too.
[quote=âHolo, post:18, topic:50674â]
Old thread, new discovery
I see that rs.redraw() is much slower than using view.Redraw() for all current views, so maybe rs.redraw() can be updated?
I have for a long time wondered why that was so slow, so maybe this is it.
Here is a simple test:
import scriptcontext as sc
import rhinoscriptsyntax as rs
import time
Cview = rs.CurrentView()
views = sc.doc.Views
startTime=time.time()
for i in range(100):
rs.RotateView(Cview,0,3.6)
for view in views:
view.Redraw()
rs.Sleep(0)
print time.time()-startTime
rs.EnableRedraw(False)
startTime=time.time()
for i in range(100):
rs.RotateView(Cview,0,3.6)
rs.Redraw()
rs.Sleep(0)
print time.time()-startTime
rs.EnableRedraw(True)
And the results:
0.81706237793
3.40153503418
@stevebaer maybe this is something for you?
Thereâs an extra wait call when using rhinoscriptsyntax. From what I can tell, you shouldnât need a call to Sleep in the second version of your script.
Sure, that was a copy paste bug on my side, but adding 100 sleeps doesnât take 2.8 seconds
And using Rhino.RhinoApp.Wait() is faster than rs.Sleep(0) so I upgraded to that. Please take a look at what causes the rs.Redraw() slowness.
import scriptcontext as sc
import rhinoscriptsyntax as rs
import time
import Rhino
Cview = rs.CurrentView()
views = sc.doc.Views
### view.Redraw
startTime=time.time()
for i in range(100):
rs.RotateView(Cview,0,3.6)
for view in views:
view.Redraw()
Rhino.RhinoApp.Wait()
print time.time()-startTime
### rs.Redraw
rs.EnableRedraw(False)
startTime=time.time()
for i in range(100):
rs.RotateView(Cview,0,3.6)
rs.Redraw()
print time.time()-startTime
rs.EnableRedraw(True)
On my laptop now and running on battery makes the difference even bigger:
0.91251373291
7.33575439453
(rtx 2070)
One can inspect the source code and see that it calls time.sleep()
prior to Rhino.RhinoApp.Wait()
:
def Sleep(milliseconds):
"""Suspends execution of a running script for the specified interval
Parameters:
milliseconds (number): thousands of a second
Returns:
None
Example:
import rhinoscriptsyntax as rs
print "This"
rs.Sleep(2000)
print "is"
rs.Sleep(2000)
print "a"
rs.Sleep(2000)
print "slow"
rs.Sleep(2000)
print "message!"
See Also:
"""
time.sleep( milliseconds / 1000.0 )
Rhino.RhinoApp.Wait() #keep the message pump alive
Thatâs interesting,
I recall now that you have shown me inspect before, that I will glue to my monitor now
And another strange thing is that time.sleep(0) is slower than time.sleep(0.0001)⌠go figure
Test this. There seems to be some odd results.
IMO the last run should be 1.00299 seconds, not 1.69, so am I misunderstanding something?
import time
import Rhino
startTime = time.time()
for i in range(1000):
time.sleep(0)
Rhino.RhinoApp.Wait()
print time.time()-startTime
startTime = time.time()
for i in range(1000):
time.sleep(0.0001)
Rhino.RhinoApp.Wait()
print time.time()-startTime
startTime = time.time()
for i in range(1000):
time.sleep(0.001)
Rhino.RhinoApp.Wait()
print time.time()-startTime
Here is the result on my computer:
0.0109634399414
0.00299072265625
1.69309997559