WIP: Brush assets project #106303

Draft
Julian Eisel wants to merge 352 commits from brush-assets-project into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
3 changed files with 50 additions and 3 deletions
Showing only changes of commit a2915e83e5 - Show all commits

View File

@ -608,7 +608,8 @@ bool bNodeTree::node_id_path_from_nested_node_ref(const int32_t nested_node_id,
return group->node_id_path_from_nested_node_ref(ref->path.id_in_node, r_node_ids);
}
const bNode *bNodeTree::find_nested_node(const int32_t nested_node_id) const
const bNode *bNodeTree::find_nested_node(const int32_t nested_node_id,
const bNodeTree **r_tree) const
{
const bNestedNodeRef *ref = this->find_nested_node_ref(nested_node_id);
if (ref == nullptr) {
@ -620,11 +621,14 @@ const bNode *bNodeTree::find_nested_node(const int32_t nested_node_id) const
return nullptr;
}
if (!node->is_group()) {
if (r_tree) {
*r_tree = this;
}
return node;
}
const bNodeTree *group = reinterpret_cast<const bNodeTree *>(node->id);
if (group == nullptr) {
return nullptr;
}
return group->find_nested_node(ref->path.id_in_node);
return group->find_nested_node(ref->path.id_in_node, r_tree);
}

View File

@ -728,7 +728,7 @@ typedef struct bNodeTree {
const bNestedNodeRef *nested_node_ref_from_node_id_path(blender::Span<int> node_ids) const;
[[nodiscard]] bool node_id_path_from_nested_node_ref(const int32_t nested_node_id,
blender::Vector<int32_t> &r_node_ids) const;
const bNode *find_nested_node(int32_t nested_node_id) const;
const bNode *find_nested_node(int32_t nested_node_id, const bNodeTree **r_tree = nullptr) const;
/**
* Update a run-time cache for the node tree based on its current state. This makes many methods

View File

@ -1713,6 +1713,39 @@ static IDProperty **rna_NodesModifier_properties(PointerRNA *ptr)
return &settings->properties;
}
static const NodesModifierData *find_nodes_modifier_by_bake(const Object &object,
const NodesModifierBake &bake)
{
LISTBASE_FOREACH (const ModifierData *, md, &object.modifiers) {
if (md->type != eModifierType_Nodes) {
continue;
}
const NodesModifierData *nmd = reinterpret_cast<const NodesModifierData *>(md);
const blender::Span<NodesModifierBake> bakes{nmd->bakes, nmd->bakes_num};
if (bakes.contains_ptr(&bake)) {
return nmd;
}
}
return nullptr;
}
static PointerRNA rna_NodesModifierBake_node_get(PointerRNA *ptr)
{
const Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
const NodesModifierBake *bake = static_cast<NodesModifierBake *>(ptr->data);
const NodesModifierData *nmd = find_nodes_modifier_by_bake(*ob, *bake);
if (!nmd->node_group) {
return PointerRNA_NULL;
}
const bNodeTree *tree;
const bNode *node = nmd->node_group->find_nested_node(bake->id, &tree);
if (!node) {
return PointerRNA_NULL;
}
BLI_assert(tree != nullptr);
return RNA_pointer_create(const_cast<ID *>(&tree->id), &RNA_Node, const_cast<bNode *>(node));
}
bool rna_GreasePencilModifier_material_poll(PointerRNA *ptr, PointerRNA value)
{
Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
@ -7205,6 +7238,16 @@ static void rna_def_modifier_nodes_bake(BlenderRNA *brna)
"node is renamed, grouped or ungrouped");
RNA_def_property_int_sdna(prop, nullptr, "id");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "node", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Node");
RNA_def_property_ui_text(prop,
"Node",
"Bake node or simulation output node that corresponds to this bake. "
"This node may be deeply nested in the modifier node group. It can be "
"none in some cases like missing linked data blocks");
RNA_def_property_pointer_funcs(
prop, "rna_NodesModifierBake_node_get", nullptr, nullptr, nullptr);
}
static void rna_def_modifier_nodes_bakes(BlenderRNA *brna)