Skip to content

Commit 383cba2

Browse files
committed
add commits && and dot style graph backgroud
1 parent 389571e commit 383cba2

File tree

10 files changed

+370
-228
lines changed

10 files changed

+370
-228
lines changed

NodeGraphQt/base/graph.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
PIPE_LAYOUT_CURVED,
2020
PIPE_LAYOUT_STRAIGHT,
2121
PIPE_LAYOUT_ANGLE,
22-
IN_PORT, OUT_PORT)
22+
IN_PORT, OUT_PORT,
23+
VIEWER_GRID_LINES)
2324
from ..widgets.viewer import NodeViewer
2425
from ..widgets.node_space_bar import node_space_bar
2526

@@ -466,14 +467,14 @@ def set_grid_color(self, r, g, b):
466467
self.scene().grid_color = (r, g, b)
467468
self._viewer.force_update()
468469

469-
def display_grid(self, display=True):
470+
def set_grid_mode(self, mode=VIEWER_GRID_LINES):
470471
"""
471-
Display node graph background grid.
472+
Set node graph grid mode.
472473
473474
Args:
474-
display: False to not draw the background grid.
475+
mode: VIEWER_GRID_LINES/VIEWER_GRID_DOTS/VIEWER_GRID_NONE.
475476
"""
476-
self.scene().grid = display
477+
self.scene().grid_mode = mode
477478
self._viewer.force_update()
478479

479480
def add_properties_bin(self, prop_bin):
@@ -1234,6 +1235,7 @@ def save_session(self, file_path):
12341235
node_space = node_space.id
12351236
serialized_data['graph'] = {'node_space': node_space, 'pipe_layout': self._viewer.get_pipe_layout()}
12361237
serialized_data['graph']['graph_rect'] = self._viewer.scene_rect()
1238+
serialized_data['graph']['grid_mode'] = self.scene().grid_mode
12371239

12381240
file_path = file_path.strip()
12391241
with open(file_path, 'w') as file_out:
@@ -1282,6 +1284,7 @@ def import_session(self, file_path):
12821284
self.set_node_space(self.root_node())
12831285
self._viewer.set_pipe_layout(layout_data['graph']['pipe_layout'])
12841286
self._viewer.set_scene_rect(layout_data['graph']['graph_rect'])
1287+
self.set_grid_mode(layout_data['graph'].get('grid_mode', VIEWER_GRID_LINES))
12851288

12861289
self.set_node_space(self.root_node())
12871290
self._undo_stack.clear()

NodeGraphQt/base/utils.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,13 @@ def setup_context_menu(graph):
9393

9494
pipe_menu = edit_menu.add_menu('&Pipe')
9595
pipe_menu.add_command('Curved Pipe', _curved_pipe)
96-
pipe_menu.add_command('Straght Pipe', _straight_pipe)
96+
pipe_menu.add_command('Straight Pipe', _straight_pipe)
9797
pipe_menu.add_command('Angle Pipe', _angle_pipe)
9898

99-
edit_menu.add_command('Toggle Disable Grid', _toggle_grid)
99+
bg_menu = edit_menu.add_menu('&Grid Mode')
100+
bg_menu.add_command('None', _bg_grid_none)
101+
bg_menu.add_command('Lines', _bg_grid_lines)
102+
bg_menu.add_command('Dots', _bg_grid_dots)
100103

101104
edit_menu.add_separator()
102105

@@ -276,8 +279,16 @@ def _angle_pipe(graph):
276279
graph.set_pipe_style(PIPE_LAYOUT_ANGLE)
277280

278281

279-
def _toggle_grid(graph):
280-
graph.display_grid(not graph.scene().grid)
282+
def _bg_grid_none(graph):
283+
graph.set_grid_mode(0)
284+
285+
286+
def _bg_grid_dots(graph):
287+
graph.set_grid_mode(1)
288+
289+
290+
def _bg_grid_lines(graph):
291+
graph.set_grid_mode(2)
281292

282293

283294
def __layout_graph(graph, down_stream=True):
@@ -342,7 +353,7 @@ def get_output_nodes(node):
342353
for cp in p.connected_ports():
343354
n = cp.node()
344355
if n.has_property('graph_rect'):
345-
n.add_run_port(cp)
356+
n.mark_node_to_be_cooked(cp)
346357
nodes[n.id] = n
347358
return list(nodes.values())
348359

