Skip to content

Commit 034fa3c

Browse files
committed
Merge pull request #951 from UV-CDAT/vcs3D_features_for_v2.1.1
Vcs3D features for v2.1.1
2 parents ab0ed9c + 58dec73 commit 034fa3c

28 files changed

+2977
-390
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,6 @@ logs/
5656
site.cfg
5757
sources/
5858
version
59+
/.hooks-config
60+
/.idea
61+

.hooks-config

Lines changed: 0 additions & 5 deletions
This file was deleted.

Packages/DV3D/Application.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ def update( self, tmpl ):
4242
if self.plot <> None:
4343
self.plot.updateModule()
4444

45-
def onClosing(self):
45+
def onClosing(self, cell ):
4646
if self.plot <> None:
47-
self.plot.onClosing()
47+
self.plot.onClosing( cell )
4848

4949
def applyAction( self, action ):
5050
if self.plot <> None:
@@ -85,5 +85,11 @@ def terminate( self ):
8585

8686
def start(self):
8787
iren = self.plot.renderWindow.GetInteractor()
88-
iren.Start()
89-
88+
iren.Start()
89+
90+
def hideWidgets(self):
91+
self.plot.hideWidgets()
92+
93+
def showWidgets(self):
94+
self.plot.showWidgets()
95+

Packages/DV3D/ButtonBarWidget.py

Lines changed: 102 additions & 28 deletions
Large diffs are not rendered by default.

Packages/DV3D/ConfigurationFunctions.py

Lines changed: 145 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,11 @@ def get_parameter_name( serialized_value ):
222222
namelist = deserialize_address( serialized_value )
223223
return namelist[0]
224224

225+
def get_parameter_cell( serialized_value ):
226+
namelist = deserialize_address( serialized_value )
227+
if ( len( namelist ) < 2) or ( len(namelist[1]) < 3 ): return None
228+
return eval( namelist[1] )
229+
225230
class ConfigManager:
226231

227232

@@ -243,10 +248,17 @@ def __init__( self, **args ):
243248
self.parameters[basename] = self.getParameter( basename )
244249
self.initialized = False
245250

251+
def clear( self, cell ):
252+
for parm_address in self.parameters.keys():
253+
pcell = get_parameter_cell( parm_address )
254+
if (pcell == cell) or (pcell == None):
255+
del self.parameters[ parm_address ]
256+
246257
def getParameter( self, param_name, **args ):
247258
cell = args.get( 'cell', '' )
248259
# print ' <<---------------------------------------------------->> Get Parameter: ', param_name, ' cell = ', cell
249-
if cell: param_name = serialize_address( cell, param_name )
260+
if cell:
261+
param_name = serialize_address( cell, param_name )
250262
cparm = self.parameters.get( param_name, None )
251263
if cparm == None:
252264
if self.parent is None:
@@ -281,18 +293,32 @@ def setParameter( self, param_name, data, **args ):
281293
except ValueError: pass
282294
# pdata = data if hasattr( data, '__iter__' ) else [ data ]
283295
param.setInitValue( data )
284-
# print ' <<---------------------------------------------------->> Set Parameter: ', param_name, " = ", str( data )
296+
# print ' <<---------------------------------------------------->> Set Parameter: ', param_name, " = ", str( data )
285297

286298
def getParameterValue(self, param_name, **args ):
287299
param = self.getParameter( param_name, **args )
288300
if ( param == None ): return None
289301
if param_name == 'Camera':
290302
value = str( param.values )
291303
else:
292-
value = str( param.getValues() )
293-
if param.getState(): value = value + ", vcs.on"
304+
pval = param.getValues()
305+
if hasattr( pval, '__iter__' ) and ( len( pval ) == 0 ):
306+
value = 'vcs.on' if param.getState() else None
307+
else:
308+
value = str( pval )
309+
if param.getState(): value = "( %s, vcs.on )" % value
294310
return value
295311

