@@ -64,6 +64,7 @@ def __init__( self, iren, **args ):
6464 self .buttonWidget .SetRepresentation ( self .buttonRepresentation )
6565 self .buttonWidget .AddObserver ( 'StateChangedEvent' , self .processStateChangeEvent )
6666 self .buttonRepresentation .Highlight ( self ._state )
67+ self .buttonWidget .SetPriority (1.0 )
6768 self .updateWidgetState ()
6869# if self.id == 'ToggleVolumePlot':
6970# print "."
@@ -73,6 +74,8 @@ def getState(self):
7374
7475 def setState (self , value ):
7576 self ._state = value
77+ self .buttonRepresentation .Highlight ( self ._state )
78+ self .setToggleProps ()
7679 self .PrivateStateChangedSignal ( value )
7780# print "----------------->>> Button [%s] Setting state = %s " % ( self.id, str(value) )
7881 self .updateWidgetState ()
@@ -135,13 +138,17 @@ def addObserver(self, observer, **args ):
135138 def setToggleProps (self , state = None ):
136139 if self .toggle :
137140 prop = self .buttonRepresentation .GetProperty ()
138- prop .SetOpacity ( 0.4 if ( self .getState () == 0 ) else 1.0 )
141+ opacity = 0.4 if ( self .getState () == 0 ) else 1.0
142+ prop .SetOpacity ( opacity )
139143 self .buttonRepresentation .SetProperty (prop )
140144 prop = self .buttonRepresentation .GetHoveringProperty ()
141- prop .SetOpacity ( 0.7 if ( self .getState () == 0 ) else 1.0 )
145+ h_opacity = 0.7 if ( self .getState () == 0 ) else 1.0
146+ prop .SetOpacity ( h_opacity )
142147 self .buttonRepresentation .SetHoveringProperty (prop )
143148 self .buttonRepresentation .Modified ()
144149 self .buttonRepresentation .NeedToRenderOn ()
150+ #if self.id == "Volume":
151+ # print " ---> Set Volume constituent button opacity: ", str( opacity )
145152
146153 def processKeyEvent ( self , key , ctrl = 0 ):
147154 if self .processFunctionKey ( key , ctrl ):
@@ -158,8 +165,7 @@ def setToggleState( self, state ):
158165 self .setState (state )
159166 self .setToggleProps ()
160167
161- def processStateChangeEvent ( self , obj , event ):
162- # print "Button[%s]:processStateChangeEvent(%d)" % ( self.id, self.getState() )
168+ def processStateChangeEvent ( self , obj , event , indirect = False ):
163169 self .invokingEvent = True
164170 self .setButtonState ( ( self .getState () + 1 ) % self .numberOfStates )
165171 self .invokingEvent = False
@@ -185,6 +191,7 @@ def broadcastState(self, state ):
185191 self .PublicStateChangedSignal ( self .id , self .key , state )
186192
187193 def place ( self , bounds ):
194+ # print " Place Button %s: %s " % ( self.id, str( bounds ) )
188195 self .buttonRepresentation .PlaceWidget ( bounds )
189196
190197 def size (self ):
@@ -193,18 +200,22 @@ def size(self):
193200 def On (self ):
194201 if self .active :
195202 self .buttonWidget .On ()
203+ # print " Button %s on " % self.id
196204
197205 def Off (self ):
198206 self .buttonWidget .Off ()
207+ # if self.id == "Step":
208+ # print " Button %s off " % self.id
199209
200210 def activate (self ):
201211 self .active = True
202212 self .buttonWidget .On ()
213+ # print " Button %s on " % self.id
203214
204215 def deactivate (self ):
205216 self .active = False
206- self .buttonWidget . Off ()
207-
217+ self .Off ()
218+
208219class ButtonBarHandler :
209220
210221 def __init__ ( self , cfgMgr , ** args ):
@@ -226,7 +237,7 @@ def createControlBar( self, name, interactor, build_args, **args ):
226237 if 'position' not in args : args [ 'position' ] = ( 0.55 , 0.08 )
227238 if 'orientation' not in args : args [ 'orientation' ] = Orientation .Horizontal
228239 cbar = ControlBar ( name , interactor , ** args )
229- cbar .init ( build_args )
240+ cbar .init ( build_args , ** args )
230241 self .button_bars [ name ] = cbar
231242 return cbar
232243
@@ -310,6 +321,11 @@ def getButton(self, name ):
310321 if b .id == name : return b
311322 return None
312323
324+ def getActiveButton (self ):
325+ for b in self .buttons :
326+ if b .getState (): return b
327+ return None
328+
313329 def updateWindowSize (self ):
314330 self .windowSize = self .interactor .GetRenderWindow ().GetSize () if ( self .interactor <> None ) else [ 100 , 100 ]
315331
@@ -319,7 +335,7 @@ def placeButton( self, button, position, **args ):
319335 scale = float (window_size ) * self .magnification / self .fullButtonWindowSize
320336 if scale > 1.0 : scale = 1.0
321337 if scale < 0.5 : scale = 0.5
322- # print " ################################# Resize Button %s: ws=%d, scale=%s " % ( button.id, window_size, str(scale) )
338+ # print " ################################# Resize Button %s: ws=%d, scale=%s, pos=%s " % ( button.id, window_size, str(scale), str(position ) )
323339 size = [ max_size [0 ]* scale , max_size [1 ]* scale ]
324340 bounds = self .computeBounds ( position , size )
325341# print " placeButton[%s]: bounds = %s" % ( button.id, str(bounds) )
@@ -340,14 +356,14 @@ def reposition( self, **args ):
340356 self .build ( ** args )
341357
342358 def getScreenPosition (self , normalized_display_position , buffered = True , ** args ):
343- # print " GetScreenPosition [", self.name, "], position = ", str( normalized_display_position )
344359 self .vtk_coord .SetValue ( normalized_display_position [0 ], normalized_display_position [1 ] )
345360 ren = self .getRenderer ()
346361 screen_pos = self .vtk_coord .GetComputedDisplayValue ( ren ) if ( ren <> None ) else [ 100 , 100 ]
347362 position_offset = args .get ( 'offset' , [ 0 , 0 ] )
348363 if self .orientation == Orientation .Vertical : position_offset [ 0 ] = 0
349364 elif self .orientation == Orientation .Horizontal : position_offset [ 1 ] = 0
350365 if buffered : screen_pos = self .getBufferedPos ( screen_pos , position_offset )
366+ # print " GetScreenPosition [", self.name, "], position = ", str( normalized_display_position ), "], screen position = ", str( screen_pos )
351367 return screen_pos
352368
353369 def getBufferedPos ( self , screen_pos , position_offset = [ 0 , 0 ] ):
@@ -423,26 +439,28 @@ def create( cls, name, interactor, build_args ):
423439 cbar .init ( build_args )
424440 return cbar
425441
426- def init ( self , build_args ): # ( "Step", ("Run","Stop") ), self.processAnimationControl
442+ def init ( self , build_args , ** args ): # ( "Step", ("Run","Stop") ), self.processAnimationControl
427443 button_specs = build_args [0 ]
428444 self .processStateChangeEvent = build_args [1 ]
429445 for bspec in button_specs :
430- self .addButton ( bspec )
446+ if ( len ( bspec ) == 2 ) and isinstance ( bspec [1 ], bool ):
447+ self .addButton ( bspec [0 ], toggle = bspec [1 ], ** args )
448+ else :
449+ self .addButton ( bspec , ** args )
431450
432- def addButton ( self , bspec ):
433- toggle_button = False
451+ def addButton ( self , bspec , ** args ):
434452 if hasattr (bspec , "__iter__" ):
435- bnames = [ bspec [ 0 ] ]
436- toggle_button = bspec [ 1 ] if len ( bspec ) > 1 else True
437- else : bnames = [ bspec ]
438- button = Button ( self .interactor , names = bnames , toggle = toggle_button )
453+ bnames = bspec
454+ else : bnames = [ bspec ]
455+ toggle = args . get ( 'toggle' , False )
456+ button = Button ( self .interactor , names = bnames , toggle = toggle )
439457 button .PublicStateChangedSignal .connect ( self .processStateChangeEvent )
440458 self .buttons .append ( button )
441459
442460 def reset ( self , active_state = None ):
443461 if ( active_state == None ) or ( self .name <> active_state ):
444462 self .hide ()
445-
463+
446464class ButtonBarWidget (ButtonBar ):
447465
448466 def __init__ ( self , handler , name , interactor , ** args ):
@@ -587,12 +605,15 @@ def setSliderValue(self, index, value ):
587605 srep .SetValue ( value )
588606
589607 def initializeSliderPosition ( self , index ):
590- ( process_mode , interaction_state , swidget ) = self .currentControls .get ( index , ( None , None , None ) )
591- if swidget :
592- srep = swidget .GetRepresentation ( )
593- values = self .handler .cfgManager .getParameterValue ( interaction_state )
594- value = ( ( srep .GetMinimumValue () + srep .GetMaximumValue () ) / 2.0 ) if ( values == None ) else values [0 ]
595- srep .SetValue ( value )
608+ try :
609+ ( process_mode , interaction_state , swidget ) = self .currentControls .get ( index , ( None , None , None ) )
610+ if swidget :
611+ srep = swidget .GetRepresentation ( )
612+ values = self .handler .cfgManager .getParameterValue ( interaction_state )
613+ value = ( ( srep .GetMinimumValue () + srep .GetMaximumValue () ) / 2.0 ) if ( values == None ) else values [0 ]
614+ srep .SetValue ( value )
615+ except Exception , err :
616+ print str (err )
596617
597618 def createSliderWidget ( self , index ):
598619 sliderRep = vtk .vtkSliderRepresentation2D ()
@@ -638,14 +659,24 @@ def releaseSliders( self ):
638659
639660 def positionSlider (self , position_index , n_sliders ):
640661 slider_pos = self .slider_postions [ n_sliders ]
641- ( process_mode , interaction_state , swidget ) = self .currentControls .get ( position_index , ( None , None , None ) )
642- if swidget is not None :
643- sliderRep = swidget .GetRepresentation ( )
644- sliderRep .GetPoint1Coordinate ().SetValue ( slider_pos [position_index ][0 ], 0.06 , 0 )
645- sliderRep .GetPoint2Coordinate ().SetValue ( slider_pos [position_index ][1 ], 0.06 , 0 )
646- sliderRep .Modified ()
647- swidget .Modified ()
648- sliderRep .NeedToRenderOn ()
662+ ( process_mode , interaction_state , swidget ) = self .currentControls [position_index ]
663+ sliderRep = swidget .GetRepresentation ( )
664+ sliderRep .GetPoint1Coordinate ().SetValue ( slider_pos [position_index ][0 ], 0.06 , 0 )
665+ sliderRep .GetPoint2Coordinate ().SetValue ( slider_pos [position_index ][1 ], 0.06 , 0 )
666+ sliderRep .Modified ()
667+ swidget .Modified ()
668+ sliderRep .NeedToRenderOn ()
669+
670+ def setSliderValues ( self , values ):
671+ for index , value in enumerate (values ):
672+ widget_item = self .currentControls .get ( index , None )
673+ if widget_item == None :
674+ swidget = self .createSliderWidget (index )
675+ self .currentControls [index ] = ( self .process_mode , self .InteractionState , swidget )
676+ else :
677+ ( process_mode , interaction_state , swidget ) = widget_item
678+ srep = swidget .GetRepresentation ( )
679+ srep .SetValue ( value )
649680
650681 def commandeerControl (self , index , label , bounds , tvals ):
651682 if bounds == None : return
@@ -672,6 +703,7 @@ def commandeerControl(self, index, label, bounds, tvals ):
672703 swidget .SetEnabled ( 1 )
673704 self .currentControls [index ] = ( self .process_mode , self .InteractionState , swidget )
674705
706+
675707 def createButtonWidget (self , index , label ):
676708 pass
677709
@@ -917,9 +949,10 @@ def initConfigState( self, **args ):
917949
918950 def initializeConfiguration ( self , ** args ):
919951 for configFunct in self .configurableFunctions .values ():
920- try : configFunct .init ( ** args )
921- except Exception , err :
922- print >> sys .stderr , "Error initializing configurableFunction %s: %s" % ( configFunct .name , str (err ) )
952+ configFunct .init ( ** args )
953+ # try: configFunct.init( **args )
954+ # except Exception, err:
955+ # print>>sys.stderr, "Error initializing configurableFunction %s: %s" % ( configFunct.name, str(err) )
923956 for button in self .buttons :
924957 if button .toggle :
925958 button .broadcastState ( button .getState () )
0 commit comments