WIP: Brush assets project #106303
|
@ -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);
|
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);
|
const bNestedNodeRef *ref = this->find_nested_node_ref(nested_node_id);
|
||||||
if (ref == nullptr) {
|
if (ref == nullptr) {
|
||||||
|
@ -620,11 +621,14 @@ const bNode *bNodeTree::find_nested_node(const int32_t nested_node_id) const
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (!node->is_group()) {
|
if (!node->is_group()) {
|
||||||
|
if (r_tree) {
|
||||||
|
*r_tree = this;
|
||||||
|
}
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
const bNodeTree *group = reinterpret_cast<const bNodeTree *>(node->id);
|
const bNodeTree *group = reinterpret_cast<const bNodeTree *>(node->id);
|
||||||
if (group == nullptr) {
|
if (group == nullptr) {
|
||||||
return 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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -728,7 +728,7 @@ typedef struct bNodeTree {
|
||||||
const bNestedNodeRef *nested_node_ref_from_node_id_path(blender::Span<int> node_ids) const;
|
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,
|
[[nodiscard]] bool node_id_path_from_nested_node_ref(const int32_t nested_node_id,
|
||||||
blender::Vector<int32_t> &r_node_ids) const;
|
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
|
* Update a run-time cache for the node tree based on its current state. This makes many methods
|
||||||
|
|
|
@ -1713,6 +1713,39 @@ static IDProperty **rna_NodesModifier_properties(PointerRNA *ptr)
|
||||||
return &settings->properties;
|
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)
|
bool rna_GreasePencilModifier_material_poll(PointerRNA *ptr, PointerRNA value)
|
||||||
{
|
{
|
||||||
Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
|
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");
|
"node is renamed, grouped or ungrouped");
|
||||||
RNA_def_property_int_sdna(prop, nullptr, "id");
|
RNA_def_property_int_sdna(prop, nullptr, "id");
|
||||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
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)
|
static void rna_def_modifier_nodes_bakes(BlenderRNA *brna)
|
||||||
|
|
Loading…
Reference in New Issue