Blender  V3.3
node_intern.hh
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2008 Blender Foundation. All rights reserved. */
3 
8 #pragma once
9 
10 #include "BLI_math_vector.h"
11 #include "BLI_math_vector.hh"
12 #include "BLI_vector.hh"
13 
14 #include "BKE_node.h"
15 
16 #include "UI_interface.h"
17 #include "UI_interface.hh"
18 #include "UI_view2d.h"
19 
20 struct ARegion;
21 struct ARegionType;
22 struct Main;
23 struct NodeInsertOfsData;
24 struct View2D;
25 struct bContext;
26 struct bNode;
27 struct bNodeLink;
28 struct bNodeSocket;
29 struct wmGizmoGroupType;
30 struct wmKeyConfig;
31 struct wmWindow;
32 
33 /* Outside of blender namespace to avoid Python documentation build error with `ctypes`. */
34 extern "C" {
35 extern const char *node_context_dir[];
36 };
37 
38 namespace blender::ed::space_node {
39 
41 struct bNodeLinkDrag {
46 
48  void *draw_handle;
49 
52 
58 
59  /* The cursor position, used for drawing a + icon when dragging a node link. */
60  std::array<int, 2> cursor;
61 
68 
69  /* Data for edge panning */
71 };
72 
74  float aspect;
75 
78 
85 
91 
93  std::unique_ptr<bNodeLinkDrag> linkdrag;
94 
95  /* XXX hack for translate_attach op-macros to pass data from transform op to insert_offset op */
98 };
99 
102  NODE_RESIZE_TOP = (1 << 0),
103  NODE_RESIZE_BOTTOM = (1 << 1),
104  NODE_RESIZE_RIGHT = (1 << 2),
105  NODE_RESIZE_LEFT = (1 << 3),
106 };
108 
109 /* Nodes draw without DPI - the view zoom is flexible. */
110 #define HIDDEN_RAD (0.75f * U.widget_unit)
111 #define BASIS_RAD (0.2f * U.widget_unit)
112 #define NODE_DYS (U.widget_unit / 2)
113 #define NODE_DY U.widget_unit
114 #define NODE_SOCKDY (0.1f * U.widget_unit)
115 #define NODE_WIDTH(node) (node.width * UI_DPI_FAC)
116 #define NODE_HEIGHT(node) (node.height * UI_DPI_FAC)
117 #define NODE_MARGIN_X (1.2f * U.widget_unit)
118 #define NODE_SOCKSIZE (0.25f * U.widget_unit)
119 #define NODE_SOCKSIZE_DRAW_MULIPLIER 2.25f
120 #define NODE_SOCK_OUTLINE_SCALE 1.0f
121 #define NODE_MULTI_INPUT_LINK_GAP (0.25f * U.widget_unit)
122 #define NODE_RESIZE_MARGIN (0.20f * U.widget_unit)
123 #define NODE_LINK_RESOL 12
124 
125 /* space_node.cc */
126 
131 
137 void node_socket_color_get(const bContext &C,
138  const bNodeTree &ntree,
139  PointerRNA &node_ptr,
140  const bNodeSocket &sock,
141  float r_color[4]);
142 
143 /* node_draw.cc */
144 
145 void node_draw_space(const bContext &C, ARegion &region);
146 
148 
153 void node_sort(bNodeTree &ntree);
154 
155 void node_set_cursor(wmWindow &win, SpaceNode &snode, const float2 &cursor);
156 /* DPI scaled coords */
157 float2 node_to_view(const bNode &node, const float2 &co);
158 void node_to_updated_rect(const bNode &node, rctf &r_rect);
159 float2 node_from_view(const bNode &node, const float2 &co);
160 
161 /* node_ops.cc */
162 
163 void node_operatortypes();
164 void node_keymap(wmKeyConfig *keyconf);
165 
166 /* node_select.cc */
167 
169 bool node_or_socket_isect_event(bContext *C, const wmEvent *event);
170 
171 void node_deselect_all(SpaceNode &snode);
173 void node_socket_deselect(bNode *node, bNodeSocket &sock, bool deselect_node);
174 void node_deselect_all_input_sockets(SpaceNode &snode, bool deselect_nodes);
175 void node_deselect_all_output_sockets(SpaceNode &snode, bool deselect_nodes);
177 
188 
189 /* node_view.cc */
190 
192  bContext &C, SpaceNode &snode, ARegion &region, int node_flag, int smooth_viewtx);
193 
196 
201 
202 /* drawnode.cc */
203 
205 
207 void nodelink_batch_end(SpaceNode &snode);
208 
212 void node_draw_link(const bContext &C,
213  const View2D &v2d,
214  const SpaceNode &snode,
215  const bNodeLink &link,
216  bool selected);
220 void node_draw_link_bezier(const bContext &C,
221  const View2D &v2d,
222  const SpaceNode &snode,
223  const bNodeLink &link,
224  int th_col1,
225  int th_col2,
226  int th_col3,
227  bool selected);
229 bool node_link_bezier_points(const View2D *v2d,
230  const SpaceNode *snode,
231  const bNodeLink &link,
232  float coord_array[][2],
233  int resol);
237 bool node_link_bezier_handles(const View2D *v2d,
238  const SpaceNode *snode,
239  const bNodeLink &ink,
240  float vec[4][2]);
242  ARegion &region,
243  SpaceNode &snode,
244  bNodeInstanceKey parent_key);
245 
246 /* node_add.cc */
247 
253 bNode *node_add_node(const bContext &C, const char *idname, int type, float locx, float locy);
261 
262 /* node_group.cc */
263 
264 const char *node_group_idname(bContext *C);
270 
271 /* node_relationships.cc */
272 
274  bNode &node,
275  bNodeLink *drag_link,
276  const float2 *cursor);
277 
283 
288 
290 
292 
293 /* node_edit.cc */
294 
296  int index,
297  int total_inputs);
298 
299 void node_select_all(ListBase *lb, int action);
300 
301 float node_socket_calculate_height(const bNodeSocket &socket);
302 
303 void snode_set_context(const bContext &C);
304 
308 
310 void node_set_hidden_sockets(SpaceNode *snode, bNode *node, int set);
314  bNode **nodep,
315  bNodeSocket **sockp,
316  const float2 &cursor,
317  eNodeSocketInOut in_out);
318 float node_link_dim_factor(const View2D &v2d, const bNodeLink &link);
319 bool node_link_is_hidden_or_dimmed(const View2D &v2d, const bNodeLink &link);
320 
325 
332 
335 
339 
341 
347 
352 
354 
357 
360 
361 /* node_gizmo.cc */
362 
367 
368 /* node_geometry_attribute_search.cc */
369 
371  const bNode &node,
372  PointerRNA &socket_ptr,
373  uiLayout &layout);
374 
375 /* node_context_path.c */
376 
378 
379 /* link_drag_search.cc */
380 
382  bNode &node,
383  bNodeSocket &socket,
384  const float2 &cursor);
385 
386 } // namespace blender::ed::space_node
eNodeSocketInOut
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
#define C
Definition: RandGen.cpp:25
OperationNode * node
bNodeTree * ntree
void NODE_OT_parent_set(wmOperatorType *ot)
void NODE_OT_delete(wmOperatorType *ot)
Definition: node_edit.cc:1881
void NODE_OT_cryptomatte_layer_add(wmOperatorType *ot)
Definition: node_edit.cc:3037
void NODE_OT_add_object(wmOperatorType *ot)
Definition: node_add.cc:503
float node_socket_calculate_height(const bNodeSocket &socket)
Definition: node_edit.cc:95
void NODE_OT_read_viewlayers(wmOperatorType *ot)
Definition: node_edit.cc:1550
void node_sort(bNodeTree &ntree)
Definition: node_draw.cc:215
void node_socket_add_tooltip(bNodeTree *ntree, bNode *node, bNodeSocket *sock, uiLayout *layout)
Definition: node_draw.cc:1090
void NODE_OT_clipboard_copy(wmOperatorType *ot)
Definition: node_edit.cc:2280
int node_get_resize_cursor(NodeResizeDirection directions)
Definition: node_draw.cc:2508
void node_set_cursor(wmWindow &win, SpaceNode &snode, const float2 &cursor)
Definition: node_draw.cc:2522
bool node_or_socket_isect_event(bContext *C, const wmEvent *event)
Definition: node_select.cc:103
void NODE_OT_select_circle(wmOperatorType *ot)
Definition: node_select.cc:887
void NODE_OT_tree_socket_add(wmOperatorType *ot)
Definition: node_edit.cc:2480
void NODE_OT_add_mask(wmOperatorType *ot)
Definition: node_add.cc:773
bool space_node_view_flag(bContext &C, SpaceNode &snode, ARegion &region, int node_flag, int smooth_viewtx)
Definition: node_view.cc:48
void NODE_OT_backimage_sample(wmOperatorType *ot)
Definition: node_view.cc:692
void invoke_node_link_drag_add_menu(bContext &C, bNode &node, bNodeSocket &socket, const float2 &cursor)
void NODE_OT_add_reroute(wmOperatorType *ot)
Definition: node_add.cc:279
void NODE_OT_node_copy_color(wmOperatorType *ot)
Definition: node_edit.cc:2198
void node_draw_link_bezier(const bContext &C, const View2D &v2d, const SpaceNode &snode, const bNodeLink &link, const int th_col1, const int th_col2, const int th_col3, const bool selected)
Definition: drawnode.cc:1987
void NODE_OT_detach(wmOperatorType *ot)
bool composite_node_editable(bContext *C)
Definition: node_edit.cc:390
void node_geometry_add_attribute_search_button(const bContext &UNUSED(C), const bNode &node, PointerRNA &socket_ptr, uiLayout &layout)
void NODE_OT_viewer_border(wmOperatorType *ot)
Definition: node_edit.cc:2956
void nodelink_batch_end(SpaceNode &snode)
Definition: drawnode.cc:1935
void NODE_OT_tree_socket_move(wmOperatorType *ot)
Definition: node_edit.cc:2711
void NODE_OT_find_node(wmOperatorType *ot)
void NODE_OT_select_lasso(wmOperatorType *ot)
void NODE_OT_add_collection(wmOperatorType *ot)
Definition: node_add.cc:590
void node_socket_select(bNode *node, bNodeSocket &sock)
Definition: node_select.cc:203
void NODE_OT_backimage_zoom(wmOperatorType *ot)
Definition: node_view.cc:319
void NODE_OT_tree_socket_remove(wmOperatorType *ot)
Definition: node_edit.cc:2531
void NODE_OT_select(wmOperatorType *ot)
Definition: node_select.cc:695
void node_socket_color_get(const bContext &C, const bNodeTree &ntree, PointerRNA &node_ptr, const bNodeSocket &sock, float r_color[4])
Definition: node_draw.cc:764
void NODE_OT_insert_offset(wmOperatorType *ot)
void NODE_OT_group_make(wmOperatorType *ot)
Definition: node_group.cc:1057
void node_draw_link(const bContext &C, const View2D &v2d, const SpaceNode &snode, const bNodeLink &link, const bool selected)
Definition: drawnode.cc:2124
float2 node_link_calculate_multi_input_position(const float2 &socket_position, const int index, const int total_inputs)
Definition: node_edit.cc:104
void NODE_OT_resize(wmOperatorType *ot)
Definition: node_edit.cc:1142
void NODE_OT_backimage_move(wmOperatorType *ot)
Definition: node_view.cc:282
void NODE_OT_clipboard_paste(wmOperatorType *ot)
Definition: node_edit.cc:2408
void NODE_OT_render_changed(wmOperatorType *ot)
Definition: node_edit.cc:1603
void NODE_OT_links_detach(wmOperatorType *ot)
bool node_link_bezier_points(const View2D *v2d, const SpaceNode *snode, const bNodeLink &link, float coord_array[][2], const int resol)
Definition: drawnode.cc:1665
void NODE_OT_group_insert(wmOperatorType *ot)
Definition: node_group.cc:1107
void node_socket_deselect(bNode *node, bNodeSocket &sock, bool deselect_node)
Definition: node_select.cc:213
bNode * node_add_node(const bContext &C, const char *idname, int type, float locx, float locy)
Definition: node_add.cc:52
void NODE_OT_delete_reconnect(wmOperatorType *ot)
Definition: node_edit.cc:1969
void NODE_OT_shader_script_update(wmOperatorType *ot)
Definition: node_edit.cc:2863
void node_select_all(ListBase *lb, int action)
Definition: node_edit.cc:1488
void NODE_GGT_backdrop_corner_pin(wmGizmoGroupType *gzgt)
Definition: node_gizmo.cc:613
void NODE_OT_links_cut(wmOperatorType *ot)
void node_deselect_all(SpaceNode &snode)
Definition: node_select.cc:250
void NODE_OT_hide_socket_toggle(wmOperatorType *ot)
Definition: node_edit.cc:1802
void NODE_OT_select_grouped(wmOperatorType *ot)
Definition: node_select.cc:447
void draw_nodespace_back_pix(const bContext &C, ARegion &region, SpaceNode &snode, bNodeInstanceKey parent_key)
Definition: drawnode.cc:1501
void node_set_hidden_sockets(SpaceNode *snode, bNode *node, int set)
Definition: node_edit.cc:1180
float node_link_dim_factor(const View2D &v2d, const bNodeLink &link)
Definition: node_edit.cc:1301
void NODE_OT_output_file_remove_active_socket(wmOperatorType *ot)
Definition: node_edit.cc:2073
void NODE_OT_join(wmOperatorType *ot)
void node_deselect_all_output_sockets(SpaceNode &snode, bool deselect_nodes)
Definition: node_select.cc:287
NodeResizeDirection node_get_resize_direction(const bNode *node, const int x, const int y)
Definition: drawnode.cc:222
void nodelink_batch_start(SpaceNode &UNUSED(snode))
Definition: drawnode.cc:1930
void NODE_OT_attach(wmOperatorType *ot)
bool node_link_is_hidden_or_dimmed(const View2D &v2d, const bNodeLink &link)
Definition: node_edit.cc:1320
void NODE_OT_view_selected(wmOperatorType *ot)
Definition: node_view.cc:158
void NODE_OT_link_viewer(wmOperatorType *ot)
void NODE_GGT_backdrop_crop(wmGizmoGroupType *gzgt)
Definition: node_gizmo.cc:386
void NODE_OT_select_linked_from(wmOperatorType *ot)
bool node_find_indicated_socket(SpaceNode &snode, bNode **nodep, bNodeSocket **sockp, const float2 &cursor, const eNodeSocketInOut in_out)
Definition: node_edit.cc:1226
const char * node_group_idname(bContext *C)
Definition: node_group.cc:98
Vector< ui::ContextPathItem > context_path_for_space_node(const bContext &C)
void NODE_OT_select_same_type_step(wmOperatorType *ot)
void node_select_single(bContext &C, bNode &node)
Definition: node_select.cc:487
float2 space_node_group_offset(const SpaceNode &snode)
Definition: space_node.cc:207
void NODE_OT_preview_toggle(wmOperatorType *ot)
Definition: node_edit.cc:1721
void NODE_OT_clear_viewer_border(wmOperatorType *ot)
Definition: node_edit.cc:2989
void NODE_OT_select_linked_to(wmOperatorType *ot)
void NODE_OT_link_make(wmOperatorType *ot)
void NODE_OT_view_all(wmOperatorType *ot)
Definition: node_view.cc:125
void NODE_OT_group_edit(wmOperatorType *ot)
Definition: node_group.cc:161
void NODE_GGT_backdrop_transform(wmGizmoGroupType *gzgt)
Definition: node_gizmo.cc:170
void NODE_OT_group_separate(wmOperatorType *ot)
Definition: node_group.cc:619
float2 node_to_view(const bNode &node, const float2 &co)
Definition: node_draw.cc:284
void snode_set_context(const bContext &C)
Definition: node_edit.cc:618
void NODE_OT_duplicate(wmOperatorType *ot)
Definition: node_edit.cc:1459
bool node_has_hidden_sockets(bNode *node)
Definition: node_edit.cc:1165
void NODE_GGT_backdrop_sun_beams(wmGizmoGroupType *gzgt)
Definition: node_gizmo.cc:491
void sort_multi_input_socket_links(SpaceNode &snode, bNode &node, bNodeLink *drag_link, const float2 *cursor)
void NODE_OT_output_file_add_socket(wmOperatorType *ot)
Definition: node_edit.cc:2020
rctf node_frame_rect_inside(const bNode &node)
Definition: node_select.cc:88
void NODE_OT_options_toggle(wmOperatorType *ot)
Definition: node_edit.cc:1752
void node_keymap(wmKeyConfig *keyconf)
Definition: node_ops.cc:114
void NODE_OT_add_group(wmOperatorType *ot)
Definition: node_add.cc:416
void NODE_OT_add_file(wmOperatorType *ot)
Definition: node_add.cc:705
void node_to_updated_rect(const bNode &node, rctf &r_rect)
Definition: node_draw.cc:291
bool composite_node_active(bContext *C)
Definition: node_edit.cc:379
bool node_link_bezier_handles(const View2D *v2d, const SpaceNode *snode, const bNodeLink &link, float vec[4][2])
Definition: drawnode.cc:1587
void node_draw_space(const bContext &C, ARegion &region)
Definition: node_draw.cc:3054
void NODE_OT_link(wmOperatorType *ot)
void NODE_OT_switch_view_update(wmOperatorType *ot)
Definition: node_edit.cc:1929
void node_deselect_all_input_sockets(SpaceNode &snode, bool deselect_nodes)
Definition: node_select.cc:257
int node_render_changed_exec(bContext *C, wmOperator *UNUSED(op))
Definition: node_edit.cc:1565
void NODE_OT_links_mute(wmOperatorType *ot)
void NODE_OT_hide_toggle(wmOperatorType *ot)
Definition: node_edit.cc:1688
ENUM_OPERATORS(NodeResizeDirection, NODE_RESIZE_LEFT)
void NODE_OT_select_box(wmOperatorType *ot)
Definition: node_select.cc:797
void NODE_OT_select_all(wmOperatorType *ot)
void NODE_OT_group_ungroup(wmOperatorType *ot)
Definition: node_group.cc:409
void NODE_OT_new_node_tree(wmOperatorType *ot)
Definition: node_add.cc:865
float2 node_from_view(const bNode &node, const float2 &co)
Definition: node_draw.cc:302
void NODE_OT_cryptomatte_layer_remove(wmOperatorType *ot)
Definition: node_edit.cc:3087
void NODE_OT_backimage_fit(wmOperatorType *ot)
Definition: node_view.cc:384
void NODE_OT_tree_socket_change_type(wmOperatorType *ot)
Definition: node_edit.cc:2628
void NODE_OT_output_file_move_active_socket(wmOperatorType *ot)
Definition: node_edit.cc:2144
void NODE_OT_mute_toggle(wmOperatorType *ot)
Definition: node_edit.cc:1842
const char * node_context_dir[]
Definition: space_node.cc:828
Definition: BKE_main.h:121
struct NodeInsertOfsData * iofsd
Definition: node_intern.hh:97
std::unique_ptr< bNodeLinkDrag > linkdrag
Definition: node_intern.hh:93
wmOperatorType * ot
Definition: wm_files.c:3479