class SoftSelectionRow: def __init__(self, uiName): self.name = uiName def checkUiEnabled(self): ''' update UI enabled/disabled values ''' self.nativeSoftSelect.editUI(enable=self.useSoftSelect.getValue()) self.softSelectRadius.editUI(enable=self.useSoftSelect.getValue() and not self.nativeSoftSelect.getValue()) def uiChanged(self): ''' called when controls change value ''' self.checkUiEnabled() def create(self, parent): cmds.rowLayout(parent=parent, nc=2, adjustableColumn=2, columnWidth2=[Constants.MARGIN_COLUMN2, 50]) self.useSoftSelect = CheckBoxField( self.name + 'On', label='Use soft selection', defaultValue=0, annotation= 'extend effect outside selection with a fade out by defined distance' ) self.useSoftSelect.changeCommand.addHandler(self.uiChanged) self.nativeSoftSelect = CheckBoxField( self.name + 'Native', label='Native soft selection', defaultValue=0, annotation= 'use maya\'s soft selection instead of soft selection radius') self.nativeSoftSelect.changeCommand.addHandler(self.uiChanged) BaseTab.createFixedTitledRow(parent, "Selection radius") self.softSelectRadius = FloatField( self.name + 'Radius', minValue=0, defaultValue=1, step=0.1, annotation='soft selection radius is defined in world units') self.checkUiEnabled() def addToArgs(self, args): if self.useSoftSelect.getValue(): args['softSelectionRadius'] = self.softSelectRadius.getValue() if self.nativeSoftSelect.getValue(): args['nativeSoftSelection'] = 1
class SoftSelectionRow: def __init__(self,uiName): self.name = uiName def checkUiEnabled(self): ''' update UI enabled/disabled values ''' self.nativeSoftSelect.editUI(enable=self.useSoftSelect.getValue()) self.softSelectRadius.editUI(enable=self.useSoftSelect.getValue() and not self.nativeSoftSelect.getValue()) def uiChanged(self): ''' called when controls change value ''' self.checkUiEnabled() def create(self,parent): cmds.rowLayout(parent=parent,nc=2,adjustableColumn=2,columnWidth2=[Constants.MARGIN_COLUMN2,50]) self.useSoftSelect = CheckBoxField(self.name+'On',label='Use soft selection',defaultValue=0,annotation='extend effect outside selection with a fade out by defined distance') self.useSoftSelect.changeCommand.addHandler(self.uiChanged) self.nativeSoftSelect = CheckBoxField(self.name+'Native',label='Native soft selection',defaultValue=0,annotation='use maya\'s soft selection instead of soft selection radius') self.nativeSoftSelect.changeCommand.addHandler(self.uiChanged) BaseTab.createFixedTitledRow(parent, "Selection radius") self.softSelectRadius = FloatField(self.name+'Radius', minValue=0,defaultValue=1,step=0.1,annotation='soft selection radius is defined in world units') self.checkUiEnabled() def addToArgs(self,args): if self.useSoftSelect.getValue(): args['softSelectionRadius'] = self.softSelectRadius.getValue() if self.nativeSoftSelect.getValue(): args['nativeSoftSelection'] = 1;
class FloatSliderField: """ Similar to float slider group, only without caption """ def __init__(self, range=[0.0, 1.0]): assert len(range) == 2 self.model = None self.floatField = None self.slider = None self.onChange = Signal() self.onChanging = Signal() self.range = range self.flexibleRange = False def updateModel(self): if self.model is not None: self.model.set(self.getValue()) def sliderChanging(self, *args): """ handler for when float slider value is dragged """ self.floatField.setValue(cmds.floatSlider(self.slider, q=True, value=True)) self.updateModel() self.onChanging.emit() def sliderChanged(self, *args): self.updateModel() self.onChange.emit() def __updateSliderValue(self): value = self.floatField.getValue() minValue = cmds.floatSlider(self.slider, q=True, minValue=True) maxValue = cmds.floatSlider(self.slider, q=True, maxValue=True) if self.flexibleRange: # change min/max, if needed cmds.floatSlider(self.slider, e=True, minValue=min(value, minValue), maxValue=max(value, maxValue)) else: # change value, if needed value = min(maxValue, max(value, minValue)) cmds.floatSlider(self.slider, e=True, value=self.floatField.getValue()) def fieldChanged(self): """ handler for when float field value changes """ self.__updateSliderValue() self.updateModel() self.onChange.emit() def create(self): result = self.mainLayout = cmds.rowLayout(nc=2, adjustableColumn=2) step = (self.range[1] - self.range[0]) / 100.0 self.floatField = FloatField(self.model, step=step) if not self.flexibleRange: self.floatField.editUI(minValue=self.range[0], maxValue=self.range[1]) self.floatField.changeCommand.addHandler(self.fieldChanged) self.slider = cmds.floatSlider( value=self.floatField.getValue(), dragCommand=self.sliderChanging, changeCommand=self.sliderChanged, step=step, minValue=self.range[0], maxValue=self.range[1], ) self.__updateSliderValue() return result def setModel(self, model): self.floatField.setModel(model) self.__updateSliderValue() def setValue(self, value): self.floatField.setValue(value) self.__updateSliderValue() def getValue(self): return self.floatField.getValue() def setEnabled(self, enabled): cmds.layout(self.mainLayout, e=True, enable=enabled)
class FloatSliderField: ''' Similar to float slider group, only without caption ''' def __init__(self, range=(0.0, 1.0)): assert (len(range) == 2) self.model = None self.floatField = None self.slider = None self.onChange = Signal("floatSliderChange") self.onChanging = Signal("floatSliderChanging") self.range = range self.flexibleRange = False def updateModel(self): if self.model is not None: self.model.set(self.getValue()) def sliderChanging(self, *args): ''' handler for when float slider value is dragged ''' self.floatField.setValue( cmds.floatSlider(self.slider, q=True, value=True)) self.updateModel() self.onChanging.emit() def sliderChanged(self, *args): self.updateModel() self.onChange.emit() def __updateSliderValue(self): value = self.floatField.getValue() minValue = cmds.floatSlider(self.slider, q=True, minValue=True) maxValue = cmds.floatSlider(self.slider, q=True, maxValue=True) if self.flexibleRange: #change min/max, if needed cmds.floatSlider(self.slider, e=True, minValue=min(value, minValue), maxValue=max(value, maxValue)) else: #change value, if needed value = min(maxValue, max(value, minValue)) cmds.floatSlider(self.slider, e=True, value=self.floatField.getValue()) def fieldChanged(self): ''' handler for when float field value changes ''' self.__updateSliderValue() self.updateModel() self.onChange.emit() def create(self): result = self.mainLayout = cmds.rowLayout(nc=2, adjustableColumn=2) step = (self.range[1] - self.range[0]) / 100.0 self.floatField = FloatField(self.model, step=step) if not self.flexibleRange: self.floatField.editUI(minValue=self.range[0], maxValue=self.range[1]) self.floatField.changeCommand.addHandler(self.fieldChanged) self.slider = cmds.floatSlider(value=self.floatField.getValue(), dragCommand=self.sliderChanging, changeCommand=self.sliderChanged, step=step, minValue=self.range[0], maxValue=self.range[1]) self.__updateSliderValue() return result def setModel(self, model): self.floatField.setModel(model) self.__updateSliderValue() def setValue(self, value): self.floatField.setValue(value) self.__updateSliderValue() def getValue(self): return self.floatField.getValue() def setEnabled(self, enabled): cmds.layout(self.mainLayout, e=True, enable=enabled)