From c3f4f7ac7f08f06d063380dbe571f8e53cf9d424 Mon Sep 17 00:00:00 2001 From: ArnoChenFx Date: Fri, 31 Jan 2020 14:24:15 +0800 Subject: [PATCH 1/2] merge logic nodes to auto node example && change default node type --- NodeGraphQt/constants.py | 4 +- NodeGraphQt/widgets/viewer.py | 2 +- example_auto_nodes.py | 8 +- example_auto_nodes/basic_nodes.py | 6 +- example_auto_nodes/data_node.py | 44 +++--- example_auto_nodes/input_nodes.py | 32 +++- example_auto_nodes/logic_nodes.py | 78 ++++++++++ example_auto_nodes/math_node.py | 174 ---------------------- example_auto_nodes/node_base/auto_node.py | 20 ++- example_auto_nodes/viewer_nodes.py | 3 +- example_auto_nodes/widget_nodes.py | 5 +- 11 files changed, 161 insertions(+), 215 deletions(-) create mode 100644 example_auto_nodes/logic_nodes.py delete mode 100644 example_auto_nodes/math_node.py diff --git a/NodeGraphQt/constants.py b/NodeGraphQt/constants.py index 9f031e81..59ef50e4 100644 --- a/NodeGraphQt/constants.py +++ b/NodeGraphQt/constants.py @@ -109,7 +109,7 @@ # === ITEM CACHE MODE === # QGraphicsItem.NoCache -# QGraphicsItem.ItemCoordinateCache # QGraphicsItem.DeviceCoordinateCache +# QGraphicsItem.ItemCoordinateCache -ITEM_CACHE_MODE = QtWidgets.QGraphicsItem.ItemCoordinateCache \ No newline at end of file +ITEM_CACHE_MODE = QtWidgets.QGraphicsItem.DeviceCoordinateCache \ No newline at end of file diff --git a/NodeGraphQt/widgets/viewer.py b/NodeGraphQt/widgets/viewer.py index a3770b24..2482bae1 100644 --- a/NodeGraphQt/widgets/viewer.py +++ b/NodeGraphQt/widgets/viewer.py @@ -130,7 +130,7 @@ def _set_viewer_zoom(self, value, sensitivity=None, pos=None): self.scale(scale, scale, pos) def _set_viewer_pan(self, pos_x, pos_y): - speed = self._scene_range.width() * 0.001 + speed = self._scene_range.width() * 0.002 x = -pos_x * speed y = -pos_y * speed self._scene_range.adjust(x, y, x, y) diff --git a/example_auto_nodes.py b/example_auto_nodes.py index 1874ad2c..2f50301c 100644 --- a/example_auto_nodes.py +++ b/example_auto_nodes.py @@ -34,17 +34,19 @@ def GetNodesFromFolder(FolderPath): return nodes -def cook_node(graph,node): +def cook_node(graph, node): node.cook() -def print_functions(graph,node): +def print_functions(graph, node): for func in node.module_functions: print(func) -def toggle_auto_cook(graph,node): + +def toggle_auto_cook(graph, node): node.autoCook = not node.autoCook + if __name__ == '__main__': app = QtWidgets.QApplication([]) diff --git a/example_auto_nodes/basic_nodes.py b/example_auto_nodes/basic_nodes.py index f7da9e77..ca870824 100644 --- a/example_auto_nodes/basic_nodes.py +++ b/example_auto_nodes/basic_nodes.py @@ -1,12 +1,13 @@ from .node_base.auto_node import AutoNode + class FooNode(AutoNode): """ A node class with 2 inputs and 2 outputs. """ # unique node identifier. - __identifier__ = 'com.chantasticvfx' + __identifier__ = 'examples' # initial default node name. NODE_NAME = 'foo node' @@ -23,6 +24,7 @@ def __init__(self): self.add_output('out B') self.set_icon("example_auto_nodes/pear.png") + class BarNode(AutoNode): """ A node class with 3 inputs and 3 outputs. @@ -30,7 +32,7 @@ class BarNode(AutoNode): """ # unique node identifier. - __identifier__ = 'com.chantasticvfx' + __identifier__ = 'examples' # initial default node name. NODE_NAME = 'bar' diff --git a/example_auto_nodes/data_node.py b/example_auto_nodes/data_node.py index 3e00d0a9..3af72062 100644 --- a/example_auto_nodes/data_node.py +++ b/example_auto_nodes/data_node.py @@ -13,22 +13,27 @@ class VectorSplit(AutoNode): def __init__(self): super(VectorSplit, self).__init__() - self.defaultValue = [0.0, 0.0, 0.0] self.add_output('x') - self.create_property("x", self.defaultValue[0]) + self.create_property("x", 0.0) self.add_output('y') - self.create_property("y", self.defaultValue[1]) + self.create_property("y", 0.0) self.add_output('z') - self.create_property("z", self.defaultValue[2]) + self.create_property("z", 0.0) + self.add_output('w') + self.create_property("w", 0.0) - self.add_input("in vector",list) + self.add_input("in vector", list) + self.map = {0: "x", 1: "y", 2: "z", 3: "w"} def run(self): value = self.getInputData(0) - self.set_property("x", value[0]) - self.set_property("y", value[1]) - self.set_property("z", value[2]) + if type(value) is not list: + self.error("Input data not list") + for index, data in enumerate(value): + if index > 3: + return + self.set_property(self.map[index], data) class VectorMaker(AutoNode): @@ -42,17 +47,22 @@ class VectorMaker(AutoNode): def __init__(self): super(VectorMaker, self).__init__() - self.add_output('out') - self.create_property("out", [0, 0, 0]) - - self.add_input("x",float) - self.add_input("y",float) - self.add_input("z",float) + self.add_output('out', list) + self.create_property("out",None) - self.defaultValue = 0.0 + self.add_input("x", float) + self.add_input("y", float) + self.add_input("z", float) + self.add_input("w", float) def run(self): - self.set_property("out", [self.getInputData(0), self.getInputData(1), self.getInputData(2)]) + result = [] + for i in range(4): + data = self.getInputData(i) + if data is not None: + result.append(data) + + self.set_property("out", result) class DataConvect(AutoNode): @@ -67,7 +77,7 @@ def __init__(self): super(DataConvect, self).__init__() self.add_output('out') - self.create_property("out",None) + self.create_property("out", None) self.add_input("in data") items = ["all to int"] diff --git a/example_auto_nodes/input_nodes.py b/example_auto_nodes/input_nodes.py index 716aa931..8164188a 100644 --- a/example_auto_nodes/input_nodes.py +++ b/example_auto_nodes/input_nodes.py @@ -1,8 +1,7 @@ from NodeGraphQt import QtCore from NodeGraphQt.constants import (NODE_PROP_VECTOR2, NODE_PROP_VECTOR3, - NODE_PROP_VECTOR4, - NODE_PROP_SLIDER) + NODE_PROP_VECTOR4) from .node_base.auto_node import AutoNode import os @@ -19,7 +18,7 @@ class FloatInputNode(AutoNode): def __init__(self): super(FloatInputNode, self).__init__() self.output = self.add_output('out', float) - self.add_float_input('out', 'Float Value', value=0.0,range=(-10,10)) + self.add_float_input('out', 'Float Value', value=0.0, range=(-10, 10)) class IntInputNode(AutoNode): @@ -44,7 +43,7 @@ def __init__(self): super(Vector2InputNode, self).__init__() self.output = self.add_output('out', list) self.create_property( - "out", [0, 0], widget_type=NODE_PROP_VECTOR2) + "out", [0.0, 0.0], widget_type=NODE_PROP_VECTOR2) class Vector3InputNode(AutoNode): @@ -55,7 +54,7 @@ def __init__(self): super(Vector3InputNode, self).__init__() self.output = self.add_output('out', list) self.create_property( - "out", [0, 0, 0], widget_type=NODE_PROP_VECTOR3) + "out", [0.0, 0.0, 0.0], widget_type=NODE_PROP_VECTOR3) class Vector4InputNode(AutoNode): @@ -66,7 +65,7 @@ def __init__(self): super(Vector4InputNode, self).__init__() self.output = self.add_output('out', list) self.create_property( - "out", [0, 0, 0, 0], widget_type=NODE_PROP_VECTOR4) + "out", [0.0, 0.0, 0.0, 0.0], widget_type=NODE_PROP_VECTOR4) class TickTimeNode(AutoNode): @@ -106,7 +105,6 @@ def __init__(self): self.add_output('file content', str) self.create_property('file content', "") self.add_output('file path', str) - self.add_file_input('file path', 'File Path') def run(self): @@ -119,7 +117,7 @@ def run(self): except Exception as e: self.error(e) else: - self.error('No existe %s' % path) + self.error('No exist %s' % path) self.set_property('file content', '') @@ -142,3 +140,21 @@ def __init__(self): # create QLineEdit text input widget. self.add_text_input('out', 'Text Input') + + +class BoolInputNode(AutoNode): + """ + Input Bool data. + """ + + __identifier__ = 'Inputs' + NODE_NAME = 'Bool' + + def __init__(self): + super(BoolInputNode, self).__init__() + self.add_output('out', bool) + self.create_property('out', True) + self.add_combo_menu('combo', 'Bool value', items=['True', 'False']) + + def run(self): + self.set_property('out', eval(self.get_property('combo'))) diff --git a/example_auto_nodes/logic_nodes.py b/example_auto_nodes/logic_nodes.py new file mode 100644 index 00000000..39ab743b --- /dev/null +++ b/example_auto_nodes/logic_nodes.py @@ -0,0 +1,78 @@ +from .basic_nodes import AutoNode + + +class IfNode(AutoNode): + """ + if node. + """ + + __identifier__ = 'Logics' + NODE_NAME = 'If' + + def __init__(self): + super(IfNode, self).__init__() + self.condition = self.add_input('condition') + self._then = self.add_input('then') + self._else = self.add_input('else') + self.add_output('out') + self.create_property('out', None) + + def run(self): + if self.getInputData(self.condition): + result = self.getInputData(self._then) + else: + result = self.getInputData(self._else) + + self.set_property('out', result) + + +class BooleanNode(AutoNode): + """ + Boolean Logic funtions node. + """ + + __identifier__ = 'Logics' + + NODE_NAME = 'Boolean' + + logics = {'and': 'a and b', + 'or': 'a or b', + 'xor': '(not a and b) or (a and not b)', + 'not': 'not a'} + + def __init__(self): + super(BooleanNode, self).__init__() + self.a = self.add_input('a',bool) + self.b = self.add_input('b',bool) + self.add_output('out',bool) + self.create_property('out', None) + self.add_combo_menu('funcs', + 'Functions', + items=list(self.logics.keys()), + tab='widgets') + + self.func = self.logics['and'] + # switch math function type + self.view.widgets['funcs'].value_changed.connect(self.addFunction) + + def addFunction(self, prop, func): + """ + Create inputs based on math functions arguments. + """ + self.func = self.logics[func] + if self.b.visible() and not 'b' in self.func: + self.b.set_visible(False) + elif not self.b.visible(): + self.b.set_visible(True) + self.cook() + + def run(self): + a = self.getInputData(self.a) + b = self.getInputData(self.b) + + if a is None or (b is None and 'b' in self.func): + self.error("No inputs!") + return + + self.set_property('out', eval(self.func)) + diff --git a/example_auto_nodes/math_node.py b/example_auto_nodes/math_node.py deleted file mode 100644 index 84b245d1..00000000 --- a/example_auto_nodes/math_node.py +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -import math -import inspect -from functools import partial - -# add basic math functions to math library -math.add = lambda x, y: x + y -math.sub = lambda x, y: x - y -math.mul = lambda x, y: x * y -math.div = lambda x, y: x / y - -# Transform float to functions -for constant in ['pi', 'e', 'tau', 'inf', 'nan']: - setattr(math, constant, partial(lambda x: x, getattr(math, constant))) - -from NodeGraphQt import BaseNode -from .node_base.auto_node import AutoNode - -class MathFunctionsNode(AutoNode): - """ - Math functions node. - """ - - # set a unique node identifier. - __identifier__ = 'Math' - - # set the initial default node name. - NODE_NAME = 'Math Functions' - - mathFuncs = [func for func in dir(math) if not func.startswith('_')] - - def __init__(self): - super(MathFunctionsNode, self).__init__() - self.set_color(25, 58, 51) - self.add_combo_menu('funcs', 'Functions', items=self.mathFuncs, - tab='widgets') - - self.defaultValue = 0.0 - # switch math function type - self.view.widgets['funcs'].value_changed.connect(self.addFunction) - self.view.widgets['funcs'].value_changed.connect(self.cook) - self.add_output('output') - self.create_property('output', None) - - self.view.widgets['funcs'].widget.setCurrentIndex(2) - - def addFunction(self, prop, func): - """ - Create inputs based on math functions arguments. - """ - self.func = getattr(math, func) - dataFunc = inspect.getfullargspec(self.func) - - for arg in dataFunc.args: - if arg not in self.inputs().keys(): - inPort = self.add_input(arg,float) - - for inPort in self.input_ports(): - if inPort.name() in dataFunc.args: - if not inPort.visible(): - inPort.set_visible(True) - else: - inPort.set_visible(False) - - def run(self): - """ - Evaluate all entries, pass them as arguments of the - chosen mathematical function. - """ - args = [] - for port in self.input_ports(): - if not port.visible(): - continue - data = self.getInputData(port) - if data and (type(data) is float or type(data) is int): - args.append(data) - else: - args.append(0) - try: - # Execute math function with arguments. - data = self.func(*args) - - self.set_property('output', data) - except KeyError as error: - self.error("An input is missing! %s" % str(error)) - except TypeError as error: - self.error("Error evaluating function: %s" % str(error)) - except ValueError as error: - self.error("Error input data type: %s" % str(error)) - except Exception as error: - self.error("Error : %s" % str(error)) - -class VectorValue(AutoNode): - """ - Create a basic vector data - """ - - __identifier__ = 'Math' - NODE_NAME = 'Vector' - - def __init__(self): - super(VectorValue, self).__init__() - value = [0.0, 0.0, 0.0] - - self.add_output('out',list) - self.create_property("out", value) - - self.add_float_input('0', 'X', value=value[0], tab='widgets') - self.view.widgets['0'].value_changed.connect(lambda: self.updateValue(0)) - - self.add_float_input('1', 'Y', value=value[1], tab='widgets') - self.view.widgets['1'].value_changed.connect(lambda: self.updateValue(1)) - - self.add_float_input('2', 'Z', value=value[2], tab='widgets') - self.view.widgets['2'].value_changed.connect(lambda: self.updateValue(2)) - - self.defaultValue = value - - def updateValue(self, index): - self.get_property("out")[index] = self.get_property(str(index)) - self.cook() - - -class VectorSplit(AutoNode): - """ - Splict a vector to x,y,z - """ - - __identifier__ = 'Math' - NODE_NAME = 'Vector Split' - - def __init__(self): - super(VectorSplit, self).__init__() - self.defaultValue = [0.0, 0.0, 0.0] - - self.add_output('x') - self.create_property("x", self.defaultValue[0]) - self.add_output('y') - self.create_property("y", self.defaultValue[1]) - self.add_output('z') - self.create_property("z", self.defaultValue[2]) - - self.add_input("in vector",list) - - def run(self): - value = self.getInputData(0) - self.set_property("x", value[0]) - self.set_property("y", value[1]) - self.set_property("z", value[2]) - - -class VectorMaker(AutoNode): - """ - Create a vector by three float value - """ - - __identifier__ = 'Math' - NODE_NAME = 'Vector Maker' - - def __init__(self): - super(VectorMaker, self).__init__() - - self.add_output('out') - self.create_property("out", [0, 0, 0]) - - self.add_input("x",float) - self.add_input("y",float) - self.add_input("z",float) - - self.defaultValue = 0.0 - - def run(self): - self.set_property("out", [self.getInputData(0), self.getInputData(1), self.getInputData(2)]) diff --git a/example_auto_nodes/node_base/auto_node.py b/example_auto_nodes/node_base/auto_node.py index 7cf1b517..fd0aeffc 100644 --- a/example_auto_nodes/node_base/auto_node.py +++ b/example_auto_nodes/node_base/auto_node.py @@ -1,9 +1,11 @@ from NodeGraphQt.base.node import BaseNode from NodeGraphQt.base.port import Port from NodeGraphQt.constants import NODE_PROP +from NodeGraphQt import QtCore import random import copy + def rand_color(seed_type): seed = id(seed_type) random.seed(seed + 10) @@ -15,9 +17,12 @@ def rand_color(seed_type): return (r, g, b, 255) -class AutoNode(BaseNode): +class AutoNode(BaseNode,QtCore.QObject): + cooked = QtCore.Signal() + def __init__(self, defaultInputType=None, defaultOutputType=None): super(AutoNode, self).__init__() + QtCore.QObject.__init__(self) self.needCook = True self._autoCook = True self._error = False @@ -52,6 +57,11 @@ def cookNextNode(self): n.cook() def getInputData(self, port): + # get input data by input Port,the type of "port" can be : + # int : Port index + # str : Port name + # Port : Port object + if type(port) is int: to_port = self.input(port) elif type(port) is str: @@ -99,18 +109,18 @@ def cook(self, forceCook=False): if self.error(): return + self.cooked.emit() self.cookNextNode() def run(self): pass - # print("RUN {} Node".format(self.name())) def on_input_connected(self, to_port, from_port): if self.checkPortType(to_port, from_port): self.cook() else: self.needCook = False - self.graph._on_connection_changed([(from_port.view, to_port.view)], []) + to_port.disconnect_from(from_port) def on_input_disconnected(self, to_port, from_port): if not self.needCook: @@ -124,6 +134,9 @@ def set_disabled(self, mode=False): self.cook() def checkPortType(self, to_port, from_port): + # None type port can connect with any other type port + # types in self.matchTypes can connect with each other + if hasattr(to_port, "DataType") and hasattr(from_port, "DataType"): if to_port.DataType is not from_port.DataType: for types in self.matchTypes: @@ -139,7 +152,6 @@ def set_property(self, name, value): if name in self.model.custom_properties.keys(): self.cook() - def set_port_type(self, port, value_type): current_port = None diff --git a/example_auto_nodes/viewer_nodes.py b/example_auto_nodes/viewer_nodes.py index 26bbf89d..775e3172 100644 --- a/example_auto_nodes/viewer_nodes.py +++ b/example_auto_nodes/viewer_nodes.py @@ -1,6 +1,5 @@ from .node_base.auto_node import AutoNode -from NodeGraphQt.constants import NODE_PROP_QTEXTEDIT -from NodeGraphQt.widgets.node_widgets import NodeLineEdit + class DataViewerNode(AutoNode): __identifier__ = 'Viewers' diff --git a/example_auto_nodes/widget_nodes.py b/example_auto_nodes/widget_nodes.py index 24611c4c..ff5f90a7 100644 --- a/example_auto_nodes/widget_nodes.py +++ b/example_auto_nodes/widget_nodes.py @@ -1,12 +1,13 @@ from .node_base.auto_node import AutoNode + class DropdownMenuNode(AutoNode): """ An example node with a embedded added QCombobox menu. """ # unique node identifier. - __identifier__ = 'com.chantasticvfx' + __identifier__ = 'examples' # initial default node name. NODE_NAME = 'menu' @@ -30,7 +31,7 @@ class CheckboxNode(AutoNode): """ # set a unique node identifier. - __identifier__ = 'com.chantasticvfx' + __identifier__ = 'examples' # set the initial default node name. NODE_NAME = 'checkbox' From 5d9446bb1183068abe4a302737a557d0353db6cb Mon Sep 17 00:00:00 2001 From: ArnoChenFx Date: Fri, 31 Jan 2020 15:38:40 +0800 Subject: [PATCH 2/2] add numpy icon --- example_auto_nodes/basic_nodes.py | 2 +- example_auto_nodes/icons/numpy.png | Bin 0 -> 56895 bytes example_auto_nodes/{ => icons}/pear.png | Bin example_auto_nodes/logic_nodes.py | 9 ++++----- example_auto_nodes/module_nodes.py | 11 ++++++----- example_auto_nodes/node_base/module_node.py | 1 - 6 files changed, 11 insertions(+), 12 deletions(-) create mode 100644 example_auto_nodes/icons/numpy.png rename example_auto_nodes/{ => icons}/pear.png (100%) diff --git a/example_auto_nodes/basic_nodes.py b/example_auto_nodes/basic_nodes.py index ca870824..b731020e 100644 --- a/example_auto_nodes/basic_nodes.py +++ b/example_auto_nodes/basic_nodes.py @@ -22,7 +22,7 @@ def __init__(self): # create node outputs. self.add_output('out A') self.add_output('out B') - self.set_icon("example_auto_nodes/pear.png") + self.set_icon("example_auto_nodes/icons/pear.png") class BarNode(AutoNode): diff --git a/example_auto_nodes/icons/numpy.png b/example_auto_nodes/icons/numpy.png new file mode 100644 index 0000000000000000000000000000000000000000..4812a438e7a2e68f9542cc71ef266dc98e5e24e1 GIT binary patch literal 56895 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 literal 0 HcmV?d00001 diff --git a/example_auto_nodes/pear.png b/example_auto_nodes/icons/pear.png similarity index 100% rename from example_auto_nodes/pear.png rename to example_auto_nodes/icons/pear.png diff --git a/example_auto_nodes/logic_nodes.py b/example_auto_nodes/logic_nodes.py index 39ab743b..ee85b51a 100644 --- a/example_auto_nodes/logic_nodes.py +++ b/example_auto_nodes/logic_nodes.py @@ -15,7 +15,7 @@ def __init__(self): self._then = self.add_input('then') self._else = self.add_input('else') self.add_output('out') - self.create_property('out', None) + self.create_property('out', None) def run(self): if self.getInputData(self.condition): @@ -42,9 +42,9 @@ class BooleanNode(AutoNode): def __init__(self): super(BooleanNode, self).__init__() - self.a = self.add_input('a',bool) - self.b = self.add_input('b',bool) - self.add_output('out',bool) + self.a = self.add_input('a', bool) + self.b = self.add_input('b', bool) + self.add_output('out', bool) self.create_property('out', None) self.add_combo_menu('funcs', 'Functions', @@ -75,4 +75,3 @@ def run(self): return self.set_property('out', eval(self.func)) - diff --git a/example_auto_nodes/module_nodes.py b/example_auto_nodes/module_nodes.py index 915266a6..ce9994e3 100644 --- a/example_auto_nodes/module_nodes.py +++ b/example_auto_nodes/module_nodes.py @@ -9,11 +9,11 @@ import numpydoc.docscrape import inspect -import example_auto_nodes.wrappers.math as _math -import example_auto_nodes.wrappers.list as _list -import example_auto_nodes.wrappers.dict as _dict -import example_auto_nodes.wrappers.str as _str -import example_auto_nodes.wrappers.tuple as _tuple +from .wrappers import math as _math +from .wrappers import list as _list +from .wrappers import dict as _dict +from .wrappers import str as _str +from .wrappers import tuple as _tuple class MathModuleNode(ModuleNode): @@ -103,6 +103,7 @@ class numpyModuleNode(ModuleNode): def __init__(self): super(numpyModuleNode, self).__init__() + self.set_icon("example_auto_nodes/icons/numpy.png") def is_function(self, obj): result = super(numpyModuleNode, self).is_function(obj) diff --git a/example_auto_nodes/node_base/module_node.py b/example_auto_nodes/node_base/module_node.py index cca8571a..2d80aba3 100644 --- a/example_auto_nodes/node_base/module_node.py +++ b/example_auto_nodes/node_base/module_node.py @@ -46,7 +46,6 @@ class ModuleNode(AutoNode): def __init__(self,defaultInputType=None,defaultOutputType=None): super(ModuleNode, self).__init__(defaultInputType,defaultOutputType) - self.set_color(25, 58, 51) self.add_combo_menu('funcs', 'Functions', items=list(self.module_functions.keys())) # switch math function type