From ca5152b89a07a6116a30964948f67ced8854f049 Mon Sep 17 00:00:00 2001 From: Nicole Rappe Date: Wed, 12 Feb 2025 21:43:48 -0700 Subject: [PATCH] Migrated codebase to OdenGraphQT Successfully --- Nodes/__pycache__/array_node.cpython-312.pyc | Bin 2808 -> 2808 bytes .../__pycache__/backdrop_node.cpython-312.pyc | Bin 9706 -> 0 bytes .../base_circle_node.cpython-312.pyc | Bin 1690 -> 0 bytes Nodes/__pycache__/base_node.cpython-312.pyc | Bin 36498 -> 0 bytes .../character_status_node.cpython-312.pyc | Bin 8370 -> 8370 bytes Nodes/__pycache__/data_node.cpython-312.pyc | Bin 6062 -> 6062 bytes Nodes/__pycache__/group_node.cpython-312.pyc | Bin 7825 -> 0 bytes .../math_operation_node.cpython-312.pyc | Bin 4850 -> 4850 bytes Nodes/__pycache__/port_node.cpython-312.pyc | Bin 5089 -> 0 bytes Nodes/array_node.py | 4 +- Nodes/backdrop_node.py | 184 ---- Nodes/base_circle_node.py | 46 - Nodes/base_node.py | 876 ------------------ Nodes/character_status_node.py | 3 +- Nodes/data_node.py | 4 +- Nodes/group_node.py | 176 ---- Nodes/math_operation_node.py | 3 +- Nodes/port_node.py | 135 --- borealis.py | 4 +- debug_processed.png | Bin 399 -> 2834 bytes debug_screenshot.png | Bin 3435 -> 14133 bytes 21 files changed, 11 insertions(+), 1424 deletions(-) delete mode 100644 Nodes/__pycache__/backdrop_node.cpython-312.pyc delete mode 100644 Nodes/__pycache__/base_circle_node.cpython-312.pyc delete mode 100644 Nodes/__pycache__/base_node.cpython-312.pyc delete mode 100644 Nodes/__pycache__/group_node.cpython-312.pyc delete mode 100644 Nodes/__pycache__/port_node.cpython-312.pyc delete mode 100644 Nodes/backdrop_node.py delete mode 100644 Nodes/base_circle_node.py delete mode 100644 Nodes/base_node.py delete mode 100644 Nodes/group_node.py delete mode 100644 Nodes/port_node.py diff --git a/Nodes/__pycache__/array_node.cpython-312.pyc b/Nodes/__pycache__/array_node.cpython-312.pyc index 62dd897dd4dee9890d54343ea356f50b76a59381..aaf81b724d53154651f138275ef0afaa388a2f9f 100644 GIT binary patch delta 67 zcmew%`a_iWG%qg~0}z}nTARLqBkvhzM!wCrn76SoN^YLW@t2X2WpY24IE#NuYTo2k UT=x8WjCvC|zA^x*B5|ND0Ob)ArT_o{ delta 67 zcmew%`a_iWG%qg~0}yNrTbq7(BkvhzMuE+@n76SoN^hRX@t2X2V{$*2IE!C?O6ufQ UT=x71jCvC|zA^x*B5|ND0NrI1hX4Qo diff --git a/Nodes/__pycache__/backdrop_node.cpython-312.pyc b/Nodes/__pycache__/backdrop_node.cpython-312.pyc deleted file mode 100644 index c34472237e4f4f528ba6921c6c82125632d56674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9706 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 Y@8~b7SH5b9yXf9qCx1oZFWJfe03`&^lmGw# diff --git a/Nodes/__pycache__/base_circle_node.cpython-312.pyc b/Nodes/__pycache__/base_circle_node.cpython-312.pyc deleted file mode 100644 index 571e8f6ba1030ba728d92bda6616875756728d71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1690 zcma)6O^;hO6t(l!%#;jbRUr^Ebdf}AUPmK!6Ae{c7|JXr1A+yLMs+;TPU7;u#`bHI zszS4C~jLFFeVAqL0eOnto+k zZP$LsPMc=+Yr?8tEEU8XZ)xKPd2iRL&@b>sJzGppTG0O#wp64~CFz$W?U!Y#Uy+sj zWJqDNwSM(Jnb3ai1JbT$8*~1GTSP##&Y%o-!z56liky;6M*}t(+}iXmd0T_QdJgz- ztY8eKT{j{bzwf+Ns=I!#gUw=n~!v#$u?kW;;Y25 z+uDtpU{Vi<%788=mDQujE97_{s2nS!orrwZky?z52)kYOe1)eALoreS^}LH*V{9)* zkQeuJzr7?HDRtH|~eH{#E;G}1?@VwfA#5-ik1 ztqhZKC^Yzppn2i^6u>!qlQnhh-So#Ix;315BRGomuz9Klmz{?L&`yg04rVCQz!e)s zaN?`nz5Ta$c<<`o4$|&T^PK<11q=)%03YWqtAZgUGnY1RZJH?4TFU(PYxl1S1)+lkcIph&7B1)#@A?>v*Sv5DzAR?>J zJuOpRn6WE$2;aFQ-fdRopY-fb8$c&n6&4hdU{NLt~Wl5zLG!GFMNID$Ijk&pZrws zoxl_^b*S2BP%>U6&a-vS!&s&P#xHPwl!{`eDo*5HedP=`QpdS diff --git a/Nodes/__pycache__/base_node.cpython-312.pyc b/Nodes/__pycache__/base_node.cpython-312.pyc deleted file mode 100644 index 739b435f717fac9741a914791c363fb7e9e60fd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36498 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

Fy;-8(OK&W0Dt zTV~v8cZue_eaqeWi%)>JtR{eI-agGH+Wx|1%o+PoYG(2owvYb*~o9xYDJSOQnse(#9W@HqY!!cWhef z*puqmv)J+2!rI4E9goeOn6+QYznuS#g87ceQfnWd>AukT#V6s0Ro3#ZuVTjg^E(cq zYM*VHM9Uj%_m$>lh(f>0`0|DO!xs~6P24NO@I3c~F(jVJ|CIn+y8LelW#PmcW6afZ z8467{=;DWUg8#4*Ry3tbn|@H*a(`H{-i#G;3e_AWjMpyO&&I?V`mE225~AhzmnM;w zO>xI5h_Hr-@_lTQ7A#L5FVre${6eoTGVZjHMsV_nbFKlEJ;hmLu)jTT;Ep~1oM82g?hyn?YAlPyV#iLvk?eVb4{Ih%`A zde)R7y#aRia&8tzz|}1DVMqQwN8|gBy&&)h=*yg$uQQoL@4B2#*)>sD zpQ3!E>FZ0>BzpPXSF2ffvlGm#j=kt95&>UAw4|T z)g!6Otuvl9zGXF;Dr{t4c6*oVx>I%CZ%GSvPc4)kp7$Q6!>^fp-S(7wdm6bT7bCAe zM}d)xBdMuIKrUL~(1bN2i9;fUNm^{;XW?fdq z8FD9?z_PAYNcCMktnrx$m35H>3TvPvRE=)YkzN-gaX2#jJXA=YpcOm=!Hj8_$k^*n zXl2-bjBod{0}gViE7!wSk5`juk*jYLdakZRXEz{ou}>3b^@#~tRyFEUwQ=`3lZp4) zX~U}fK?9LAYa+mC!0Qe+vH29I$&Sy+F;i#OyxoRJ%)dsdyUWB)7`xZ7EJN${OzD?* zA*2-Z2?;{V`Z{aMmg`UTS)Q1zyBiVyIZfD8C>axWjZj*7$$QZYm)7aa)2WgUNYR+E zavEma6@!YX4I8!Bq7@ZIYTNEt|$z zSEzZywk$YnJTt{uP$;RN*N!Mwu@SWp@Qv(;g4EpwDN=KFRNu!wfFg(KOS{Ib{Qn_G z(TOGxWvO4HEOiV-Fu+IpV<|_eNN6cX$+s}Av*aKP!H5^32}ar-Q98w|-rbL2q-HVr zR+eBS{}8pxBB4y`(cZj*)RX<#2LdMlEwzw5n=0?w6ea zm)I`nkju>04q((y;6uUijExKph4H~G@$@ih_+l&!*Xv9zoxIsbLm3PC?R{9^Q9m)v zB~+x*9q6>LowAiToVpv)zTQecxcE#gc9}gtj<0m-Ts9gXiVPA{mB(YoVO`-<_()Np z-LL`VenHMlJN$l7gS@(1)E0+#CyUF_o}k zkDRfdBBNF^Tn1T{?k9BFC>ZV;V%dK3L$$p4cHyC5| zT4%}sT4}wnrEZookCZ;P%pM;SdwP#O)5pvSrm^}pz+Qd4ex*?NG%Stg(KIYhz4CiN zO!<9)OcbruvCy2+w4!18{J05GMGaBeH{txYKEI8fqvE&s_Ci4n;g!7zxmd^mnNbIE zo5xm`5BBvQq%bYD^|7$+pnsF%4l+YyFsOKfw6AkK8b;U~3_d>|ijtuUclp7f6dy#O zp!aB3cd&Qgk#4z)n!SlYD}l!dbQ3s0ppC#&1jsW-9wHDUkRUKY-~|FN6JQR4-=NSH z0(&PN}H*#uV--usB4}1_={^4cer*_fhzTIWRN7i5J zdEe=9)!y-VTzlWIs&yT(z28~sYFG~ByV~xQ<+~d0lzCi@cdC4@jmu3S!?L5nReyWGO?c9F$c97H^!r1$UR%0)9lKxNZ!34zEw=;QZWo@gJ!MNjx@Xzp zcU9c}v`y%-9kHc5_bxlyTorfvY{jmvcf?}XwmV`SUc4J%d3T{}%bgkzK-C_^y=cpK zZKrzG5!gXs9o4Y;PE~=c>CPIDt3?l0-l_7q09st0JBMu*uKGJ2rl8N|`&m6x%Bo0Gse9B*?sT z+hMcW{-@CVcfz3`3LQTbHvEmS|L^TioBgK(!22G-w)5}pE}MN>0C=zD(?vGl%;ft5 J{W4be{{S2@;idop diff --git a/Nodes/__pycache__/character_status_node.cpython-312.pyc b/Nodes/__pycache__/character_status_node.cpython-312.pyc index 4ed2a54d240aea06e72481b71f468d25240be5d0..02e454c6b38cc8f67fef6577abd08358254c714f 100644 GIT binary patch delta 31 lcmdnwxXF?CG%qg~0}vP$uT4L_kylcI#XluAZ?cv`2LO^~2~7Y1 delta 31 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 Zb5iP^*EbpbY+i_b1s=Zjl)(>~{4dNc!u: } - """ - return {p.name(): p for p in self._inputs} - - def input_ports(self): - """ - Return all input ports. - - Returns: - list[NodeGraphQt.Port]: node input ports. - """ - return self._inputs - - def outputs(self): - """ - Returns all the output ports from the node. - - Returns: - dict: {: } - """ - return {p.name(): p for p in self._outputs} - - def output_ports(self): - """ - Return all output ports. - - Returns: - list[NodeGraphQt.Port]: node output ports. - """ - return self._outputs - - def input(self, index): - """ - Return the input port with the matching index. - - Args: - index (int): index of the input port. - - Returns: - NodeGraphQt.Port: port object. - """ - return self._inputs[index] - - def set_input(self, index, port): - """ - Creates a connection pipe to the targeted output :class:`Port`. - - Args: - index (int): index of the port. - port (NodeGraphQt.Port): port object. - """ - src_port = self.input(index) - src_port.connect_to(port) - - def output(self, index): - """ - Return the output port with the matching index. - - Args: - index (int): index of the output port. - - Returns: - NodeGraphQt.Port: port object. - """ - return self._outputs[index] - - def set_output(self, index, port): - """ - Creates a connection pipe to the targeted input :class:`Port`. - - Args: - index (int): index of the port. - port (NodeGraphQt.Port): port object. - """ - src_port = self.output(index) - src_port.connect_to(port) - - def connected_input_nodes(self): - """ - Returns all nodes connected from the input ports. - - Returns: - dict: {: } - """ - nodes = OrderedDict() - for p in self.input_ports(): - nodes[p] = [cp.node() for cp in p.connected_ports()] - return nodes - - def connected_output_nodes(self): - """ - Returns all nodes connected from the output ports. - - Returns: - dict: {: } - """ - nodes = OrderedDict() - for p in self.output_ports(): - nodes[p] = [cp.node() for cp in p.connected_ports()] - return nodes - - def add_accept_port_type(self, port, port_type_data): - """ - Add an accept constrain to a specified node port. - - Once a constraint has been added only ports of that type specified will - be allowed a pipe connection. - - port type data example - - .. highlight:: python - .. code-block:: python - - { - 'port_name': 'foo' - 'port_type': PortTypeEnum.IN.value - 'node_type': 'io.github.jchanvfx.NodeClass' - } - - See Also: - :meth:`NodeGraphQt.BaseNode.accepted_port_types` - - Args: - port (NodeGraphQt.Port): port to assign constrain to. - port_type_data (dict): port type data to accept a connection - """ - node_ports = self._inputs + self._outputs - if port not in node_ports: - raise PortError('Node does not contain port: "{}"'.format(port)) - - self._model.add_port_accept_connection_type( - port_name=port.name(), - port_type=port.type_(), - node_type=self.type_, - accept_pname=port_type_data['port_name'], - accept_ptype=port_type_data['port_type'], - accept_ntype=port_type_data['node_type'] - ) - - def accepted_port_types(self, port): - """ - Returns a dictionary of connection constrains of the port types - that allow for a pipe connection to this node. - - Args: - port (NodeGraphQt.Port): port object. - - Returns: - dict: {: {: []}} - """ - ports = self._inputs + self._outputs - if port not in ports: - raise PortError('Node does not contain port "{}"'.format(port)) - - accepted_types = self.graph.model.port_accept_connection_types( - node_type=self.type_, - port_type=port.type_(), - port_name=port.name() - ) - return accepted_types - - def add_reject_port_type(self, port, port_type_data): - """ - Add a reject constrain to a specified node port. - - Once a constraint has been added only ports of that type specified will - NOT be allowed a pipe connection. - - port type data example - - .. highlight:: python - .. code-block:: python - - { - 'port_name': 'foo' - 'port_type': PortTypeEnum.IN.value - 'node_type': 'io.github.jchanvfx.NodeClass' - } - - See Also: - :meth:`NodeGraphQt.Port.rejected_port_types` - - Args: - port (NodeGraphQt.Port): port to assign constrain to. - port_type_data (dict): port type data to reject a connection - """ - node_ports = self._inputs + self._outputs - if port not in node_ports: - raise PortError('Node does not contain port: "{}"'.format(port)) - - self._model.add_port_reject_connection_type( - port_name=port.name(), - port_type=port.type_(), - node_type=self.type_, - reject_pname=port_type_data['port_name'], - reject_ptype=port_type_data['port_type'], - reject_ntype=port_type_data['node_type'] - ) - - def rejected_port_types(self, port): - """ - Returns a dictionary of connection constrains of the port types - that are NOT allowed for a pipe connection to this node. - - Args: - port (NodeGraphQt.Port): port object. - - Returns: - dict: {: {: []}} - """ - ports = self._inputs + self._outputs - if port not in ports: - raise PortError('Node does not contain port "{}"'.format(port)) - - rejected_types = self.graph.model.port_reject_connection_types( - node_type=self.type_, - port_type=port.type_(), - port_name=port.name() - ) - return rejected_types - - def on_input_connected(self, in_port, out_port): - """ - Callback triggered when a new pipe connection is made. - - *The default of this function does nothing re-implement if you require - logic to run for this event.* - - Note: - to work with undo & redo for this method re-implement - :meth:`BaseNode.on_input_disconnected` with the reverse logic. - - Args: - in_port (NodeGraphQt.Port): source input port from this node. - out_port (NodeGraphQt.Port): output port that connected to this node. - """ - return - - def on_input_disconnected(self, in_port, out_port): - """ - Callback triggered when a pipe connection has been disconnected - from a INPUT port. - - *The default of this function does nothing re-implement if you require - logic to run for this event.* - - Note: - to work with undo & redo for this method re-implement - :meth:`BaseNode.on_input_connected` with the reverse logic. - - Args: - in_port (NodeGraphQt.Port): source input port from this node. - out_port (NodeGraphQt.Port): output port that was disconnected. - """ - return \ No newline at end of file diff --git a/Nodes/character_status_node.py b/Nodes/character_status_node.py index 5e12394..ab5e0fd 100644 --- a/Nodes/character_status_node.py +++ b/Nodes/character_status_node.py @@ -9,7 +9,7 @@ If the API call is successful, the node's title is set to "Character Status (API If the API is down or returns an error, the title is set to "Character Status (API Disconnected)". """ -from NodeGraphQt import BaseNode +from OdenGraphQt import BaseNode from Qt import QtCore, QtGui import requests import traceback @@ -151,3 +151,4 @@ class CharacterStatusNode(BaseNode): except Exception as e: print(f"[ERROR] Error while handling port {stat}: {e}") print("[ERROR] Stack Trace:\n", traceback.format_exc()) + diff --git a/Nodes/data_node.py b/Nodes/data_node.py index 7c89dc1..1b1304b 100644 --- a/Nodes/data_node.py +++ b/Nodes/data_node.py @@ -15,7 +15,7 @@ Behavior: - Displays the input value but does not transmit it further. """ -from NodeGraphQt import BaseNode +from OdenGraphQt import BaseNode class DataNode(BaseNode): __identifier__ = 'bunny-lab.io.data_node' @@ -121,3 +121,5 @@ class DataNode(BaseNode): connected_node = connected_port.node() if hasattr(connected_node, 'receive_data'): connected_node.receive_data(data, source_port_name) + + diff --git a/Nodes/group_node.py b/Nodes/group_node.py deleted file mode 100644 index f87fe32..0000000 --- a/Nodes/group_node.py +++ /dev/null @@ -1,176 +0,0 @@ -#!/usr/bin/python -from NodeGraphQt.nodes.base_node import BaseNode -from NodeGraphQt.nodes.port_node import PortInputNode, PortOutputNode -from NodeGraphQt.qgraphics.node_group import GroupNodeItem - - -class GroupNode(BaseNode): - """ - `Implemented in` ``v0.2.0`` - - The ``NodeGraphQt.GroupNode`` class extends from the :class:`NodeGraphQt.BaseNode` - class with the ability to nest other nodes inside of it. - - .. inheritance-diagram:: NodeGraphQt.GroupNode - - .. image:: ../_images/group_node.png - :width: 250px - - - - """ - - NODE_NAME = 'Group' - - def __init__(self, qgraphics_item=None): - super(GroupNode, self).__init__(qgraphics_item or GroupNodeItem) - self._input_port_nodes = {} - self._output_port_nodes = {} - - @property - def is_expanded(self): - """ - Returns if the group node is expanded or collapsed. - - Returns: - bool: true if the node is expanded. - """ - if not self.graph: - return False - return bool(self.id in self.graph.sub_graphs) - - def get_sub_graph(self): - """ - Returns the sub graph controller to the group node if initialized - or returns None. - - Returns: - SubGraph: sub graph controller. - """ - return self.graph.sub_graphs.get(self.id) - - def get_sub_graph_session(self): - """ - Returns the serialized sub graph session. - - Returns: - dict: serialized sub graph session. - """ - return self.model.subgraph_session - - def set_sub_graph_session(self, serialized_session): - """ - Sets the sub graph session data to the group node. - - Args: - serialized_session (dict): serialized session. - """ - serialized_session = serialized_session or {} - self.model.subgraph_session = serialized_session - - def expand(self): - """ - Expand the group node session. - - See Also: - :meth:`NodeGraph.expand_group_node`, - :meth:`SubGraph.expand_group_node`. - - Returns: - SubGraph: node graph used to manage the nodes expaneded session. - """ - sub_graph = self.graph.expand_group_node(self) - return sub_graph - - def collapse(self): - """ - Collapse the group node session it's expanded child sub graphs. - - See Also: - :meth:`NodeGraph.collapse_group_node`, - :meth:`SubGraph.collapse_group_node`. - """ - self.graph.collapse_group_node(self) - - def set_name(self, name=''): - super(GroupNode, self).set_name(name) - # update the tab bar and navigation labels. - sub_graph = self.get_sub_graph() - if sub_graph: - nav_widget = sub_graph.navigation_widget - nav_widget.update_label_item(self.name(), self.id) - - if sub_graph.parent_graph.is_root: - root_graph = sub_graph.parent_graph - tab_bar = root_graph.widget.tabBar() - for idx in range(tab_bar.count()): - if tab_bar.tabToolTip(idx) == self.id: - tab_bar.setTabText(idx, self.name()) - break - - def add_input(self, name='input', multi_input=False, display_name=True, - color=None, locked=False, painter_func=None): - port = super(GroupNode, self).add_input( - name=name, - multi_input=multi_input, - display_name=display_name, - color=color, - locked=locked, - painter_func=painter_func - ) - if self.is_expanded: - input_node = PortInputNode(parent_port=port) - input_node.NODE_NAME = port.name() - input_node.model.set_property('name', port.name()) - input_node.add_output(port.name()) - sub_graph = self.get_sub_graph() - sub_graph.add_node(input_node, selected=False, push_undo=False) - - return port - - def add_output(self, name='output', multi_output=True, display_name=True, - color=None, locked=False, painter_func=None): - port = super(GroupNode, self).add_output( - name=name, - multi_output=multi_output, - display_name=display_name, - color=color, - locked=locked, - painter_func=painter_func - ) - if self.is_expanded: - output_port = PortOutputNode(parent_port=port) - output_port.NODE_NAME = port.name() - output_port.model.set_property('name', port.name()) - output_port.add_input(port.name()) - sub_graph = self.get_sub_graph() - sub_graph.add_node(output_port, selected=False, push_undo=False) - - return port - - def delete_input(self, port): - if type(port) in [int, str]: - port = self.get_input(port) - if port is None: - return - - if self.is_expanded: - sub_graph = self.get_sub_graph() - port_node = sub_graph.get_node_by_port(port) - if port_node: - sub_graph.remove_node(port_node, push_undo=False) - - super(GroupNode, self).delete_input(port) - - def delete_output(self, port): - if type(port) in [int, str]: - port = self.get_output(port) - if port is None: - return - - if self.is_expanded: - sub_graph = self.get_sub_graph() - port_node = sub_graph.get_node_by_port(port) - if port_node: - sub_graph.remove_node(port_node, push_undo=False) - - super(GroupNode, self).delete_output(port) \ No newline at end of file diff --git a/Nodes/math_operation_node.py b/Nodes/math_operation_node.py index 2bf84e4..149b895 100644 --- a/Nodes/math_operation_node.py +++ b/Nodes/math_operation_node.py @@ -8,7 +8,7 @@ Math Operation Node: - Displays the computed result in a read-only text box labeled "Result". """ -from NodeGraphQt import BaseNode +from OdenGraphQt import BaseNode class MathOperationNode(BaseNode): __identifier__ = 'bunny-lab.io.math_node' @@ -119,3 +119,4 @@ class MathOperationNode(BaseNode): def receive_data(self, data, source_port_name=None): self.process_input() + diff --git a/Nodes/port_node.py b/Nodes/port_node.py deleted file mode 100644 index 6a71524..0000000 --- a/Nodes/port_node.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/python -from NodeGraphQt.errors import PortRegistrationError -from NodeGraphQt.nodes.base_node import BaseNode -from NodeGraphQt.qgraphics.node_port_in import PortInputNodeItem -from NodeGraphQt.qgraphics.node_port_out import PortOutputNodeItem - - -class PortInputNode(BaseNode): - """ - The ``PortInputNode`` is the node that represents a input port from a - :class:`NodeGraphQt.GroupNode` when expanded in a - :class:`NodeGraphQt.SubGraph`. - - .. inheritance-diagram:: NodeGraphQt.nodes.port_node.PortInputNode - :parts: 1 - - .. image:: ../_images/port_in_node.png - :width: 150px - - - - """ - - NODE_NAME = 'InputPort' - - def __init__(self, qgraphics_item=None, parent_port=None): - super(PortInputNode, self).__init__(qgraphics_item or PortInputNodeItem) - self._parent_port = parent_port - - @property - def parent_port(self): - """ - The parent group node port representing this node. - - Returns: - NodeGraphQt.Port: port object. - """ - return self._parent_port - - def add_input(self, name='input', multi_input=False, display_name=True, - color=None, locked=False, painter_func=None): - """ - Warnings: - This is not available for the ``PortInputNode`` class. - """ - raise PortRegistrationError( - '"{}.add_input()" is not available for {}.' - .format(self.__class__.__name__, self) - ) - - def add_output(self, name='output', multi_output=True, display_name=True, - color=None, locked=False, painter_func=None): - """ - Warnings: - This function is called by :meth:`NodeGraphQt.SubGraph.expand_group_node` - and is not available for the ``PortInputNode`` class. - """ - if self._outputs: - raise PortRegistrationError( - '"{}.add_output()" only ONE output is allowed for this node.' - .format(self.__class__.__name__, self) - ) - super(PortInputNode, self).add_output( - name=name, - multi_output=multi_output, - display_name=False, - color=color, - locked=locked, - painter_func=None - ) - - -class PortOutputNode(BaseNode): - """ - The ``PortOutputNode`` is the node that represents a output port from a - :class:`NodeGraphQt.GroupNode` when expanded in a - :class:`NodeGraphQt.SubGraph`. - - .. inheritance-diagram:: NodeGraphQt.nodes.port_node.PortOutputNode - :parts: 1 - - .. image:: ../_images/port_out_node.png - :width: 150px - - - - """ - - NODE_NAME = 'OutputPort' - - def __init__(self, qgraphics_item=None, parent_port=None): - super(PortOutputNode, self).__init__( - qgraphics_item or PortOutputNodeItem - ) - self._parent_port = parent_port - - @property - def parent_port(self): - """ - The parent group node port representing this node. - - Returns: - NodeGraphQt.Port: port object. - """ - return self._parent_port - - def add_input(self, name='input', multi_input=False, display_name=True, - color=None, locked=False, painter_func=None): - """ - Warnings: - This function is called by :meth:`NodeGraphQt.SubGraph.expand_group_node` - and is not available for the ``PortOutputNode`` class. - """ - if self._inputs: - raise PortRegistrationError( - '"{}.add_input()" only ONE input is allowed for this node.' - .format(self.__class__.__name__, self) - ) - super(PortOutputNode, self).add_input( - name=name, - multi_input=multi_input, - display_name=False, - color=color, - locked=locked, - painter_func=None - ) - - def add_output(self, name='output', multi_output=True, display_name=True, - color=None, locked=False, painter_func=None): - """ - Warnings: - This is not available for the ``PortOutputNode`` class. - """ - raise PortRegistrationError( - '"{}.add_output()" is not available for {}.' - .format(self.__class__.__name__, self) - ) \ No newline at end of file diff --git a/borealis.py b/borealis.py index d9c4e3b..0b5c030 100644 --- a/borealis.py +++ b/borealis.py @@ -28,7 +28,7 @@ import pkgutil import importlib import inspect from Qt import QtWidgets, QtCore -from NodeGraphQt import NodeGraph, BaseNode +from OdenGraphQt import NodeGraph, BaseNode def import_nodes_from_folder(package_name): """ @@ -58,6 +58,7 @@ def make_node_command(graph, nt): return command if __name__ == '__main__': + app = QtWidgets.QApplication([]) # Create the NodeGraph controller. @@ -104,3 +105,4 @@ if __name__ == '__main__': timer.start(500) sys.exit(app.exec()) + diff --git a/debug_processed.png b/debug_processed.png index 6a2aa34d576df3a9734f035fe725bef939c4f72e..b905d3f16f8514ca838ba7dbbaa2383419dfbcee 100644 GIT binary patch delta 2664 zcmV-u3YYbd1CkbyBPj~mNklpy`43(K`y1DIO4R2Hyi!DT5GNKR-Qng`!Ii>ll=PwXn7Y%I7lICFJ)hE&t3m06S-16 zBFJ&lGe?2hgp}+(tw^mDC`JQih`M=HN7+4Fx`bm1i6}UaWs#Y z`vz9q`Dhc3qko2inPY(iUe-M%NRNDRwEtqHaWko3kIYI389Zv82~s7cC#2P%18ILq zZuysLeL*4HfKS}8o#sJ3klpk;Q)i?{1Uc$QIsjvgF)oo- zms&C1Hq$4mt>!k;uwrUQ9YJRH&=KTzDvHCIZ1+?Xm+zj|jx)x%hUzG6uBmN$4;?}7 zr=mErX2w*0Mp?Y4eL?Q_PdWfo7(I=1ecysXM+CW;g5o$L?MDQ;n%cw4RN^`t5ASPd ze~<#?XO5X1W!kP!`w>AdCtn=v4WxblN#OytAzvIb<0`$<>)Vd*uJ21hkP@VeOIz9jy#fis&6u7yQ*T4bQagazv2#keWI4q)AUC>WIx8 zmp*avSH%|B^%~ob8Q9VOAaA7Mgw%Tf>}$JiN85s2Oha+JvgW1EIp-a(^Cxq0+nXE_ ztLUjy3L*Q>8=FI-@_xacX9cIJ362&|8#ycXMfPC3j?%1qqSyFMlw| zN(WHkvJtw^r{o%y#m&3f8iq3eqys2(*Yt)<5+7R^=hv1DLmS=o?2IXnNSj;b^KE_$ z!Rn=Tc7>sh>VPYqV!xkly!7|GcxiHT6Sc7}3~e+YR`L_E*IhPT_1Y=%(ykqC4MQEp z#nIR)8Q$WVZc!431ii)4p2?tpf`2}no6Mb#Fl1;gj%ue^|FbJDtzD;%ELt9hK0nd{ zq%EC*$NNM{7*cf39KW5CNoV=Yzx%o%-(YJP3h68kV~jD@s>rUAFeKE}(6gqR}2p)#ZU4JPm3F9V*&K&Wu6zUiyVcg@?nZu{#fUhKsW&TEST&#K` zJLyl%Ab+kn(v*-u^vuL?t{Ba0)rfRswRk}&RbWO4Ws zKObp*Ky}Q~MhDt{k z$0hHndE>j-Evb#%sK17hc(1u944rfbT>VLjF_|@L%ik+C7sriZsCDGbVd`&6Y2$c}EPc0@ zXi;2PU0etwT~%(rYk#J<@D~*G=t>LYHLYNY!IA5SRO8SPP^*`I< z(!ym@)V6;{STlz_`)Z|}!=4OB$EWf^#0JNlLfes!UUYn6=E!V@h`t`%*m9A;q?G)k$%D4$w25;QS9QoB9-`-*)owvlNGw z54SG86Pt2l8o4#$` z?$g#bY$|d4yt!?_8snV%)<*j?8?9u?OP4*rOl!^R#|j& zRg-5IM|c}x;a$k$rYglS7{=;DaGV7z}eqL%raUX`CB42F@u0OAhm zFz<=S(jBk__zeq%Vy!nfZ60000000000000000001Bwf}mE WCtOOC;kXO{0000RkO5DJ##; z00kRb0`DHU-{tZnu-I?&qvaC=#rgMiRD4ff^P3MrtIpXL%FJTMyFoP-&?IcF;GPOwgscTfDm73v_S_* NrKhW(%Q~loCIALrStkGh diff --git a/debug_screenshot.png b/debug_screenshot.png index b67056ce2c86d2fb3b2abfcf4b43a68cbbe13fe2..ad9b0a00af11705887f2a2b0f83137f1b40f606d 100644 GIT binary patch literal 14133 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 =U#?;4cz_pCN=eMnXSh* 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 literal 3435 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 H@jm!J_A942