Geometry Nodes: Filter data-block buttons for tools and modifiers #112389
|
@ -294,7 +294,7 @@ class NewGeometryNodeGroupTool(Operator):
|
|||
|
||||
def execute(self, context):
|
||||
group = geometry_node_group_empty_tool_new(context)
|
||||
context.space_data.node_tree = group
|
||||
context.space_data.geometry_nodes_tool_tree = group
|
||||
return {'FINISHED'}
|
||||
|
||||
|
||||
|
|
|
@ -163,7 +163,7 @@ class NODE_HT_header(Header):
|
|||
if snode.node_tree and snode.node_tree.asset_data:
|
||||
layout.popover(panel="NODE_PT_geometry_node_asset_traits")
|
||||
else:
|
||||
layout.template_ID(snode, "node_tree", new="node.new_geometry_node_group_tool")
|
||||
layout.template_ID(snode, "geometry_nodes_tool_tree", new="node.new_geometry_node_group_tool")
|
||||
if snode.node_tree and snode.node_tree.asset_data:
|
||||
layout.popover(panel="NODE_PT_geometry_node_asset_traits")
|
||||
else:
|
||||
|
|
|
@ -1118,6 +1118,8 @@ static void node_foreach_id(SpaceLink *space_link, LibraryForeachIDData *data)
|
|||
}
|
||||
}
|
||||
|
||||
BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, snode->geometry_nodes_tool_tree, IDWALK_CB_USER_ONE);
|
||||
|
||||
/* Both `snode->id` and `snode->nodetree` have been remapped now, so their data can be
|
||||
* accessed. */
|
||||
BLI_assert(snode->id == nullptr || snode->nodetree == nullptr ||
|
||||
|
|
|
@ -1625,6 +1625,13 @@ typedef struct SpaceNode {
|
|||
*/
|
||||
char geometry_nodes_type;
|
||||
|
||||
/**
|
||||
* Used as the editor's top-level node group for #SNODE_GEOMETRY_TOOL. This is stored in the
|
||||
* node editor because it isn't part of the context otherwise, and it isn't meant to be set
|
||||
* separately from the editor's regular node group.
|
||||
*/
|
||||
struct bNodeTree *geometry_nodes_tool_tree;
|
||||
|
||||
/** Grease-pencil data. */
|
||||
struct bGPdata *gpd;
|
||||
|
||||
|
|
|
@ -2501,6 +2501,22 @@ static char *rna_SpaceNodeOverlay_path(const PointerRNA * /*ptr*/)
|
|||
return BLI_strdup("overlay");
|
||||
}
|
||||
|
||||
static bool rna_SpaceNodeEditor_geometry_nodes_tool_tree_poll(PointerRNA * /*ptr*/,
|
||||
const PointerRNA value)
|
||||
{
|
||||
const bNodeTree &ntree = *static_cast<const bNodeTree *>(value.data);
|
||||
if (ntree.type != NTREE_GEOMETRY) {
|
||||
return false;
|
||||
}
|
||||
if (!ntree.id.asset_data) {
|
||||
return false;
|
||||
}
|
||||
if ((ntree.geometry_node_asset_traits->flag & GEO_NODE_ASSET_TOOL) == 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static void rna_SpaceNodeEditor_node_tree_set(PointerRNA *ptr,
|
||||
const PointerRNA value,
|
||||
ReportList * /*reports*/)
|
||||
|
@ -2520,10 +2536,7 @@ static bool rna_SpaceNodeEditor_node_tree_poll(PointerRNA *ptr, const PointerRNA
|
|||
}
|
||||
if (ntree->type == NTREE_GEOMETRY) {
|
||||
if (snode->geometry_nodes_type == SNODE_GEOMETRY_TOOL) {
|
||||
if (!ntree->id.asset_data) {
|
||||
return false;
|
||||
}
|
||||
if ((ntree->geometry_node_asset_traits->flag & GEO_NODE_ASSET_TOOL) == 0) {
|
||||
if (!rna_SpaceNodeEditor_geometry_nodes_tool_tree_poll(ptr, value)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -7559,6 +7572,14 @@ static void rna_def_space_node(BlenderRNA *brna)
|
|||
RNA_def_property_update(
|
||||
prop, NC_SPACE | ND_SPACE_NODE_VIEW, "rna_SpaceNodeEditor_show_backdrop_update");
|
||||
|
||||
prop = RNA_def_property(srna, "geometry_nodes_tool_tree", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_pointer_funcs(
|
||||
prop, nullptr, nullptr, nullptr, "rna_SpaceNodeEditor_geometry_nodes_tool_tree_poll");
|
||||
RNA_def_property_pointer_sdna(prop, nullptr, "geometry_nodes_tool_tree");
|
||||
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_CONTEXT_UPDATE);
|
||||
RNA_def_property_ui_text(prop, "Node Tree", "Base node tree from context");
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE, "rna_SpaceNodeEditor_node_tree_update");
|
||||
|
||||
prop = RNA_def_property(srna, "show_annotation", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, nullptr, "flag", SNODE_SHOW_GPENCIL);
|
||||
RNA_def_property_ui_text(prop, "Show Annotation", "Show annotations for this view");
|
||||
|
|
|
@ -35,7 +35,7 @@ static void geometry_node_tree_get_from_context(
|
|||
{
|
||||
const SpaceNode *snode = CTX_wm_space_node(C);
|
||||
if (snode->geometry_nodes_type == SNODE_GEOMETRY_TOOL) {
|
||||
*r_ntree = snode->nodetree;
|
||||
*r_ntree = snode->geometry_nodes_tool_tree;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue