forked from bartvdbraak/blender
Node Space: Small feature for Venomgfx, Shift + F select node of the same type
This is a small request from Venomgfx, select a node and then press Shift + F to select all the nodes of the same type (of the active node). The key binding can be change, we thing in a "Find Next" (that is way the FKEY) with venomgfx, but no problem with change that. Also I add the entry in the select menu.
This commit is contained in:
parent
285a73d274
commit
9a4ba57ee9
@ -108,6 +108,7 @@ class NODE_MT_select(bpy.types.Menu):
|
|||||||
layout.operator("node.select_all")
|
layout.operator("node.select_all")
|
||||||
layout.operator("node.select_linked_from")
|
layout.operator("node.select_linked_from")
|
||||||
layout.operator("node.select_linked_to")
|
layout.operator("node.select_linked_to")
|
||||||
|
layout.operator("node.select_same_type")
|
||||||
|
|
||||||
|
|
||||||
class NODE_MT_node(bpy.types.Menu):
|
class NODE_MT_node(bpy.types.Menu):
|
||||||
|
@ -922,6 +922,38 @@ void node_deselectall(SpaceNode *snode)
|
|||||||
node->flag &= ~SELECT;
|
node->flag &= ~SELECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* return 1 if we need redraw otherwise zero. */
|
||||||
|
int node_select_same_type(SpaceNode *snode)
|
||||||
|
{
|
||||||
|
bNode *nac, *p;
|
||||||
|
int redraw;
|
||||||
|
|
||||||
|
/* search for the active node. */
|
||||||
|
for (nac= snode->edittree->nodes.first; nac; nac= nac->next) {
|
||||||
|
if (nac->flag & SELECT)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* no active node, return. */
|
||||||
|
if (!nac)
|
||||||
|
return(0);
|
||||||
|
|
||||||
|
redraw= 0;
|
||||||
|
for (p= snode->edittree->nodes.first; p; p= p->next) {
|
||||||
|
if (p->type != nac->type && p->flag & SELECT) {
|
||||||
|
/* if it's selected but different type, unselect */
|
||||||
|
redraw= 1;
|
||||||
|
p->flag &= ~SELECT;
|
||||||
|
}
|
||||||
|
else if (p->type == nac->type && (!(p->flag & SELECT))) {
|
||||||
|
/* if it's the same type and is not selected, select! */
|
||||||
|
redraw= 1;
|
||||||
|
p->flag |= SELECT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(redraw);
|
||||||
|
}
|
||||||
|
|
||||||
int node_has_hidden_sockets(bNode *node)
|
int node_has_hidden_sockets(bNode *node)
|
||||||
{
|
{
|
||||||
bNodeSocket *sock;
|
bNodeSocket *sock;
|
||||||
|
@ -62,6 +62,7 @@ void NODE_OT_select_linked_from(wmOperatorType *ot);
|
|||||||
void NODE_OT_visibility_toggle(struct wmOperatorType *ot);
|
void NODE_OT_visibility_toggle(struct wmOperatorType *ot);
|
||||||
void NODE_OT_view_all(struct wmOperatorType *ot);
|
void NODE_OT_view_all(struct wmOperatorType *ot);
|
||||||
void NODE_OT_select_border(struct wmOperatorType *ot);
|
void NODE_OT_select_border(struct wmOperatorType *ot);
|
||||||
|
void NODE_OT_select_same_type(struct wmOperatorType *ot);
|
||||||
|
|
||||||
/* drawnode.c */
|
/* drawnode.c */
|
||||||
void node_draw_link(View2D *v2d, SpaceNode *snode, bNodeLink *link);
|
void node_draw_link(View2D *v2d, SpaceNode *snode, bNodeLink *link);
|
||||||
@ -80,6 +81,7 @@ void snode_set_context(SpaceNode *snode, Scene *scene);
|
|||||||
void snode_make_group_editable(SpaceNode *snode, bNode *gnode);
|
void snode_make_group_editable(SpaceNode *snode, bNode *gnode);
|
||||||
void node_set_active(SpaceNode *snode, bNode *node);
|
void node_set_active(SpaceNode *snode, bNode *node);
|
||||||
void node_deselectall(SpaceNode *snode);
|
void node_deselectall(SpaceNode *snode);
|
||||||
|
int node_select_same_type(SpaceNode *snode);
|
||||||
void snode_composite_job(const struct bContext *C, ScrArea *sa);
|
void snode_composite_job(const struct bContext *C, ScrArea *sa);
|
||||||
bNode *node_tree_get_editgroup(bNodeTree *ntree);
|
bNode *node_tree_get_editgroup(bNodeTree *ntree);
|
||||||
void node_tree_verify_groups(bNodeTree *nodetree);
|
void node_tree_verify_groups(bNodeTree *nodetree);
|
||||||
|
@ -51,6 +51,7 @@ void node_operatortypes(void)
|
|||||||
WM_operatortype_append(NODE_OT_select_linked_to);
|
WM_operatortype_append(NODE_OT_select_linked_to);
|
||||||
WM_operatortype_append(NODE_OT_select_linked_from);
|
WM_operatortype_append(NODE_OT_select_linked_from);
|
||||||
WM_operatortype_append(NODE_OT_select_border);
|
WM_operatortype_append(NODE_OT_select_border);
|
||||||
|
WM_operatortype_append(NODE_OT_select_same_type);
|
||||||
|
|
||||||
WM_operatortype_append(NODE_OT_view_all);
|
WM_operatortype_append(NODE_OT_view_all);
|
||||||
WM_operatortype_append(NODE_OT_visibility_toggle);
|
WM_operatortype_append(NODE_OT_visibility_toggle);
|
||||||
@ -154,6 +155,7 @@ void node_keymap(struct wmKeyConfig *keyconf)
|
|||||||
WM_keymap_add_item(keymap, "NODE_OT_select_all", AKEY, KM_PRESS, 0, 0);
|
WM_keymap_add_item(keymap, "NODE_OT_select_all", AKEY, KM_PRESS, 0, 0);
|
||||||
WM_keymap_add_item(keymap, "NODE_OT_select_linked_to", LKEY, KM_PRESS, KM_SHIFT, 0);
|
WM_keymap_add_item(keymap, "NODE_OT_select_linked_to", LKEY, KM_PRESS, KM_SHIFT, 0);
|
||||||
WM_keymap_add_item(keymap, "NODE_OT_select_linked_from", LKEY, KM_PRESS, 0, 0);
|
WM_keymap_add_item(keymap, "NODE_OT_select_linked_from", LKEY, KM_PRESS, 0, 0);
|
||||||
|
WM_keymap_add_item(keymap, "NODE_OT_select_same_type", FKEY, KM_PRESS, KM_SHIFT, 0);
|
||||||
|
|
||||||
WM_keymap_add_item(keymap, "NODE_OT_group_make", GKEY, KM_PRESS, KM_CTRL, 0);
|
WM_keymap_add_item(keymap, "NODE_OT_group_make", GKEY, KM_PRESS, KM_CTRL, 0);
|
||||||
WM_keymap_add_item(keymap, "NODE_OT_group_ungroup", GKEY, KM_PRESS, KM_ALT, 0);
|
WM_keymap_add_item(keymap, "NODE_OT_group_ungroup", GKEY, KM_PRESS, KM_ALT, 0);
|
||||||
|
@ -363,3 +363,28 @@ void NODE_OT_select_linked_from(wmOperatorType *ot)
|
|||||||
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
|
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ****** Select Same Type ****** */
|
||||||
|
|
||||||
|
static int node_select_same_type_exec(bContext *C, wmOperator *op)
|
||||||
|
{
|
||||||
|
SpaceNode *snode = CTX_wm_space_node(C);
|
||||||
|
|
||||||
|
node_select_same_type(snode);
|
||||||
|
WM_event_add_notifier(C, NC_NODE|ND_NODE_SELECT, NULL);
|
||||||
|
return OPERATOR_FINISHED;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NODE_OT_select_same_type(wmOperatorType *ot)
|
||||||
|
{
|
||||||
|
/* identifiers */
|
||||||
|
ot->name = "Select Same Type";
|
||||||
|
ot->description = "Select all the same type";
|
||||||
|
ot->idname = "NODE_OT_select_same_type";
|
||||||
|
|
||||||
|
/* api callbacks */
|
||||||
|
ot->exec = node_select_same_type_exec;
|
||||||
|
ot->poll = ED_operator_node_active;
|
||||||
|
|
||||||
|
/* flags */
|
||||||
|
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user