@@ -522,10 +533,14 @@ def _update_nodes(nodes):
522533
nodes (list[NodeGraphQt.BaseNode]): nodes to be run.
523534
"""
524535
for node in nodes:
525-
if node.disabled():
526-
node.when_disabled()
527-
else:
528-
node.run()
536+
try:
537+
if node.disabled():
538+
node.when_disabled()
539+
else:
540+
node.run()
541+
except Exception as error:
542+
print("Error Update Node : {}\n{}" .format(node, str(error)))
543+
break
529544

530545

531546
def update_node_down_stream(node):
@@ -571,6 +586,7 @@ def update_nodes_by_up(nodes):
571586

572587
_update_nodes(topological_sort_by_up(all_nodes=nodes))
573588

589+
574590
# auto layout
575591

576592

NodeGraphQt/constants.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,13 @@
8888

8989
# === NODE VIEWER ===
9090

91+
VIEWER_GRID_NONE = 0
92+
VIEWER_GRID_DOTS = 1
93+
VIEWER_GRID_LINES = 2
94+
9195
VIEWER_BG_COLOR = (35, 35, 35)
9296
VIEWER_GRID_COLOR = (45, 45, 45)
93-
VIEWER_GRID_OVERLAY = True
94-
VIEWER_GRID_SIZE = 20
97+
VIEWER_GRID_SIZE = 50
9598

9699
DRAG_DROP_ID = 'n0deGraphQT'
97100

NodeGraphQt/widgets/scene.py

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,20 @@
22
from .. import QtGui, QtCore, QtWidgets
33

44
from ..constants import (VIEWER_BG_COLOR,
5-
VIEWER_GRID_SIZE,
6-
VIEWER_GRID_OVERLAY,
7-
VIEWER_GRID_COLOR)
5+
VIEWER_GRID_SIZE,
6+
VIEWER_GRID_COLOR,
7+
VIEWER_GRID_NONE,
8+
VIEWER_GRID_DOTS,
9+
VIEWER_GRID_LINES)
810

911

1012
class NodeScene(QtWidgets.QGraphicsScene):
1113

1214
def __init__(self, parent=None):
1315
super(NodeScene, self).__init__(parent)
1416
self.background_color = VIEWER_BG_COLOR
15-
self.grid = VIEWER_GRID_OVERLAY
1617
self.grid_color = VIEWER_GRID_COLOR
17-
18+
self._grid_mode = VIEWER_GRID_LINES
1819
self.setBackgroundBrush(self._bg_qcolor)
1920

2021
def __repr__(self):
@@ -31,13 +32,32 @@ def _draw_grid(self, painter, rect, pen, grid_size):
3132
first_left = left - (left % grid_size)
3233
first_top = top - (top % grid_size)
3334

34-
lines = []
35-
lines.extend([QtCore.QLineF(x, top, x, bottom) for x in range(first_left, right, grid_size)])
35+
lines = [QtCore.QLineF(x, top, x, bottom) for x in range(first_left, right, grid_size)]
3636
lines.extend([QtCore.QLineF(left, y, right, y) for y in range(first_top, bottom, grid_size)])
3737

3838
painter.setPen(pen)
3939
painter.drawLines(lines)
4040

41+
def _draw_dots(self, painter, rect, pen, grid_size):
42+
zoom = self.viewer().get_zoom()
43+
if zoom < 0:
44+
grid_size = int(abs(zoom) / 0.3 + 1) * grid_size
45+
46+
left = int(rect.left())
47+
right = int(rect.right())
48+
top = int(rect.top())
49+
bottom = int(rect.bottom())
50+
51+
first_left = left - (left % grid_size)
52+
first_top = top - (top % grid_size)
53+
54+
pen.setWidth(grid_size / 10)
55+
painter.setPen(pen)
56+
57+
for x in range(first_left, right, grid_size):
58+
for y in range(first_top, bottom, grid_size):
59+
painter.drawPoint(int(x), int(y))
60+
4161
def drawBackground(self, painter, rect):
4262
super(NodeScene, self).drawBackground(painter, rect)
4363

@@ -46,21 +66,20 @@ def drawBackground(self, painter, rect):
4666
painter.setRenderHint(QtGui.QPainter.Antialiasing, False)
4767
painter.setBrush(self.backgroundBrush())
4868

49-
if not self._grid:
50-
painter.restore()
51-
return
52-
53-
zoom = self.viewer().get_zoom()
54-
55-
if zoom > -0.5:
69+
if self._grid_mode is VIEWER_GRID_DOTS:
5670
pen = QtGui.QPen(QtGui.QColor(*self.grid_color), 0.65)
57-
self._draw_grid(painter, rect, pen, VIEWER_GRID_SIZE)
58-
59-
color = self._bg_qcolor.darker(150)
60-
if zoom < -0.0:
61-
color = color.darker(100 - int(zoom * 110))
62-
pen = QtGui.QPen(color, 0.65)
63-
self._draw_grid(painter, rect, pen, VIEWER_GRID_SIZE * 8)
71+
self._draw_dots(painter, rect, pen, VIEWER_GRID_SIZE)
72+
elif self._grid_mode is VIEWER_GRID_LINES:
73+
zoom = self.viewer().get_zoom()
74+
if zoom > -0.5:
75+
pen = QtGui.QPen(QtGui.QColor(*self.grid_color), 0.65)
76+
self._draw_grid(painter, rect, pen, VIEWER_GRID_SIZE)
77+
78+
color = self._bg_qcolor.darker(150)
79+
if zoom < -0.0:
80+
color = color.darker(100 - int(zoom * 110))
81+
pen = QtGui.QPen(color, 0.65)
82+
self._draw_grid(painter, rect, pen, VIEWER_GRID_SIZE * 8)
6483

6584
painter.restore()
6685

@@ -92,12 +111,12 @@ def viewer(self):
92111
return self.views()[0] if self.views() else None
93112

94113
@property
95-
def grid(self):
96-
return self._grid
114+
def grid_mode(self):
115+
return self._grid_mode
97116

98-
@grid.setter
99-
def grid(self, mode=True):
100-
self._grid = mode
117+
@grid_mode.setter
118+
def grid_mode(self, mode=VIEWER_GRID_LINES):
119+
self._grid_mode = mode
101120

102121
@property
103122
def grid_color(self):

NodeGraphQt/widgets/tab_search.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -215,10 +215,9 @@ def build_menu_tree(self):
215215

216216
max_depth = 0
217217
for node_type in node_types:
218-
trees = node_type.split(".")
219-
trees.pop(-1)
218+
trees = ".".join(node_type.split(".")[:-1]).split("::")
220219
for depth, menu_name in enumerate(trees):
221-
menu_path = ".".join(trees[:depth+1])
220+
menu_path = "::".join(trees[:depth+1])
222221
if depth in menu_tree.keys():
223222
if menu_name not in menu_tree[depth].keys():
224223
new_menu = QtWidgets.QMenu(menu_name)
@@ -229,7 +228,7 @@ def build_menu_tree(self):
229228
new_menu.setStyleSheet(STYLE_QMENU)
230229
menu_tree[depth] = {menu_path: new_menu}
231230
if depth > 0:
232-
new_menu.parentPath = ".".join(trees[:depth])
231+
new_menu.parentPath = "::".join(trees[:depth])
233232

234233
max_depth = max(max_depth,depth)
235234

NodeGraphQt/widgets/viewer.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ def __init__(self, parent=None):
9494
menu_bar.addMenu(self._ctx_node_menu)
9595
self._ctx_node_menu.setDisabled(True)
9696

97+
self._zoom_value = self.get_zoom()
98+
9799
self.acyclic = True
98100
self.LMB_state = False
99101
self.RMB_state = False
@@ -398,7 +400,7 @@ def wheelEvent(self, event):
398400
delta = event.angleDelta().y()
399401
if delta == 0:
400402
delta = event.angleDelta().x()
401-
403+
self._zoom_value += delta
402404
self._set_viewer_zoom(delta, pos=event.pos())
403405

404406
def dropEvent(self, event):
@@ -917,6 +919,9 @@ def clear_key_state(self):
917919
self.SHIFT_state = False
918920
self.ALT_state = False
919921

922+
def get_real_zoom(self):
923+
return self._zoom_value
924+
920925
def use_opengl(self):
921926
format = QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers)
922927
format.setSamples(4)

example_auto_nodes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def show_nodes_list(node):
118118

119119
# register nodes
120120
reg_nodes = get_nodes_from_folder(os.getcwd() + "/example_auto_nodes")
121-
BackdropNode.__identifier__ = 'Utility'
121+
BackdropNode.__identifier__ = 'Utility::Backdrop'
122122
reg_nodes.append(BackdropNode)
123123
reg_nodes.extend(get_published_nodes_from_folder(os.getcwd() + "/example_auto_nodes/published_nodes"))
124124
[graph.register_node(n) for n in reg_nodes]

0 commit comments

Comments
 (0)