Page Menu
Home
Search
Configure Global Search
Log In
Paste
P1904
Alternate solution for T83063 that keeps "Settings" struct in RNA
Active
Public
Actions
Authored by
Hans Goudey (HooglyBoogly)
on Jan 22 2021, 7:16 AM.
Edit Paste
Archive Paste
View Raw File
Subscribe
Mute Notifications
Award Token
Tags
Geometry Nodes
Subscribers
None
diff --git a/source/blender/blenloader/intern/versioning_290.c b/source/blender/blenloader/intern/versioning_290.c
index 627eecddeaa..15056a23bee 100644
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.c
@@ -1622,5 +1622,17 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
*/
{
/* Keep this block, even when empty. */
+
+ /* Initialize the nodes modifier settings pointer back to the modifier. */
+ if (!DNA_struct_elem_find(fd->filesdna, "NodesModifierSettings", "modifier", "ModifierData")) {
+ LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
+ LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
+ if (md->type == eModifierType_Nodes) {
+ NodesModifierData *nmd = (NodesModifierData *)md;
+ nmd->settings.modifier = md;
+ }
+ }
+ }
+ }
}
}
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 29421430e5d..0d448af905a 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -2245,6 +2245,8 @@ enum {
typedef struct NodesModifierSettings {
/* This stores data that is passed into the node group. */
struct IDProperty *properties;
+ /** Pointer back to the modifier, just to get its name for the RNA path. */
+ ModifierData *modifier;
} NodesModifierSettings;
typedef struct NodesModifierData {
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 88953e8fddf..15e72ed58ab 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -1627,9 +1627,14 @@ static IDProperty *rna_NodesModifierSettings_properties(PointerRNA *ptr, bool cr
return settings->properties;
}
-static char *rna_NodesModifierSettings_path(PointerRNA *UNUSED(ptr))
+static char *rna_NodesModifierSettings_path(PointerRNA *ptr)
{
- return BLI_strdup("settings");
+ const NodesModifierSettings *settings = ptr->data;
+ const ModifierData *md = settings->modifier;
+ char name_esc[sizeof(md->name) * 2];
+
+ BLI_str_escape(name_esc, md->name, sizeof(name_esc));
+ return BLI_sprintfN("modifiers[\"%s\"].settings", name_esc);
}
#else
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index 6da2ecba6a7..683383bc1c0 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -1163,6 +1163,7 @@ static void blendRead(BlendDataReader *reader, ModifierData *md)
NodesModifierData *nmd = reinterpret_cast<NodesModifierData *>(md);
BLO_read_data_address(reader, &nmd->settings.properties);
IDP_BlendDataRead(reader, &nmd->settings.properties);
+ nmd->settings.modifier = md;
}
static void copyData(const ModifierData *md, ModifierData *target, const int flag)
@@ -1174,6 +1175,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla
if (nmd->settings.properties != nullptr) {
tnmd->settings.properties = IDP_CopyProperty_ex(nmd->settings.properties, flag);
+ tnmd->settings.modifier = target;
}
}
Event Timeline
Hans Goudey (HooglyBoogly)
created this paste.
Jan 22 2021, 7:16 AM
Hans Goudey (HooglyBoogly)
mentioned this in
D10175: Fix animating nodes modifier properties doesn't work
.
Log In to Comment