312+
def getParameterDescription(self, param_name, **args ):
313+
param = self.getParameter( param_name, **args )
314+
if ( param == None ): return None
315+
rv = {}
316+
ignorable = args.get( 'ignorable', [] )
317+
for key in param.values:
318+
if not key in ignorable:
319+
rv[key] = param.values[key]
320+
return str( rv ) if ( len(rv) > 0 ) else None
321+
296322
def getConfigurableFunction(self, name, **args ):
297323
rv = self.configurableFunctions.get( name, None )
298324
if rv == None:
@@ -510,14 +536,16 @@ def addCategory(self, cat_name ):
510536
class ConfigParameter:
511537

512538
def __init__(self, name, **args ):
513-
self.name = name
539+
self.name = name
540+
# print "Create ConfigParameter, name = ", name
514541
self.values = {}
515542
self.children = set()
516543
self.ValueChanged = SIGNAL( 'ValueChanged' )
517544
self.varname = args.get( 'varname', name )
518545
self.ptype = args.get( 'ptype', name )
519-
self.parent = args.get( 'parent', None )
546+
self.parent = args.get( 'parent', None )
520547
self.stateKeyList = []
548+
self.debug = False
521549
if self.parent<> None:
522550
self.parent.addChild( self )
523551
self.values.update( self.parent.values )
@@ -575,23 +603,27 @@ def unpack( self, value_strs ):
575603
print>>sys.stderr, " Error: parameter structure mismatch in %s ( %d vs %d )" % ( self.name, len( value_strs ), len( self.values.keys() ) ); sys.stderr.flush()
576604
for ( key, str_val ) in zip( self.valueKeyList, value_strs ):
577605
self.values[key] = deserialize_value( str_val )
578-
# print " && Unpack parameter %s: %s " % ( self.name, str( self.values ) ); sys.stdout.flush()
606+
if self.debug: print " && Unpack parameter %s: %s " % ( self.name, str( self.values ) )
579607

580608
def __len__(self):
581609
return len(self.values)
582610

583611
def __getitem__(self, key):
612+
if hasattr( key, 'id' ): key = key.id
584613
return self.values.get( key, None )
585614

586615
def __setitem__(self, key, value ):
587-
self.values[key] = value
616+
if hasattr( key, 'id' ): key = key.id
617+
self.values[key] = value
618+
if self.debug: print "Parameter[%s]: set value item[%s]: %s " % ( self.name, key, str(value))
588619
self.addValueKey( key )
589620

590621
def childUpdate( self, source, key, val ):
591622
self.setValue( key, val )
592623

593624
def __call__(self, **args ):
594625
self.values.update( args )
626+
if self.debug: print " && Update parameter %s: %s " % ( self.name, str( self.values ) )
595627
args1 = [ self.ptype ]
596628
for item in args.items():
597629
args1.extend( list(item) )
@@ -615,23 +647,31 @@ def getParameterType(self):
615647

616648
def initialize( self, config_str ):
617649
self.values = eval( config_str )
650+
if self.debug: print " && initialize parameter %s: %s " % ( self.name, str( self.values ) )
618651
self.sort()
619652

620653
def serialize( self ):
621654
return str( self.values )
622655

623656
def getValue( self, key=0, default_value=None ):
624-
if key == None: return default_value
657+
if key is None: return default_value
658+
if hasattr( key, 'id' ): key = key.id
625659
return self.values.get( key, default_value )
626660

627661
def getState( self ):
628662
return self.values.get( 'state', None )
629663

630664
def getInitValue( self, default_value=None ):
631-
ival = self.getValue( 'init' )
632-
if ( ival == None ) and ( self.parent <> None ):
633-
ival = self.parent.getInitValue()
634-
return default_value if ( ival == None ) else ival
665+
ival = self.getValue( 'relative' )
666+
if ival == None:
667+
ival = self.getValue( 'init' )
668+
if ival == None:
669+
ival = self.getValues()
670+
if len( ival ) == 0:
671+
ival = self.parent.getInitValue() if ( self.parent <> None ) else None
672+
if ( ival == None ):
673+
return default_value
674+
return ival
635675

