Skip to content

Commit 4ba33e2

Browse files
committed
Added rotation slider to VPython 3D display for rdesigneur and nsdfview.
1 parent abc7c13 commit 4ba33e2

File tree

1 file changed

+29
-13
lines changed

1 file changed

+29
-13
lines changed

python/rdesigneur/moogul.py

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,12 @@ def replayLoop():
7171
for view in MooView.viewList:
7272
view.replaySnapshot( idx )
7373
vp.sleep( MooView.viewList[0].sleep )
74-
vp.sleep( 0.5 ) # Pause 0.5 sec between replays
74+
t = time.time() + 0.5
75+
while time.time() < t:
76+
for view in MooView.viewList:
77+
view.rotateFunc()
78+
vp.sleep( MooView.viewList[0].sleep )
79+
#vp.sleep( 0.5 ) # Pause 0.5 sec between replays
7580

7681
def notifySimulationEnd( self ):
7782
if self.viewIdx == 0:
@@ -101,7 +106,11 @@ def toggleReplay( self ):
101106
def setSleepTime( self ):
102107
idx = int( round( self.sleepSlider.value ) )
103108
self.sleep = sleepTimes[idx]
104-
self.sleepLabel.text = " Frame dt = {:1.3f} sec".format( self.sleep )
109+
self.sleepLabel.text = "Frame dt = {:1.4f} s".format( self.sleep )
110+
111+
def setRotation( self, slider ):
112+
self.doRotation = ( abs( self.rotation ) > 0.005 )
113+
self.rotation = slider.value
105114

106115
def updateAxis( self ):
107116
if not self.colorbar:
@@ -219,10 +228,12 @@ def makeColorbar( self, doOrnaments = True, colorscale = 'jet', bg = 'default' )
219228
chk.idx = idx
220229
self.cbox.append( chk )
221230
self.colorbar.append_to_title("\n")
222-
self.timeLabel = vp.wtext( text = "Time = 0.000 sec", pos = self.colorbar.title_anchor )
223-
self.sleepLabel = vp.wtext( text = " Frame dt = 0.005 sec", pos = self.colorbar.title_anchor )
231+
self.timeLabel = vp.wtext( text = "Time = 0.000 s\n", pos = self.colorbar.title_anchor )
232+
self.sleepLabel = vp.wtext( text = "Frame dt = 0.0050 s", pos = self.colorbar.title_anchor )
224233
self.sleepSlider = vp.slider( pos = self.colorbar.title_anchor, length = 200, bind = self.setSleepTime, min = 0, max = len( sleepTimes ) -1, value = min( len( sleepTimes ), 2 ) )
225234
self.replayButton = vp.button( text = "Start Replay", pos = self.colorbar.title_anchor, bind=self.toggleReplay, disabled = True )
235+
self.rotateLabel = vp.wtext( text = " Rotation", pos = self.colorbar.title_anchor )
236+
self.rotateSlider = vp.slider( pos = self.colorbar.title_anchor, length = 200, bind=self.setRotation, min = -0.1, max = 0.1, value = 0.0 )
226237
self.colorbar.append_to_title("\n")
227238

228239
def selectCbar( self, idx ):
@@ -323,23 +334,26 @@ def firstDraw( self, mergeDisplays, rotation=0.0, elev=0.0, azim=0.0, center = [
323334
MooView.viewList[0].graph = vp.graph( title = "Graph", xtitle = "Time (s)", ytitle = " Units here", width = 700, fast=False, align = "left" )
324335
MooView.viewList[0].graphPlot1 = vp.gcurve( color = vp.color.blue, interval=-1)
325336

337+
def rotateFunc(self ):
338+
if self.doRotation and abs( self.rotation ) < 2.0 * 3.14 / 3.0:
339+
self.scene.forward = vp.rotate( self.scene.forward, angle = self.rotation, axis = self.scene.up )
340+
self.updateAxis()
326341

327342
def updateValues( self, simTime ):
328343
self.simTime = simTime
329344
for i in self.drawables_:
330345
i.updateValues( simTime )
331-
if self.doRotation and abs( self.rotation ) < 2.0 * 3.14 / 3.0:
332-
self.scene.forward = vp.rotate( self.scene.forward, angle = self.rotation, axis = self.scene.up )
333-
self.updateAxis()
346+
self.rotateFunc()
334347
if self.viewIdx == 0:
335-
self.timeLabel.text = "Time = {:7.3f} sec".format( simTime )
348+
self.timeLabel.text = "Time = {:7.3f} s\n".format( simTime )
336349
vp.sleep( self.sleep )
337350

338351
def replaySnapshot( self, idx ):
339352
for i in self.drawables_:
340353
simTime = i.replaySnapshot( idx )
354+
self.rotateFunc()
341355
if self.viewIdx == 0:
342-
self.timeLabel.text = "Time = {:7.3f} sec".format( simTime )
356+
self.timeLabel.text = "Time = {:7.3f} s\n".format( simTime )
343357
self.updateAxis()
344358

345359
def doAutoscale( self ):
@@ -403,13 +417,15 @@ def moveView(self, event):
403417
self.scene.camera.rotate( angle = -dtheta, axis = camAxis, origin = self.scene.camera.pos )
404418
return
405419
if event.key == "d": # Diameter scaling down
406-
for dbl in self.drawables_:
407-
dbl.diaScale *= 1.0 - self.sensitivity * 4
420+
moov = MooView.viewList[MooView.colorbarViewIdx]
421+
for dbl in moov.drawables_:
422+
dbl.diaScale *= 1.0 - moov.sensitivity * 4
408423
dbl.updateDiameter()
409424
return
410425
if event.key == "D":
411-
for dbl in self.drawables_:
412-
dbl.diaScale *= 1.0 + self.sensitivity * 4
426+
moov = MooView.viewList[MooView.colorbarViewIdx]
427+
for dbl in moov.drawables_:
428+
dbl.diaScale *= 1.0 + moov.sensitivity * 4
413429
dbl.updateDiameter()
414430
return
415431
if event.key == "s": # Scale down sleep time, make it faster.

0 commit comments

Comments
 (0)