class setVar(NodeBase): def __init__(self, name, var=None): super(setVar, self).__init__(name) self.inExec = self.createInputPin(DEFAULT_IN_EXEC_NAME, 'ExecPin', None, self.compute) self.outExec = self.createOutputPin(DEFAULT_OUT_EXEC_NAME, 'ExecPin') self.var = var self.inp = CreateRawPin("value", self, self.var.dataType, PinDirection.Input) self.inp.disableOptions(PinOptions.RenamingEnabled) self.out = CreateRawPin("value", self, self.var.dataType, PinDirection.Output) self.out.disableOptions(PinOptions.RenamingEnabled) def recreateInput(self, dataType): self.inp.kill() del self.inp self.inp = None self.inp = CreateRawPin('value', self, dataType, PinDirection.Input) self.inp.disableOptions(PinOptions.RenamingEnabled) return self.out def recreateOutput(self, dataType): self.out.kill() del self.out self.out = None self.out = CreateRawPin('value', self, dataType, PinDirection.Output) self.out.disableOptions(PinOptions.RenamingEnabled) return self.out def variableUid(self): return self.var.uid def serialize(self): default = NodeBase.serialize(self) default['varUid'] = str(self.var.uid) return default @staticmethod def pinTypeHints(): return {'inputs': [], 'outputs': []} @staticmethod def category(): return PACKAGE_NAME @staticmethod def keywords(): return ["set", "var"] @staticmethod def description(): return 'Set variable value' def compute(self, *args, **kwargs): newValue = self.inp.getData() self.var.value = newValue self.out.setData(copy(self.var.value)) self.outExec.call(*args, **kwargs)
class getVar(NodeBase): def __init__(self, name, var=None): super(getVar, self).__init__(name) assert (isinstance(var, Variable)) self.var = var self.out = CreateRawPin('value', self, var.dataType, PinDirection.Output) self.out.disableOptions(PinOptions.RenamingEnabled) self.var.valueChanged.connect(self.onVarValueChanged) def variableUid(self): return self.var.uid def recreateOutput(self, dataType): self.out.kill() del self.out self.out = None self.out = CreateRawPin('value', self, dataType, PinDirection.Output) self.out.disableOptions(PinOptions.RenamingEnabled) return self.out def onVarValueChanged(self, *args, **kwargs): push(self.out) def serialize(self): default = NodeBase.serialize(self) default['varUid'] = str(self.var.uid) return default @staticmethod def pinTypeHints(): return {'inputs': [], 'outputs': []} @staticmethod def category(): return PACKAGE_NAME @staticmethod def keywords(): return ["get", "var"] @staticmethod def description(): return 'Access variable value' def compute(self, *args, **kwargs): self.out.setData(copy(self.var.value))
class getVar(NodeBase): def __init__(self, name, var=None): super(getVar, self).__init__(name) assert (isinstance(var, Variable)) self._var = var if var.structure == StructureType.Dict: self.out = self.createOutputPin('out', var.value.keyType, structure=StructureType.Dict) else: self.out = self.createOutputPin('out', var.dataType) self.out.disableOptions(PinOptions.RenamingEnabled) self._var.valueChanged.connect(self.onVarValueChanged) self._var.structureChanged.connect(self.onVarStructureChanged) self._var.dataTypeChanged.connect(self.onDataTypeChanged) self.bCacheEnabled = False def checkForErrors(self): super(getVar, self).checkForErrors() if self._var is None: self.setError("Undefined variable") def onDataTypeChanged(self, dataType): self.recreateOutput(dataType) self.checkForErrors() wrapper = self.getWrapper() if wrapper: wrapper.onVariableWasChanged() def updateStructure(self): self.out.disconnectAll() if self._var.structure == StructureType.Single: self.out.setAsArray(False) if self._var.structure == StructureType.Array: self.out.setAsArray(True) if self._var.structure == StructureType.Dict: self.out.setAsDict(True) # self.out._keyType = self.var.value.keyType def onVarStructureChanged(self, newStructure): self.out.structureType = newStructure self.updateStructure() def recreateOutput(self, dataType): self.out.kill() del self.out self.out = None self.out = CreateRawPin('out', self, dataType, PinDirection.Output) self.out.disableOptions(PinOptions.RenamingEnabled) self.updateStructure() return self.out @property def var(self): return self._var @var.setter def var(self, newVar): if self._var is not None: self._var.dataTypeChanged.disconnect(self.onDataTypeChanged) self._var.structureChanged.disconnect(self.onVarStructureChanged) self._var.valueChanged.disconnect(self.onVarValueChanged) self._var = newVar if newVar is not None: self._var.valueChanged.connect(self.onVarValueChanged) self._var.structureChanged.connect(self.onVarStructureChanged) self._var.dataTypeChanged.connect(self.onDataTypeChanged) self.recreateOutput(self._var.dataType) else: # self.out.kill() # del self.out # self.out = None pass self.checkForErrors() wrapper = self.getWrapper() if wrapper: wrapper.onVariableWasChanged() def postCreate(self, jsonTemplate=None): super(getVar, self).postCreate(jsonTemplate) self.updateStructure() def variableUid(self): return self.var.uid def onVarValueChanged(self, *args, **kwargs): push(self.out) def serialize(self): default = NodeBase.serialize(self) if self.var is not None: default['varUid'] = str(self.var.uid) return default @staticmethod def category(): return PACKAGE_NAME @staticmethod def keywords(): return ["get", "var"] @staticmethod def description(): return 'Access variable value' def compute(self, *args, **kwargs): self.out.setData(copy(self.var.value))
class setVar(NodeBase): def __init__(self, name, var=None): super(setVar, self).__init__(name) self.inExec = self.createInputPin(DEFAULT_IN_EXEC_NAME, 'ExecPin', None, self.compute) self.outExec = self.createOutputPin(DEFAULT_OUT_EXEC_NAME, 'ExecPin') self._var = var self.inp = CreateRawPin("inp", self, self._var.dataType, PinDirection.Input) self.inp.disableOptions(PinOptions.RenamingEnabled) self.out = CreateRawPin("out", self, self._var.dataType, PinDirection.Output) self.out.disableOptions(PinOptions.RenamingEnabled) self._var.dataTypeChanged.connect(self.onVarDataTypeChanged) self._var.structureChanged.connect(self.onVarStructureChanged) def updateStructure(self): self.out.disconnectAll() self.inp.disconnectAll() if self.var.structure == PinStructure.Single: self.out.setAsArray(False) self.inp.setAsArray(False) if self.var.structure == PinStructure.Array: self.out.setAsArray(True) self.inp.setAsArray(True) def checkForErrors(self): super(setVar, self).checkForErrors() if self._var is None: self.setError("Undefined variable") def onVarStructureChanged(self, newStructure): self.out.structureType = newStructure self.inp.structureType = newStructure self.updateStructure() def onVarDataTypeChanged(self, dataType): self.recreateInput(dataType) self.recreateOutput(dataType) self.autoAffectPins() self.updateStructure() self.checkForErrors() wrapper = self.getWrapper() if wrapper: wrapper.onVariableWasChanged() def postCreate(self, jsonTemplate=None): super(setVar, self).postCreate(jsonTemplate) self.updateStructure() @property def var(self): return self._var @var.setter def var(self, newVar): if self._var is not None: self._var.structureChanged.disconnect(self.onVarStructureChanged) self._var.dataTypeChanged.disconnect(self.onVarDataTypeChanged) self._var = newVar if self._var is not None: self._var.structureChanged.connect(self.onVarStructureChanged) self._var.dataTypeChanged.connect(self.onVarDataTypeChanged) self.recreateInput(newVar.dataType) self.recreateOutput(newVar.dataType) self.autoAffectPins() self.updateStructure() self.checkForErrors() wrapper = self.getWrapper() if wrapper: wrapper.onVariableWasChanged() def recreateInput(self, dataType): self.inp.kill() del self.inp self.inp = None self.inp = CreateRawPin('inp', self, dataType, PinDirection.Input) self.inp.disableOptions(PinOptions.RenamingEnabled) return self.inp def recreateOutput(self, dataType): self.out.kill() del self.out self.out = None self.out = CreateRawPin('out', self, dataType, PinDirection.Output) self.out.disableOptions(PinOptions.RenamingEnabled) return self.out def variableUid(self): return self.var.uid def serialize(self): default = NodeBase.serialize(self) default['varUid'] = str(self.var.uid) return default @staticmethod def category(): return PACKAGE_NAME @staticmethod def keywords(): return ["set", "var"] @staticmethod def description(): return 'Set variable value' def compute(self, *args, **kwargs): newValue = self.inp.getData() self.var.value = newValue self.out.setData(copy(self.var.value)) self.outExec.call(*args, **kwargs)