def setup_exp(self): """Prepares the patch expander once a patch has been selected. Currently triggered via a button press. """ class MyNode(BaseNode): """ example test node. """ # set a unique node identifier. __identifier__ = 'com.chantasticvfx' # set the initial default node name. NODE_NAME = 'my node' def __init__(self): super(MyNode, self).__init__() self.set_color(25, 58, 51) # QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) # win = QtWidgets.QApplication([]) win = QWidget() win.setWindowTitle( "Interactive Patch Routing: {}".format(self.curr_viz["name"]) ) win.setWindowIcon(QIcon( os.path.join(os.getcwd(), "zoia_lib", "UI", "resources", "logo.ico"))) win.setFixedSize(540, 540) # create node graph. graph = NodeGraph() # set up default menu and commands. setup_context_menu(graph) # widget used for the node graph. graph_widget = graph.widget graph_widget.resize(1100, 800) graph_widget.show() # show the properties bin when a node is "double clicked" in the graph. properties_bin = PropertiesBinWidget(node_graph=graph) properties_bin.setWindowFlags(QtCore.Qt.Tool) def show_prop_bin(node): if not properties_bin.isVisible(): properties_bin.show() graph.node_double_clicked.connect(show_prop_bin) # show the nodes list when a node is "double clicked" in the graph. node_tree = NodeTreeWidget(node_graph=graph) def show_nodes_list(node): if not node_tree.isVisible(): node_tree.update() node_tree.show() graph.node_double_clicked.connect(show_nodes_list) # registered nodes. nodes_to_reg = [ # BackdropNode, MyNode, # basic_nodes.FooNode, # basic_nodes.BarNode, # widget_nodes.DropdownMenuNode, # widget_nodes.TextInputNode, # widget_nodes.CheckboxNode ] graph.register_nodes(nodes_to_reg) pch = self.curr_viz nodes = {} for module in pch['modules']: my_node = graph.create_node( 'com.chantasticvfx.MyNode', name=(module['type'] if module['name'] == '' else module['name']) + str(module["number"]), color='#0a1e20', text_color='#feab20' ) inp, outp, in_pos, out_pos = [], [], [], [] for key, param in module['blocks'].items(): if 'in' in key: my_node.add_input(key) inp.append(key) in_pos.append(int(param["position"])) elif param["isParam"]: my_node.add_input(key) inp.append(key) in_pos.append(int(param["position"])) elif 'out' in key: my_node.add_output(key) outp.append(key) out_pos.append(int(param["position"])) nodes[module["number"]] = my_node, inp, outp, in_pos, out_pos # print(nodes) # map pos from nodes to connections def node_pos_map(node): inpts = node[1] outps = node[2] in_pos = node[3] out_pos = node[4] node_pos_start = [x for x in range(0, len(inpts))] node_pos_end = [x for x in range(0, len(outps))] data_input = dict(zip(in_pos, node_pos_start)) data_output = dict(zip(out_pos, node_pos_end)) return {**data_input, **data_output} data = [] for key, node in nodes.items(): data.append(node_pos_map(node)) for conn in pch['connections']: mod, block = conn['source'].split('.') nmod, nblock = conn['destination'].split('.') src = data[int(mod)] dest = data[int(nmod)] try: nodes[int(mod)][0].set_output( src[int(block)], nodes[int(nmod)][0].input(dest[int(nblock)]) ) except KeyError as e: print(conn, e) except IndexError as e: print(conn, e) print('done making connections') # auto layout nodes. graph.auto_layout_nodes() # wrap a backdrop node. # backdrop_node = graph.create_node('nodeGraphQt.nodes.BackdropNode') # backdrop_node.wrap_nodes([text_node, checkbox_node]) graph.fit_to_selection() win.exec_()
super(MyNode, self).__init__() self.set_color(25, 58, 51) # create input and output port. self.add_input('in port') self.add_output('out port') if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) # create node graph. graph = NodeGraph() # set up default menu and commands. setup_context_menu(graph) # viewer widget used for the node graph. viewer = graph.viewer() viewer.resize(1100, 800) viewer.show() # show the properties bin when a node is "double clicked" in the graph. properties_bin = PropertiesBinWidget(node_graph=graph) properties_bin.setWindowFlags(QtCore.Qt.Tool) def show_prop_bin(node): if not properties_bin.isVisible(): properties_bin.show() graph.node_double_clicked.connect(show_prop_bin)
def __init__(self, parent=None): super(MyGraphWindow, self).__init__(parent) mainwidget = QWidget(self) self.setWindowTitle("MyGraph 1.0Alpha") # Build menu self.menubar = QMenuBar(self) file_menu = QMenu("&File") open_action = QAction("&Open", self, shortcut="Ctrl+O", triggered=self.open_session) file_menu.addAction(open_action) self.menubar.addMenu(file_menu) self.menubar.addAction('&Edit') self.view_menu = QMenu('&View') self.menubar.addMenu(self.view_menu) self.panel_submenu = QMenu("&Panels") self.view_menu.addMenu(self.panel_submenu) self.run_menu = self.menubar.addAction('&Run') mainLayout = QHBoxLayout() # main UI self.graph = NodeGraph() self.viewer = self.graph.viewer() mainwidget.setLayout(mainLayout) mainLayout.addWidget(self.viewer) self.setCentralWidget(mainwidget) self.setMenuBar(self.menubar) # set up default menu and commands. setup_context_menu(self.graph) # Add properties bin widget self.properties_bin = PropertiesBinWidget(node_graph=self.graph) self.properties_bin.setWindowFlags(Qt.Tool) side_widget = self.build_right_sidebar() self.add_dockWidget(name="Properties", widget=side_widget, addArea=Qt.RightDockWidgetArea) # Node tree widget self.node_tree = NodeTreeWidget(node_graph=self.graph) self.add_dockWidget(name="Node tree", widget=self.node_tree, addArea=Qt.LeftDockWidgetArea) # Connect to console sys.stdout = EmittingStream() sys.stderr = EmittingStream() sys.stdout.textWritten.connect( lambda text: self.console.append(text, isError=False)) sys.stderr.textWritten.connect( lambda text: self.console.append(text, isError=True)) self.console = widgets.Console() self.add_dockWidget(name="Console", widget=self.console, addArea=Qt.RightDockWidgetArea) self.registryNodes() self.do_connection() self.node_tree.update()