636676
def setInitValue( self, value, update = False ):
637677
if type( value ) == dict:
@@ -647,26 +687,49 @@ def setInitValue( self, value, update = False ):
647687
self.setValue( 'init', value, update )
648688
self.setValues( [ value ] )
649689

650-
651690
def setValue( self, key, val, update=False ):
652-
self.values[ key ] = val
653-
self.addValueKey( key )
654-
if update:
655-
args1 = [ self.ptype, key, val, self.name]
656-
self.ValueChanged( args1 )
657-
if self.parent <> None:
658-
self.parent.childUpdate( self, key, val, )
659-
691+
if hasattr( key, 'id' ): key = key.id
692+
tval = val[0] if isinstance( val, list ) else val
693+
if isinstance( tval, str ) and ( tval[0] == '{' ): tval = eval(tval)
694+
if isinstance( tval, dict ):
695+
self.updateValues( tval, update )
696+
else:
697+
if self.debug:
698+
print "Parameter[%s]: set value[%s]: %s " % ( self.name, key, str(val))
699+
self.values[ key ] = val
700+
self.addValueKey( key )
701+
if update:
702+
args1 = [ self.ptype, key, val, self.name]
703+
self.ValueChanged( args1 )
704+
if self.parent <> None:
705+
self.parent.childUpdate( self, key, val, )
706+
707+
def updateValues( self, value_map, update ):
708+
for (key, val1) in value_map.items():
709+
val0 = self.values.get( key, None )
710+
if val0 <> val1:
711+
self.setValue( key, val1, update )
712+
660713
def signalUpdate( self ):
661714
args = [ self.ptype, self.getValues(), self.name]
662715
self.ValueChanged( args )
663716

664717
def setValues( self, values, update=False ):
665718
for key,value in enumerate( values ):
719+
if hasattr( key, 'id' ): key = key.id
666720
self.setValue( key, value )
667721
if not self.parent is None:
668722
self.parent.setValue( key, value )
669723

724+
def initValues( self, values, update=False ):
725+
for key,value in enumerate( values ):
726+
if hasattr( key, 'id' ): key = key.id
727+
val0 = self.values.get( key, None )
728+
if val0 == None:
729+
self.setValue( key, value )
730+
if not self.parent is None:
731+
self.parent.setValue( key, value )
732+
670733
def getValues( self ):
671734
vals = []
672735
for index in range( 0, 100 ):
@@ -712,21 +775,44 @@ def setRange(self, range ):
712775

713776
def getRange( self ):
714777
return ( self.rmin, self.rmax )
715-
778+
779+
class WrappedList:
780+
781+
def __init__(self,name):
782+
self.name = name
783+
self.list = []
784+
785+
def __get__(self):
786+
return self.list
787+
788+
def __set__(self, value):
789+
print "Set list %s: %s " % ( self.name, str( value ) )
790+
self.list = value
791+
792+
def __len__(self):
793+
return len( self.list )
794+
795+
def __getitem__( self, key ):
796+
return self.list[key]
797+
798+
def __setitem__(self, key, value ):
799+
print "Set list value %s[%s]: %s " % ( self.name, str(key), str( value ) )
800+
self.list[key] = value
801+
802+
716803
class ConfigurableFunction:
717804

718805
Default = 0
719-
Slider = 1
720-
ConfigurableFunctions = {}
721-
806+
Slider = 1
807+
ConfigurableFunctions = {}
808+
722809
def __init__( self, manager, name, **args ):
723810
self.name = name
811+
self.initial_value = []
724812
self.persist = args.get( 'persist', True )
725813
self.manager = manager
726-
# if name == 'XSlider':
727-
# print "."
728814
self.value = self.manager.addParameter( name, **args )
729-
self.initial_value = []
815+
# print " Create ConfigurableFunction %s, parm value = %s " % ( self.name, str(self.value) )
730816
self.type = 'generic'
731817
self.kwargs = args
732818
self.cfg_state = None
@@ -744,14 +830,16 @@ def __init__( self, manager, name, **args ):
744830
self.group = args.get( 'group', None )
745831
self._persisted = True
746832
self.interactionHandler = args.get( 'interactionHandler', None )
747-
748-
def updateInitialization( self, default_init_val=None ):
749-
ival = self.value.getInitValue()
750-
if ival <> None:
751-
self.initial_value = ival
752-
elif (self.initial_value == None):
753-
self.initial_value = default_init_val
754-
return self.initial_value
833+
834+
# def updateInitialization( self, default_init_val=None ):
835+
# ival = self.value.getInitValue()
836+
# if ival <> None:
837+
# self.initial_value = ival
838+
# elif (self.initial_value == None):
839+
# self.initial_value = default_init_val
840+
# if self.name == 'ZSlider':
841+
# print 'updateInitialization: ', str( self.initial_value )
842+
# return self.initial_value
755843

756844
def getState(self):
757845
return self.value.getValue('state')
@@ -850,21 +938,17 @@ def __init__( self, manager, name, **args ):
850938
self.UpdateSlidingSignal =SIGNAL('updateSliding')
851939
self.type = 'slider'
852940
self._range_bounds = args.get( 'range_bounds', None )
941+
self._slider_bounds = None
942+
self._slider_bounds_relative = True
853943
self._initial_range = None
854944
self.position = args.get( 'position', None )
855945
if self.initial_value <> None:
856946
for index, value in enumerate( self.initial_value ):
857947
self.value.setValue( index, value )
858-
948+
859949
def getPosition(self):
860950
return self.position[0] if self.position else None
861951

862-
def scaleRange( self, scale_factor ):
863-
if self._initial_range == None:
864-
self._initial_range = self._range_bounds
865-
if self._initial_range <> None:
866-
self._range_bounds = [ irv * scale_factor for irv in self._initial_range ]
867-
868952
def getValueLength(self):
869953
return len( self.sliderLabels )
870954

@@ -873,7 +957,21 @@ def getRangeBounds(self):
873957

874958
def setRangeBounds(self, value):
875959
self._range_bounds = copy.copy( value )
876-
960+
961+
def getSliderBounds(self):
962+
if self._slider_bounds == None:
963+
self.setSliderBoundsToRange()
964+
return copy.copy( self._slider_bounds )
965+
966+
def setSliderBoundsToRange( self ):
967+
self._slider_bounds = copy.copy( self._range_bounds )
968+
self._slider_bounds_relative = False
969+
970+
def setSliderBoundsToRelative( self ):
971+
self._slider_bounds = [ 0.01, 1.0 ]
972+
self._slider_bounds_relative = True
973+
974+
877975
def getTitle( dsid, name, attributes, showUnits=False ):
878976
long_name = attributes.get( 'long_name', attributes.get( 'standard_name', name ) )
879977
if not showUnits: return "%s:%s" % ( dsid, long_name )
@@ -1256,7 +1354,8 @@ def addMetadata( self, metadata ):
12561354
dataVector = self.fieldData.GetAbstractArray( 'metadata' )
12571355
if dataVector == None:
12581356
cname = getClassName( self )
1259-
if cname <> "InputSpecs": print " Can't get Metadata for class %s " % cname
1357+
if cname <> "InputSpecs":
1358+
print " Can't get Metadata for class %s " % cname
12601359
else:
12611360
enc_mdata = encodeToString( metadata )
12621361
dataVector.InsertNextValue( enc_mdata )

0 commit comments

Comments
 (0)